@ecodev/natural 51.0.0 → 53.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-controller.mjs +13 -13
- package/esm2022/lib/classes/abstract-detail.mjs +16 -8
- package/esm2022/lib/classes/abstract-list.mjs +8 -9
- package/esm2022/lib/classes/abstract-navigable-list.mjs +4 -4
- package/esm2022/lib/classes/providers.mjs +13 -0
- package/esm2022/lib/directives/http-prefix.directive.mjs +3 -2
- package/esm2022/lib/modules/alert/confirm.component.mjs +5 -4
- package/esm2022/lib/modules/alert/public-api.mjs +1 -2
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +8 -8
- package/esm2022/lib/modules/avatar/public-api.mjs +1 -2
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +1 -1
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +29 -11
- package/esm2022/lib/modules/columns-picker/public-api.mjs +1 -2
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +3 -2
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +5 -3
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +6 -3
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +6 -3
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +3 -2
- package/esm2022/lib/modules/common/pipes/swiss-date.pipe.mjs +3 -2
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +3 -2
- package/esm2022/lib/modules/common/public-api.mjs +2 -2
- package/esm2022/lib/modules/common/services/seo.provider.mjs +23 -0
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +12 -9
- package/esm2022/lib/modules/detail-header/public-api.mjs +1 -2
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +3 -2
- package/esm2022/lib/modules/dialog-trigger/public-api.mjs +1 -2
- package/esm2022/lib/modules/dropdown-components/public-api.mjs +1 -2
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +31 -17
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +12 -9
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +22 -9
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +22 -9
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +23 -10
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +23 -11
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +10 -8
- package/esm2022/lib/modules/file/component/file.component.mjs +22 -13
- package/esm2022/lib/modules/file/file-drop.directive.mjs +3 -2
- package/esm2022/lib/modules/file/file-select.directive.mjs +3 -2
- package/esm2022/lib/modules/file/public-api.mjs +1 -2
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +11 -8
- package/esm2022/lib/modules/fixed-button/public-api.mjs +1 -2
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +14 -13
- package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +1 -2
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +31 -13
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +4 -3
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +6 -5
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +4 -3
- package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +1 -2
- package/esm2022/lib/modules/icon/icon.directive.mjs +11 -7
- package/esm2022/lib/modules/icon/icon.module.mjs +31 -41
- package/esm2022/lib/modules/icon/public-api.mjs +2 -2
- package/esm2022/lib/modules/logger/error-handler.mjs +3 -3
- package/esm2022/lib/modules/logger/error.module.mjs +14 -28
- package/esm2022/lib/modules/logger/public-api.mjs +2 -2
- package/esm2022/lib/modules/matomo/public-api.mjs +1 -2
- package/esm2022/lib/modules/panels/panels.component.mjs +3 -3
- package/esm2022/lib/modules/panels/panels.module.mjs +8 -31
- package/esm2022/lib/modules/panels/public-api.mjs +2 -2
- package/esm2022/lib/modules/relations/public-api.mjs +1 -2
- package/esm2022/lib/modules/relations/relations.component.mjs +29 -12
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +7 -6
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +6 -5
- package/esm2022/lib/modules/search/group/group.component.mjs +9 -7
- package/esm2022/lib/modules/search/input/input.component.mjs +29 -14
- package/esm2022/lib/modules/search/public-api.mjs +1 -2
- package/esm2022/lib/modules/search/search/search.component.mjs +23 -8
- package/esm2022/lib/modules/select/public-api.mjs +1 -2
- package/esm2022/lib/modules/select/select/select.component.mjs +42 -16
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +24 -9
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +27 -10
- package/esm2022/lib/modules/sidenav/public-api.mjs +1 -2
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +3 -2
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +8 -7
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +3 -3
- package/esm2022/lib/modules/stamp/public-api.mjs +1 -2
- package/esm2022/lib/modules/stamp/stamp.component.mjs +8 -7
- package/esm2022/lib/modules/table-button/public-api.mjs +1 -2
- package/esm2022/lib/modules/table-button/table-button.component.mjs +10 -8
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ecodev-natural.mjs +949 -1290
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/abstract-controller.d.ts +12 -6
- package/lib/classes/abstract-detail.d.ts +5 -6
- package/lib/classes/abstract-list.d.ts +6 -7
- package/lib/classes/abstract-navigable-list.d.ts +2 -2
- package/lib/classes/providers.d.ts +5 -0
- package/lib/directives/http-prefix.directive.d.ts +1 -1
- package/lib/modules/alert/confirm.component.d.ts +1 -1
- package/lib/modules/alert/public-api.d.ts +0 -1
- package/lib/modules/avatar/component/avatar.component.d.ts +3 -3
- package/lib/modules/avatar/public-api.d.ts +0 -1
- package/lib/modules/avatar/service/avatar.service.d.ts +2 -2
- package/lib/modules/columns-picker/columns-picker.component.d.ts +1 -1
- package/lib/modules/columns-picker/public-api.d.ts +0 -1
- package/lib/modules/common/directives/linkable-tab.directive.d.ts +1 -1
- package/lib/modules/common/directives/src-density.directive.d.ts +1 -1
- package/lib/modules/common/pipes/capitalize.pipe.d.ts +1 -1
- package/lib/modules/common/pipes/ellipsis.pipe.d.ts +1 -1
- package/lib/modules/common/pipes/enum.pipe.d.ts +1 -1
- package/lib/modules/common/pipes/swiss-date.pipe.d.ts +1 -1
- package/lib/modules/common/pipes/time-ago.pipe.d.ts +1 -1
- package/lib/modules/common/public-api.d.ts +1 -1
- package/lib/modules/common/services/seo.provider.d.ts +6 -0
- package/lib/modules/detail-header/detail-header.component.d.ts +1 -1
- package/lib/modules/detail-header/public-api.d.ts +0 -1
- package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +1 -1
- package/lib/modules/dialog-trigger/public-api.d.ts +0 -1
- package/lib/modules/dropdown-components/public-api.d.ts +0 -1
- package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +2 -3
- package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +1 -1
- package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +1 -1
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +1 -1
- package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +1 -1
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
- package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +1 -1
- package/lib/modules/file/component/file.component.d.ts +3 -3
- package/lib/modules/file/file-drop.directive.d.ts +1 -1
- package/lib/modules/file/file-select.directive.d.ts +1 -1
- package/lib/modules/file/public-api.d.ts +0 -1
- package/lib/modules/fixed-button/fixed-button.component.d.ts +1 -1
- package/lib/modules/fixed-button/public-api.d.ts +0 -1
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
- package/lib/modules/fixed-button-detail/public-api.d.ts +0 -1
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +1 -1
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +1 -1
- package/lib/modules/hierarchic-selector/public-api.d.ts +0 -1
- package/lib/modules/icon/icon.directive.d.ts +3 -3
- package/lib/modules/icon/icon.module.d.ts +5 -13
- package/lib/modules/icon/public-api.d.ts +1 -1
- package/lib/modules/logger/error-handler.d.ts +2 -2
- package/lib/modules/logger/error.module.d.ts +2 -9
- package/lib/modules/logger/public-api.d.ts +1 -1
- package/lib/modules/matomo/public-api.d.ts +0 -1
- package/lib/modules/panels/panels.component.d.ts +1 -2
- package/lib/modules/panels/panels.module.d.ts +2 -12
- package/lib/modules/panels/public-api.d.ts +1 -1
- package/lib/modules/relations/public-api.d.ts +0 -1
- package/lib/modules/relations/relations.component.d.ts +1 -1
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +1 -1
- package/lib/modules/search/facet-selector/facet-selector.component.d.ts +1 -1
- package/lib/modules/search/group/group.component.d.ts +1 -1
- package/lib/modules/search/input/input.component.d.ts +1 -1
- package/lib/modules/search/public-api.d.ts +0 -1
- package/lib/modules/search/search/search.component.d.ts +1 -1
- package/lib/modules/select/public-api.d.ts +0 -1
- package/lib/modules/select/select/select.component.d.ts +1 -1
- package/lib/modules/select/select-enum/select-enum.component.d.ts +1 -1
- package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +1 -1
- package/lib/modules/sidenav/public-api.d.ts +0 -1
- package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +1 -1
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
- package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +1 -1
- package/lib/modules/stamp/public-api.d.ts +0 -1
- package/lib/modules/stamp/stamp.component.d.ts +1 -1
- package/lib/modules/table-button/public-api.d.ts +0 -1
- package/lib/modules/table-button/table-button.component.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/esm2022/lib/modules/alert/alert.module.mjs +0 -20
- package/esm2022/lib/modules/avatar/avatar.module.mjs +0 -19
- package/esm2022/lib/modules/columns-picker/columns-picker.module.mjs +0 -48
- package/esm2022/lib/modules/common/common-module.mjs +0 -54
- package/esm2022/lib/modules/detail-header/detail-header.module.mjs +0 -22
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.module.mjs +0 -19
- package/esm2022/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +0 -90
- package/esm2022/lib/modules/file/file.module.mjs +0 -25
- package/esm2022/lib/modules/fixed-button/fixed-button.module.mjs +0 -22
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +0 -20
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +0 -79
- package/esm2022/lib/modules/matomo/matomo-module.module.mjs +0 -12
- package/esm2022/lib/modules/relations/relations.module.mjs +0 -60
- package/esm2022/lib/modules/search/search.module.mjs +0 -90
- package/esm2022/lib/modules/select/select.module.mjs +0 -70
- package/esm2022/lib/modules/sidenav/sidenav.module.mjs +0 -25
- package/esm2022/lib/modules/stamp/stamp-module.module.mjs +0 -20
- package/esm2022/lib/modules/table-button/table-button.module.mjs +0 -22
- package/lib/modules/alert/alert.module.d.ts +0 -11
- package/lib/modules/avatar/avatar.module.d.ts +0 -8
- package/lib/modules/columns-picker/columns-picker.module.d.ts +0 -15
- package/lib/modules/common/common-module.d.ts +0 -18
- package/lib/modules/detail-header/detail-header.module.d.ts +0 -12
- package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +0 -9
- package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +0 -24
- package/lib/modules/file/file.module.d.ts +0 -14
- package/lib/modules/fixed-button/fixed-button.module.d.ts +0 -12
- package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +0 -10
- package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +0 -23
- package/lib/modules/matomo/matomo-module.module.d.ts +0 -6
- package/lib/modules/relations/relations.module.d.ts +0 -18
- package/lib/modules/search/search.module.d.ts +0 -23
- package/lib/modules/select/select.module.d.ts +0 -22
- package/lib/modules/sidenav/sidenav.module.d.ts +0 -13
- package/lib/modules/stamp/stamp-module.module.d.ts +0 -9
- package/lib/modules/table-button/table-button.module.d.ts +0 -12
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
4
|
+
import { NaturalFixedButtonComponent } from '../fixed-button/fixed-button.component';
|
|
5
|
+
import { NgIf } from '@angular/common';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
7
|
import * as i1 from "@angular/router";
|
|
6
|
-
import * as i2 from "@angular/
|
|
7
|
-
|
|
8
|
-
import * as i4 from "@angular/material/tooltip";
|
|
9
|
-
export class NaturalFixedButtonDetailComponent extends NaturalAbstractController {
|
|
8
|
+
import * as i2 from "@angular/material/tooltip";
|
|
9
|
+
export class NaturalFixedButtonDetailComponent {
|
|
10
10
|
get model() {
|
|
11
11
|
return this._model;
|
|
12
12
|
}
|
|
@@ -18,12 +18,11 @@ export class NaturalFixedButtonDetailComponent extends NaturalAbstractController
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
constructor(route) {
|
|
21
|
-
super();
|
|
22
21
|
this.canChange = true;
|
|
23
22
|
this.isCreation = false;
|
|
24
23
|
this.create = new EventEmitter();
|
|
25
24
|
this.delete = new EventEmitter();
|
|
26
|
-
route.params.pipe(
|
|
25
|
+
route.params.pipe(takeUntilDestroyed()).subscribe(() => (this.canChange = true));
|
|
27
26
|
}
|
|
28
27
|
clickCreate() {
|
|
29
28
|
if (this.form.enabled) {
|
|
@@ -36,18 +35,20 @@ export class NaturalFixedButtonDetailComponent extends NaturalAbstractController
|
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalFixedButtonDetailComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: NaturalFixedButtonDetailComponent, selector: "natural-fixed-button-detail", inputs: { model: "model", form: "form" }, outputs: { create: "create", delete: "delete" },
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: NaturalFixedButtonDetailComponent, isStandalone: true, selector: "natural-fixed-button-detail", inputs: { model: "model", form: "form" }, outputs: { create: "create", delete: "delete" }, ngImport: i0, template: "<natural-fixed-button\n (click)=\"clickCreate()\"\n *ngIf=\"isCreation\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'accent' : 'warn'\"\n class=\"detail-speed-dial\"\n icon=\"save\"\n></natural-fixed-button>\n\n<natural-fixed-button\n (click)=\"clickDelete()\"\n *ngIf=\"!isCreation && (!model.permissions || model.permissions.delete)\"\n [disabled]=\"form.disabled\"\n class=\"detail-speed-dial\"\n color=\"warn\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer d\u00E9finitivement\"\n matTooltipPosition=\"left\"\n></natural-fixed-button>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NaturalFixedButtonComponent, selector: "natural-fixed-button", inputs: ["icon", "link", "color", "disabled"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] }); }
|
|
40
39
|
}
|
|
41
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalFixedButtonDetailComponent, decorators: [{
|
|
42
41
|
type: Component,
|
|
43
|
-
args: [{ selector: 'natural-fixed-button-detail', template: "<natural-fixed-button\n (click)=\"clickCreate()\"\n *ngIf=\"isCreation\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'accent' : 'warn'\"\n class=\"detail-speed-dial\"\n icon=\"save\"\n></natural-fixed-button>\n\n<natural-fixed-button\n (click)=\"clickDelete()\"\n *ngIf=\"!isCreation && (!model.permissions || model.permissions.delete)\"\n [disabled]=\"form.disabled\"\n class=\"detail-speed-dial\"\n color=\"warn\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer d\u00E9finitivement\"\n matTooltipPosition=\"left\"\n></natural-fixed-button>\n" }]
|
|
42
|
+
args: [{ selector: 'natural-fixed-button-detail', standalone: true, imports: [NgIf, NaturalFixedButtonComponent, MatTooltipModule], template: "<natural-fixed-button\n (click)=\"clickCreate()\"\n *ngIf=\"isCreation\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'accent' : 'warn'\"\n class=\"detail-speed-dial\"\n icon=\"save\"\n></natural-fixed-button>\n\n<natural-fixed-button\n (click)=\"clickDelete()\"\n *ngIf=\"!isCreation && (!model.permissions || model.permissions.delete)\"\n [disabled]=\"form.disabled\"\n class=\"detail-speed-dial\"\n color=\"warn\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer d\u00E9finitivement\"\n matTooltipPosition=\"left\"\n></natural-fixed-button>\n" }]
|
|
44
43
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }]; }, propDecorators: { model: [{
|
|
45
|
-
type: Input
|
|
44
|
+
type: Input,
|
|
45
|
+
args: [{ required: true }]
|
|
46
46
|
}], form: [{
|
|
47
|
-
type: Input
|
|
47
|
+
type: Input,
|
|
48
|
+
args: [{ required: true }]
|
|
48
49
|
}], create: [{
|
|
49
50
|
type: Output
|
|
50
51
|
}], delete: [{
|
|
51
52
|
type: Output
|
|
52
53
|
}] } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWQtYnV0dG9uLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9maXhlZC1idXR0b24tZGV0YWlsL2ZpeGVkLWJ1dHRvbi1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvZml4ZWQtYnV0dG9uLWRldGFpbC9maXhlZC1idXR0b24tZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHckUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7O0FBZ0JyQyxNQUFNLE9BQU8saUNBQWlDO0lBSTFDLElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDVyxLQUFLLENBQUMsS0FBWTtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQVNELFlBQW1CLEtBQXFCO1FBdkJoQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFtQkEsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHeEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQzs4R0F0Q1EsaUNBQWlDO2tHQUFqQyxpQ0FBaUMsa0xDdEI5QywrbUJBb0JBLDBEREFjLElBQUksNkZBQUUsMkJBQTJCLCtHQUFFLGdCQUFnQjs7MkZBRXBELGlDQUFpQztrQkFQN0MsU0FBUzsrQkFDSSw2QkFBNkIsY0FHM0IsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFLGdCQUFnQixDQUFDO3FHQVduRCxLQUFLO3NCQURmLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQVdTLElBQUk7c0JBQW5DLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQUVHLE1BQU07c0JBQS9CLE1BQU07Z0JBQ21CLE1BQU07c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7TWF0VG9vbHRpcE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQge05hdHVyYWxGaXhlZEJ1dHRvbkNvbXBvbmVudH0gZnJvbSAnLi4vZml4ZWQtYnV0dG9uL2ZpeGVkLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG50eXBlIE1vZGVsID0ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHBlcm1pc3Npb25zPzoge1xuICAgICAgICBkZWxldGU6IGJvb2xlYW47XG4gICAgfTtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmF0dXJhbC1maXhlZC1idXR0b24tZGV0YWlsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZml4ZWQtYnV0dG9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZml4ZWQtYnV0dG9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5hdHVyYWxGaXhlZEJ1dHRvbkNvbXBvbmVudCwgTWF0VG9vbHRpcE1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxGaXhlZEJ1dHRvbkRldGFpbENvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBjYW5DaGFuZ2UgPSB0cnVlO1xuICAgIHB1YmxpYyBpc0NyZWF0aW9uID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KVxuICAgIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IE1vZGVsKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmNhbkNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW9uID0gIXRoaXMuX21vZGVsLmlkO1xuICAgICAgICAgICAgdGhpcy5jYW5DaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX21vZGVsITogTW9kZWw7XG5cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihyb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgICAgcm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiAodGhpcy5jYW5DaGFuZ2UgPSB0cnVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrQ3JlYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0RlbGV0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmF0dXJhbC1maXhlZC1idXR0b25cbiAgICAoY2xpY2spPVwiY2xpY2tDcmVhdGUoKVwiXG4gICAgKm5nSWY9XCJpc0NyZWF0aW9uXCJcbiAgICBbZGlzYWJsZWRdPVwiZm9ybS5kaXNhYmxlZFwiXG4gICAgW2NvbG9yXT1cImZvcm0udmFsaWQgPyAnYWNjZW50JyA6ICd3YXJuJ1wiXG4gICAgY2xhc3M9XCJkZXRhaWwtc3BlZWQtZGlhbFwiXG4gICAgaWNvbj1cInNhdmVcIlxuPjwvbmF0dXJhbC1maXhlZC1idXR0b24+XG5cbjxuYXR1cmFsLWZpeGVkLWJ1dHRvblxuICAgIChjbGljayk9XCJjbGlja0RlbGV0ZSgpXCJcbiAgICAqbmdJZj1cIiFpc0NyZWF0aW9uICYmICghbW9kZWwucGVybWlzc2lvbnMgfHwgbW9kZWwucGVybWlzc2lvbnMuZGVsZXRlKVwiXG4gICAgW2Rpc2FibGVkXT1cImZvcm0uZGlzYWJsZWRcIlxuICAgIGNsYXNzPVwiZGV0YWlsLXNwZWVkLWRpYWxcIlxuICAgIGNvbG9yPVwid2FyblwiXG4gICAgaWNvbj1cImRlbGV0ZV9mb3JldmVyXCJcbiAgICBpMThuLW1hdFRvb2x0aXBcbiAgICBtYXRUb29sdGlwPVwiU3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudFwiXG4gICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiXG4+PC9uYXR1cmFsLWZpeGVkLWJ1dHRvbj5cbiJdfQ==
|
|
@@ -2,5 +2,4 @@
|
|
|
2
2
|
* Public API Surface of natural
|
|
3
3
|
*/
|
|
4
4
|
export * from './fixed-button-detail.component';
|
|
5
|
-
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpeGVkLWJ1dHRvbi1kZXRhaWwvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbmF0dXJhbFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vZml4ZWQtYnV0dG9uLWRldGFpbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9maXhlZC1idXR0b24tZGV0YWlsLm1vZHVsZSc7XG4iXX0=
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpeGVkLWJ1dHRvbi1kZXRhaWwvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5hdHVyYWxcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2ZpeGVkLWJ1dHRvbi1kZXRhaWwuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
2
|
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
3
3
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
4
|
-
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
|
|
4
|
+
import { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';
|
|
5
5
|
import { finalize, takeUntil } from 'rxjs/operators';
|
|
6
6
|
import { NaturalAbstractController } from '../../../classes/abstract-controller';
|
|
7
7
|
import { toGraphQLDoctrineFilter } from '../../search/classes/graphql-doctrine';
|
|
8
8
|
import { HierarchicFlatNode } from '../classes/flat-node';
|
|
9
9
|
import { NaturalHierarchicSelectorService } from './hierarchic-selector.service';
|
|
10
10
|
import { replaceObjectKeepingReference } from '../../../classes/utility';
|
|
11
|
+
import { MatChipsModule } from '@angular/material/chips';
|
|
12
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
13
|
+
import { NaturalIconDirective } from '../../icon/icon.directive';
|
|
14
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
15
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
16
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
17
|
+
import { NgIf, NgClass, NgFor } from '@angular/common';
|
|
18
|
+
import { NaturalSearchComponent } from '../../search/search/search.component';
|
|
11
19
|
import * as i0 from "@angular/core";
|
|
12
20
|
import * as i1 from "./hierarchic-selector.service";
|
|
13
|
-
import * as i2 from "@angular/
|
|
14
|
-
import * as i3 from "@angular/material/
|
|
21
|
+
import * as i2 from "@angular/material/progress-spinner";
|
|
22
|
+
import * as i3 from "@angular/material/tree";
|
|
15
23
|
import * as i4 from "@angular/material/button";
|
|
16
|
-
import * as i5 from "@angular/material/
|
|
17
|
-
import * as i6 from "@angular/material/
|
|
18
|
-
import * as i7 from "@angular/material/
|
|
19
|
-
import * as i8 from "../../icon/icon.directive";
|
|
20
|
-
import * as i9 from "@angular/material/chips";
|
|
21
|
-
import * as i10 from "../../search/search/search.component";
|
|
24
|
+
import * as i5 from "@angular/material/icon";
|
|
25
|
+
import * as i6 from "@angular/material/checkbox";
|
|
26
|
+
import * as i7 from "@angular/material/chips";
|
|
22
27
|
export class NaturalHierarchicSelectorComponent extends NaturalAbstractController {
|
|
23
28
|
constructor(hierarchicSelectorService) {
|
|
24
29
|
super();
|
|
@@ -336,15 +341,28 @@ export class NaturalHierarchicSelectorComponent extends NaturalAbstractControlle
|
|
|
336
341
|
return model.__typename + '-' + model.id;
|
|
337
342
|
}
|
|
338
343
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalHierarchicSelectorComponent, deps: [{ token: i1.NaturalHierarchicSelectorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
339
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: NaturalHierarchicSelectorComponent, selector: "natural-hierarchic-selector", inputs: { displayWith: "displayWith", config: "config", multiple: "multiple", selected: "selected", allowUnselect: "allowUnselect", filters: "filters", searchFacets: "searchFacets", searchSelections: "searchSelections" }, outputs: { searchSelectionChange: "searchSelectionChange", selectionChange: "selectionChange" }, providers: [NaturalHierarchicSelectorService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search\n (selectionChange)=\"search($event)\"\n [facets]=\"searchFacets\"\n [selections]=\"searchSelections\"\n ></natural-search>\n</div>\n\n<div class=\"body\">\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"36\"\n mode=\"indeterminate\"\n style=\"margin: 10px\"\n ></mat-progress-spinner>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n <button\n (click)=\"loadChildren(node)\"\n *ngIf=\"node.expandable\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n <mat-progress-spinner\n *ngIf=\"node.loading\"\n [diameter]=\"24\"\n [strokeWidth]=\"5\"\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <mat-icon\n *ngIf=\"!node.loading\"\n [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\"\n ></mat-icon>\n </button>\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n <mat-icon\n *ngIf=\"node.node.config.icon\"\n [naturalIcon]=\"node.node.config.icon\"\n style=\"margin-right: 10px\"\n ></mat-icon>\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n <mat-chip-option\n (removed)=\"unselectModelNode(node)\"\n *ngFor=\"let node of selectedNodes\"\n [removable]=\"true\"\n [selectable]=\"false\"\n >\n <mat-icon *ngIf=\"node.config.icon\" [naturalIcon]=\"node.config.icon\"></mat-icon>\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <mat-icon matChipRemove naturalIcon=\"cancel\"></mat-icon>\n </mat-chip-option>\n </mat-chip-listbox>\n</div>\n\n<div *ngIf=\"!loading && !dataSource.data.length\" class=\"margin-v\" i18n>Aucun r\u00E9sultat</div>\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"], dependencies: [{ kind: "
|
|
344
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: NaturalHierarchicSelectorComponent, isStandalone: true, selector: "natural-hierarchic-selector", inputs: { displayWith: "displayWith", config: "config", multiple: "multiple", selected: "selected", allowUnselect: "allowUnselect", filters: "filters", searchFacets: "searchFacets", searchSelections: "searchSelections" }, outputs: { searchSelectionChange: "searchSelectionChange", selectionChange: "selectionChange" }, providers: [NaturalHierarchicSelectorService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search\n (selectionChange)=\"search($event)\"\n [facets]=\"searchFacets\"\n [selections]=\"searchSelections\"\n ></natural-search>\n</div>\n\n<div class=\"body\">\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"36\"\n mode=\"indeterminate\"\n style=\"margin: 10px\"\n ></mat-progress-spinner>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n <button\n (click)=\"loadChildren(node)\"\n *ngIf=\"node.expandable\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n <mat-progress-spinner\n *ngIf=\"node.loading\"\n [diameter]=\"24\"\n [strokeWidth]=\"5\"\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <mat-icon\n *ngIf=\"!node.loading\"\n [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\"\n ></mat-icon>\n </button>\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n <mat-icon\n *ngIf=\"node.node.config.icon\"\n [naturalIcon]=\"node.node.config.icon\"\n style=\"margin-right: 10px\"\n ></mat-icon>\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n <mat-chip-option\n (removed)=\"unselectModelNode(node)\"\n *ngFor=\"let node of selectedNodes\"\n [removable]=\"true\"\n [selectable]=\"false\"\n >\n <mat-icon *ngIf=\"node.config.icon\" [naturalIcon]=\"node.config.icon\"></mat-icon>\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <mat-icon matChipRemove naturalIcon=\"cancel\"></mat-icon>\n </mat-chip-option>\n </mat-chip-listbox>\n</div>\n\n<div *ngIf=\"!loading && !dataSource.data.length\" class=\"margin-v\" i18n>Aucun r\u00E9sultat</div>\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"], dependencies: [{ kind: "component", type: NaturalSearchComponent, selector: "natural-search", inputs: ["placeholder", "facets", "multipleGroups", "dropdownTitle", "selections"], outputs: ["selectionChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i3.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i3.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i7.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
340
345
|
}
|
|
341
346
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalHierarchicSelectorComponent, decorators: [{
|
|
342
347
|
type: Component,
|
|
343
|
-
args: [{ selector: 'natural-hierarchic-selector', providers: [NaturalHierarchicSelectorService],
|
|
348
|
+
args: [{ selector: 'natural-hierarchic-selector', providers: [NaturalHierarchicSelectorService], standalone: true, imports: [
|
|
349
|
+
NaturalSearchComponent,
|
|
350
|
+
NgIf,
|
|
351
|
+
MatProgressSpinnerModule,
|
|
352
|
+
MatTreeModule,
|
|
353
|
+
NgClass,
|
|
354
|
+
MatButtonModule,
|
|
355
|
+
MatIconModule,
|
|
356
|
+
NaturalIconDirective,
|
|
357
|
+
MatCheckboxModule,
|
|
358
|
+
MatChipsModule,
|
|
359
|
+
NgFor,
|
|
360
|
+
], template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search\n (selectionChange)=\"search($event)\"\n [facets]=\"searchFacets\"\n [selections]=\"searchSelections\"\n ></natural-search>\n</div>\n\n<div class=\"body\">\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"36\"\n mode=\"indeterminate\"\n style=\"margin: 10px\"\n ></mat-progress-spinner>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n <button\n (click)=\"loadChildren(node)\"\n *ngIf=\"node.expandable\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n <mat-progress-spinner\n *ngIf=\"node.loading\"\n [diameter]=\"24\"\n [strokeWidth]=\"5\"\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <mat-icon\n *ngIf=\"!node.loading\"\n [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\"\n ></mat-icon>\n </button>\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n <mat-icon\n *ngIf=\"node.node.config.icon\"\n [naturalIcon]=\"node.node.config.icon\"\n style=\"margin-right: 10px\"\n ></mat-icon>\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n <mat-chip-option\n (removed)=\"unselectModelNode(node)\"\n *ngFor=\"let node of selectedNodes\"\n [removable]=\"true\"\n [selectable]=\"false\"\n >\n <mat-icon *ngIf=\"node.config.icon\" [naturalIcon]=\"node.config.icon\"></mat-icon>\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <mat-icon matChipRemove naturalIcon=\"cancel\"></mat-icon>\n </mat-chip-option>\n </mat-chip-listbox>\n</div>\n\n<div *ngIf=\"!loading && !dataSource.data.length\" class=\"margin-v\" i18n>Aucun r\u00E9sultat</div>\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"] }]
|
|
344
361
|
}], ctorParameters: function () { return [{ type: i1.NaturalHierarchicSelectorService }]; }, propDecorators: { displayWith: [{
|
|
345
362
|
type: Input
|
|
346
363
|
}], config: [{
|
|
347
|
-
type: Input
|
|
364
|
+
type: Input,
|
|
365
|
+
args: [{ required: true }]
|
|
348
366
|
}], multiple: [{
|
|
349
367
|
type: Input
|
|
350
368
|
}], selected: [{
|
|
@@ -362,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImpor
|
|
|
362
380
|
}], selectionChange: [{
|
|
363
381
|
type: Output
|
|
364
382
|
}] } });
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRy9FLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxrQ0FBbUMsU0FBUSx5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QUF0QixLQUFLO2dCQUtVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUtvQixxQkFBcUI7c0JBQTlDLE1BQU07Z0JBV21CLGVBQWU7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtGbGF0VHJlZUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbmFsaXplLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0Q29udHJvbGxlcn0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9hYnN0cmFjdC1jb250cm9sbGVyJztcbmltcG9ydCB7UXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7dG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXJ9IGZyb20gJy4uLy4uL3NlYXJjaC9jbGFzc2VzL2dyYXBocWwtZG9jdHJpbmUnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoRmFjZXRzfSBmcm9tICcuLi8uLi9zZWFyY2gvdHlwZXMvZmFjZXQnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoU2VsZWN0aW9uc30gZnJvbSAnLi4vLi4vc2VhcmNoL3R5cGVzL3ZhbHVlcyc7XG5pbXBvcnQge0hpZXJhcmNoaWNGbGF0Tm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9mbGF0LW5vZGUnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7SGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtZmlsdGVycy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7SGllcmFyY2hpY01vZGVsTm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RlbC1ub2RlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UsIE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9ufSBmcm9tICcuL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQge3JlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3V0aWxpdHknO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtaGllcmFyY2hpYy1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpZXJhcmNoaWMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2hpZXJhcmNoaWMtc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBtb2RlbCBhbmQgcmV0dXJucyBhIHN0cmluZyBmb3IgZGlzcGxheSB2YWx1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNwbGF5V2l0aD86IChpdGVtOiBhbnkpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbmZpZyBmb3IgaXRlbXMgYW5kIHJlbGF0aW9ucyBhcnJhbmdlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjb25maWchOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXTtcblxuICAgIC8qKlxuICAgICAqIElmIG11bHRpcGxlIG9yIHNpbmdsZSBpdGVtIHNlbGVjdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0ZWQgaXRlbXNcbiAgICAgKiBPcmdhbml6ZWQgYnkga2V5LCBjb250YWluaW5nIGVhY2ggYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgaXRlbXMgb2Ygc2FtZSB0eXBlXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hlcmV2ZXIgaWYgc2VsZWN0YWJsZSBlbGVtZW50cyBjYW4gYmUgdW5zZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1Vuc2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhhdCBhcHBseSB0byBlYWNoIHF1ZXJ5XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGZpbHRlcnM/OiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hGYWNldHM6IE5hdHVyYWxTZWFyY2hGYWNldHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbnMgdG8gYXBwbHkgb24gbmF0dXJhbC1zZWFyY2ggb24gY29tcG9uZW50IGluaXRpYWxpc2F0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIG5hdHVyYWwtc2VhcmNoIHNlbGVjdGlvbnMgY2hhbmdlXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWFyY2hTZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zPigpO1xuXG4gICAgLyoqXG4gICAgICogSW5uZXIgcmVwcmVzZW50YXRpb24gb2Ygc2VsZWN0ZWQgQElucHV0KCkgdG8gYWxsb3cgZmxhdCBsaXN0aW5nIGFzIG1hdC1jaGlwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGVzOiBIaWVyYXJjaGljTW9kZWxOb2RlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICAgKiBSZXR1cm5zIGEgTGl0ZXJhbCB3aGVyZSBzZWxlY3RlZCBtb2RlbHMgYXJlIG9yZ2FuaXplZCBieSBrZXlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T3JnYW5pemVkTW9kZWxTZWxlY3Rpb24+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sbGVyIGZvciBub2RlcyBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZmxhdE5vZGVzU2VsZWN0aW9uITogU2VsZWN0aW9uTW9kZWw8SGllcmFyY2hpY0ZsYXROb2RlPjtcblxuICAgIHB1YmxpYyB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+O1xuICAgIHB1YmxpYyB0cmVlRmxhdHRlbmVyITogTWF0VHJlZUZsYXR0ZW5lcjxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuICAgIHB1YmxpYyBkYXRhU291cmNlITogTWF0VHJlZUZsYXREYXRhU291cmNlPEhpZXJhcmNoaWNNb2RlbE5vZGUsIEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHRyYW5zZm9ybWVkIG5vZGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBmbGF0Tm9kZU1hcDogTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPiA9IG5ldyBNYXA8c3RyaW5nLCBIaWVyYXJjaGljRmxhdE5vZGU+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBoaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlOiBOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuZ3VsYXIgT25Jbml0IGltcGxlbWVudGF0aW9uXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBJbml0IHRyZWUgY2hlY2tib3ggc2VsZWN0b3JzXG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy5tdWx0aXBsZSk7XG5cbiAgICAgICAgLy8gVHJlZSBjb250cm9sbGVycyBhbmQgbWFuaXB1bGF0b3JzXG4gICAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1lcigpLFxuICAgICAgICAgICAgdGhpcy5nZXRMZXZlbCgpLFxuICAgICAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8SGllcmFyY2hpY0ZsYXROb2RlPih0aGlzLmdldExldmVsKCksIHRoaXMuaXNFeHBhbmRhYmxlKCkpO1xuXG4gICAgICAgIC8vIFRoZSBkYXRhU291cmNlIGNvbnRhaW5zIGEgbmVzdGVkIE1vZGVsTm9kZXMgbGlzdC4gRWFjaCBNb2RlbE5vZGUgaGFzIGEgY2hpbGQgYXR0cmlidXRlIHRoYXQgcmV0dXJucyBhbiBvYnNlcnZhYmxlLlxuICAgICAgICAvLyBUaGUgZGF0YVNvdXJjZSBjb250YWlucyBhIGZsYXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5lc3RlZCBNb2RlbE5vZGVzIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSB0cmVlRmxhdHRlbmVyIHJlbGF0ZWQgZnVuY3Rpb25zXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcblxuICAgICAgICAvLyBVcGRhdGUgZGF0YVNvdXJjZSB3aGVuIHJlY2VpdmluZyBuZXcgbGlzdCAtPiB3ZSBhc3NpZ24gdGhlIHdob2xlIHRyZWVcbiAgICAgICAgLy8gVGhlIHRyZWVDb250cm9sIGFuZCB0cmVlRmxhdHRlbmVyIHdpbGwgZ2VuZXJhdGUgdGhlIGRpc3BsYXllZCB0cmVlXG4gICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5kYXRhQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiAodGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhKSk7XG5cbiAgICAgICAgLy8gUHJldmVudCBlbXB0eSBzY3JlZW4gb24gZmlyc3QgbG9hZCBhbmQgaW5pdCBOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSB3aXRoIGlucHV0dGVkIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgbGV0IHZhcmlhYmxlcztcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VsZWN0aW9ucy5zb21lKHMgPT4gcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICB2YXJpYWJsZXMgPSB7ZmlsdGVyOiB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLnNlYXJjaEZhY2V0cywgdGhpcy5zZWFyY2hTZWxlY3Rpb25zKX07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkUm9vdHModmFyaWFibGVzKTtcblxuICAgICAgICAvLyBPcmdhbml6ZWRTZWxlY3Rpb24gaW50byBsaXN0IHVzYWJsZSBieSB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLnVwZGF0ZUlubmVyU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuZ3VsYXIgT25DaGFuZ2UgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZCAmJiAhY2hhbmdlcy5zZWxlY3RlZC5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbm5lclNlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpbHRlcnMgJiYgIWNoYW5nZXMuZmlsdGVycy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUm9vdHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBzZWxlY3Rpb24gb2YgYSBGbGF0Tm9kZSwgY29uc2lkZXJpbmcgaWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGFjdGl2YXRlZCBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlRmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgLy8gSXMgbXVsdGlwbGUgYWxsb3dlZCwganVzdCB0b2dnbGUgZWxlbWVudFxuICAgICAgICAgICAgaWYgKHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RTaW5nbGVGbGF0Tm9kZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgbXVsdGlwbGUsIGFuZCB3ZSB3YW50IHRvIHNlbGVjdCBhbiBlbGVtZW50LCB1bnNlbGVjdCBldmVyeXRoaW5nIGJlZm9yZSB0byBrZWVwIGEgc2luZ2xlIHNlbGVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2luZ2xlRmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiB1bnNlbGVjdGluZyBhbiBlbGVtZW50IGZyb20gdGhlIG1hdC1jaGlwcywgaXQgY2FuIGJlIGRlZXAgaW4gdGhlIGhpZXJhcmNoeSwgYW5kIHRoZSB0cmVlIGVsZW1lbnQgbWF5IG5vdCBleGlzdC4uLlxuICAgICAqIC4uLiBidXQgd2Ugc3RpbGwgbmVlZCB0byByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzIGxpc3QuXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0TW9kZWxOb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBjaGlwcyBsaXN0IG9ubHkgaWYgbm8gZmxhdE5vZGUsIGJlY2F1c2UgdW5zZWxlY3RGbGF0Tm9kZSgpIGFscmVhZHkgZGVhbHMgd2l0aCBpdC5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVUb2dnbGFibGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChmbGF0Tm9kZS5ub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLmRlc2VsZWN0YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0Tm9kZS5zZWxlY3RhYmxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREaXNwbGF5Rm4oY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24pOiAoaXRlbTogYW55KSA9PiBzdHJpbmcge1xuICAgICAgICBpZiAoY29uZmlnLmRpc3BsYXlXaXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT4gKGl0ZW0gPyBpdGVtLmZ1bGxOYW1lIHx8IGl0ZW0ubmFtZSA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5sb2FkQ2hpbGRyZW4oZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVkIHRvIGNvbGxhcHNlIGFsbCBjaGlsZHJlbiB3aGVuIGNsb3NpbmcgYSBwYXJlbnQsIGJ1dCBub3Qgc3VyZSBpdCdzIGdvb2QuXG4gICAgICovXG4gICAgLy8gcHVibGljIGxvYWRDaGlsZHJlbihmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoZmxhdE5vZGUpKSB7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGNvbnN0IGNhY2hlZEZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShmbGF0Tm9kZS5ub2RlKTtcbiAgICAvLyAgICAgICAgIGlmIChjYWNoZWRGbGF0Tm9kZSkge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5sb2FkQ2hpbGRyZW4oY2FjaGVkRmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBDbG9zZSBjaGlsZHJlblxuICAgIC8vICAgICAgICAgICAgIGNhY2hlZEZsYXROb2RlLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUoY2hpbGQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKGNoaWxkTm9kZSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHByaXZhdGUgZ2V0Q2hpbGRyZW4oKTogKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpID0+IE9ic2VydmFibGU8SGllcmFyY2hpY01vZGVsTm9kZVtdPiB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IE9ic2VydmFibGU8SGllcmFyY2hpY01vZGVsTm9kZVtdPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbkNoYW5nZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm1zIGEgSGllcmFyY2hpY01vZGVsTm9kZSBpbnRvIGEgRmxhdE5vZGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHRyYW5zZm9ybWVyKCk6IChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlRmxhdE5vZGUobm9kZSwgbGV2ZWwpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBkZWVwIG9mIHRoZSBub2RlIGluIHRoZSB0cmVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRMZXZlbCgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubGV2ZWw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgYWx3YXlzIGV4cGFuZGFibGUgYmVjYXVzZSB3ZSBsb2FkIG9uIGRlbWFuZCwgd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBhcmUgY2hpbGRyZW4geWV0XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0V4cGFuZGFibGUoKTogKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4gYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5leHBhbmRhYmxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKTogSGllcmFyY2hpY0ZsYXROb2RlIHtcbiAgICAgICAgLy8gUmV0dXJuIEZsYXROb2RlIGlmIGV4aXN0c1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIG5ldyBGbGF0Tm9kZVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGbGF0Tm9kZShub2RlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChzZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaFNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGlvbnMpO1xuICAgICAgICBpZiAoc2VsZWN0aW9ucy5zb21lKHMgPT4gcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7ZmlsdGVyOiB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLnNlYXJjaEZhY2V0cywgc2VsZWN0aW9ucyl9O1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLnNlYXJjaCh2YXJpYWJsZXMsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb290cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUm9vdHMoc2VhcmNoVmFyaWFibGVzPzogUXVlcnlWYXJpYWJsZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBIaWVyYXJjaGljRmxhdE5vZGU+KCk7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZVxuICAgICAgICAgICAgLmluaXQodGhpcy5jb25maWcsIHRoaXMuZmlsdGVycywgc2VhcmNoVmFyaWFibGVzIHx8IG51bGwpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTeW5jIGlubmVyIHNlbGVjdGlvbiAodHJlZSBhbmQgbWF0LWNoaXBzKSBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgaW5wdXQgYXR0cmlidXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVJbm5lclNlbGVjdGlvbihzZWxlY3RlZDogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgLy8gVHJhbnNmb3JtIGFuIE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uIGludG8gYSBNb2RlbE5vZGUgbGlzdCB0aGF0IGlzIHVzZWQgaW4gdGhlIHNlbGVjdGVkIHpvbmUgb2YgdGhlIGNvbXBvbmVudCAoc2VlIHRlbXBsYXRlKVxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UuZnJvbU9yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG5cbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuc2VsZWN0ZWROb2Rlcykge1xuICAgICAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuc2VsZWN0IGEgbm9kZSwga2VlcGluZyB0aGUgcmVzdCBvZiB0aGUgc2VsZWN0ZWQgdW50b3VjaGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSB1bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLnJlbW92ZU1vZGVsTm9kZShmbGF0Tm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBub2RlIGZyb20gY2hpcCBsaXN0c1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlTW9kZWxOb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZGV4ID0gdGhpcy5zZWxlY3RlZE5vZGVzLmZpbmRJbmRleChuID0+IHRoaXMuZ2V0TWFwS2V5KG4ubW9kZWwpID09PSBrZXkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMuc3BsaWNlKHNlbGVjdGlvbkluZGV4LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgYSBub2RlLCBrZWVwaW5nIHRoIHJlc3Qgb2YgdGhlIHNlbGVjdGVkIHVudG91Y2hlZFxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMucHVzaChmbGF0Tm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgYW5kIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0U2luZ2xlRmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBbZmxhdE5vZGUubm9kZV07XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIHNlbGVjdGVkIGFuZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuc2VsZWN0U2luZ2xlRmxhdE5vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSB0aGUgZ2l2ZW4gZWxlbWVudHMgaW50byB0aGUgb3JnYW5pemVkIHNlbGVjdGlvbiB0aGF0IGlzIGVtaXR0ZWQgdG8gb3V0cHV0XG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWQ6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmdhbml6ZWRGbGF0Tm9kZXNTZWxlY3Rpb24gPSB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UudG9Pcmdhbml6ZWRTZWxlY3Rpb24oc2VsZWN0ZWQpO1xuICAgICAgICByZXBsYWNlT2JqZWN0S2VlcGluZ1JlZmVyZW5jZSh0aGlzLnNlbGVjdGVkLCBvcmdhbml6ZWRGbGF0Tm9kZXNTZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vZGVTZWxlY3RlZChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTm9kZXMuc29tZShuID0+IHRoaXMuZ2V0TWFwS2V5KG4ubW9kZWwpID09PSBrZXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdE5vZGVNYXAuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpOiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0RGlzcGxheUZuKG5vZGUuY29uZmlnKShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3QgZXhwYW5kYWJsZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpc0N1c3RvbVNlbGVjdGFibGUgPSBub2RlLmNvbmZpZy5pc1NlbGVjdGFibGVDYWxsYmFja1xuICAgICAgICAgICAgPyBub2RlLmNvbmZpZy5pc1NlbGVjdGFibGVDYWxsYmFjayhub2RlLm1vZGVsKVxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGFibGUgPSAhIW5vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleSAmJiBpc0N1c3RvbVNlbGVjdGFibGU7XG5cbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSBuZXcgSGllcmFyY2hpY0ZsYXROb2RlKG5vZGUsIG5hbWUsIGxldmVsLCBleHBhbmRhYmxlLCBpc1NlbGVjdGFibGUpO1xuXG4gICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5jb3VudEl0ZW1zKGZsYXROb2RlLCB0aGlzLmZpbHRlcnMpO1xuXG4gICAgICAgIC8vIE1hcmsgbm9kZSBhcyBzZWxlY3RlZCBpZiBuZWVkZWQgKGNoZWNrcyB0aGUgc2VsZWN0ZWQgcHJvY2Vzc2VkIGlucHV0KVxuICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93VW5zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5kZXNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWNoZSBGbGF0Tm9kZVxuICAgICAgICB0aGlzLmZsYXROb2RlTWFwLnNldChrZXksIGZsYXROb2RlKTtcblxuICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBpZGVudGlmaWVyIGtleSBmb3IgbWFwIGNhY2hlXG4gICAgICogQXMgbWFueSBvYmplY3QgdHlwZXMgY2FuIGJlIHVzZWQsIHRoaXMgZnVuY3Rpb24gY29uc2lkZXJzIHR5cGVuYW1lIGFuZCBJRCB0byByZXR1cm4gc29tZXRoaW5nIGxpa2UgZG9jdW1lbnQtMTIzXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNYXBLZXkobW9kZWw6IExpdGVyYWwpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbW9kZWwuX190eXBlbmFtZSArICctJyArIG1vZGVsLmlkO1xuICAgIH1cbn1cbiIsIjxkaXYgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiMjBcIj5cbiAgICA8bmF0dXJhbC1zZWFyY2hcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIFtmYWNldHNdPVwic2VhcmNoRmFjZXRzXCJcbiAgICAgICAgW3NlbGVjdGlvbnNdPVwic2VhcmNoU2VsZWN0aW9uc1wiXG4gICAgPjwvbmF0dXJhbC1zZWFyY2g+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgW2RpYW1ldGVyXT1cIjM2XCJcbiAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbjogMTBweFwiXG4gICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICA8bWF0LXRyZWUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiPlxuICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiIFtuZ0NsYXNzXT1cIntsZWFmOiAhbm9kZS5leHBhbmRhYmxlfVwiIG1hdFRyZWVOb2RlUGFkZGluZz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZENoaWxkcmVuKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuZXhwYW5kYWJsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIndG9nZ2xlICcgKyBub2RlLm5hbWVcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0cm9rZVdpZHRoXT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW25hdHVyYWxJY29uXT1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnXCJcbiAgICAgICAgICAgICAgICA+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGbGF0Tm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNOb2RlVG9nZ2xhYmxlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5ub2RlLmNvbmZpZy5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW25hdHVyYWxJY29uXT1cIm5vZGUubm9kZS5jb25maWcuaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCJcbiAgICAgICAgICAgICAgICA+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBub2RlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwvbWF0LXRyZWU+XG5cbiAgICA8bWF0LWNoaXAtbGlzdGJveCBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIiBjbGFzcz1cIm1hdC1tZGMtY2hpcC1zZXQtc3RhY2tlZFwiPlxuICAgICAgICA8bWF0LWNoaXAtb3B0aW9uXG4gICAgICAgICAgICAocmVtb3ZlZCk9XCJ1bnNlbGVjdE1vZGVsTm9kZShub2RlKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBzZWxlY3RlZE5vZGVzXCJcbiAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm5vZGUuY29uZmlnLmljb25cIiBbbmF0dXJhbEljb25dPVwibm9kZS5jb25maWcuaWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHkgY2hpcC1sYWJlbFwiPnt7IG5vZGUubW9kZWwubmFtZSB8fCBub2RlLm1vZGVsLmZ1bGxOYW1lIH19PC9kaXY+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZSBuYXR1cmFsSWNvbj1cImNhbmNlbFwiPjwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWNoaXAtb3B0aW9uPlxuICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTb3VyY2UuZGF0YS5sZW5ndGhcIiBjbGFzcz1cIm1hcmdpbi12XCIgaTE4bj5BdWN1biByw6lzdWx0YXQ8L2Rpdj5cbiJdfQ==
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFOUYsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUcvRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUc5RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RCxPQUFPLEVBQUMsZ0NBQWdDLEVBQTBCLE1BQU0sK0JBQStCLENBQUM7QUFDeEcsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFN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Q0FBQztJQUNwQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssU0FBUyxDQUFDLEtBQWM7UUFDNUIsT0FBTyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7OEdBcllRLGtDQUFrQztrR0FBbEMsa0NBQWtDLHlZQWhCaEMsQ0FBQyxnQ0FBZ0MsQ0FBQyxzRUMvQmpELGluRkFxRUEsdWREbkNRLHNCQUFzQiw2S0FDdEIsSUFBSSw0RkFDSix3QkFBd0Isa09BQ3hCLGFBQWEsNm9CQUNiLE9BQU8sbUZBQ1AsZUFBZSwyTEFDZixhQUFhLG9MQUNiLG9CQUFvQixrR0FDcEIsaUJBQWlCLGdMQUNqQixjQUFjLHlsQkFDZCxLQUFLOzsyRkFHQSxrQ0FBa0M7a0JBcEI5QyxTQUFTOytCQUNJLDZCQUE2QixhQUc1QixDQUFDLGdDQUFnQyxDQUFDLGNBQ2pDLElBQUksV0FDUDt3QkFDTCxzQkFBc0I7d0JBQ3RCLElBQUk7d0JBQ0osd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLEtBQUs7cUJBQ1I7dUhBTWUsV0FBVztzQkFBMUIsS0FBSztnQkFLMEIsTUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBS1AsUUFBUTtzQkFBdkIsS0FBSztnQkFNVSxRQUFRO3NCQUF2QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUtVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFLb0IscUJBQXFCO3NCQUE5QyxNQUFNO2dCQVdtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RmxhdFRyZWVDb250cm9sfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciwgTWF0VHJlZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZSwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5pbXBvcnQge1F1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi8uLi8uLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi8uLi9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaEZhY2V0c30gZnJvbSAnLi4vLi4vc2VhcmNoL3R5cGVzL2ZhY2V0JztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtIaWVyYXJjaGljRmxhdE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvZmxhdC1ub2RlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvbW9kZWwtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLCBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbn0gZnJvbSAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtyZXBsYWNlT2JqZWN0S2VlcGluZ1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy91dGlsaXR5JztcbmltcG9ydCB7TWF0Q2hpcHNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7TWF0Q2hlY2tib3hNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7TmF0dXJhbEljb25EaXJlY3RpdmV9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHtOZ0lmLCBOZ0NsYXNzLCBOZ0Zvcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaENvbXBvbmVudH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC9zZWFyY2guY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWhpZXJhcmNoaWMtc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOYXR1cmFsU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBOZ0lmLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTmF0dXJhbEljb25EaXJlY3RpdmUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTmdGb3IsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIG1vZGVsIGFuZCByZXR1cm5zIGEgc3RyaW5nIGZvciBkaXNwbGF5IHZhbHVlXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc3BsYXlXaXRoPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlnIGZvciBpdGVtcyBhbmQgcmVsYXRpb25zIGFycmFuZ2VtZW50XG4gICAgICovXG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBjb25maWchOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXTtcblxuICAgIC8qKlxuICAgICAqIElmIG11bHRpcGxlIG9yIHNpbmdsZSBpdGVtIHNlbGVjdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0ZWQgaXRlbXNcbiAgICAgKiBPcmdhbml6ZWQgYnkga2V5LCBjb250YWluaW5nIGVhY2ggYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgaXRlbXMgb2Ygc2FtZSB0eXBlXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hlcmV2ZXIgaWYgc2VsZWN0YWJsZSBlbGVtZW50cyBjYW4gYmUgdW5zZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1Vuc2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhhdCBhcHBseSB0byBlYWNoIHF1ZXJ5XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGZpbHRlcnM/OiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hGYWNldHM6IE5hdHVyYWxTZWFyY2hGYWNldHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbnMgdG8gYXBwbHkgb24gbmF0dXJhbC1zZWFyY2ggb24gY29tcG9uZW50IGluaXRpYWxpc2F0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIG5hdHVyYWwtc2VhcmNoIHNlbGVjdGlvbnMgY2hhbmdlXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWFyY2hTZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zPigpO1xuXG4gICAgLyoqXG4gICAgICogSW5uZXIgcmVwcmVzZW50YXRpb24gb2Ygc2VsZWN0ZWQgQElucHV0KCkgdG8gYWxsb3cgZmxhdCBsaXN0aW5nIGFzIG1hdC1jaGlwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGVzOiBIaWVyYXJjaGljTW9kZWxOb2RlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICAgKiBSZXR1cm5zIGEgTGl0ZXJhbCB3aGVyZSBzZWxlY3RlZCBtb2RlbHMgYXJlIG9yZ2FuaXplZCBieSBrZXlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T3JnYW5pemVkTW9kZWxTZWxlY3Rpb24+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sbGVyIGZvciBub2RlcyBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZmxhdE5vZGVzU2VsZWN0aW9uITogU2VsZWN0aW9uTW9kZWw8SGllcmFyY2hpY0ZsYXROb2RlPjtcblxuICAgIHB1YmxpYyB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+O1xuICAgIHB1YmxpYyB0cmVlRmxhdHRlbmVyITogTWF0VHJlZUZsYXR0ZW5lcjxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuICAgIHB1YmxpYyBkYXRhU291cmNlITogTWF0VHJlZUZsYXREYXRhU291cmNlPEhpZXJhcmNoaWNNb2RlbE5vZGUsIEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHRyYW5zZm9ybWVkIG5vZGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBmbGF0Tm9kZU1hcDogTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPiA9IG5ldyBNYXA8c3RyaW5nLCBIaWVyYXJjaGljRmxhdE5vZGU+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBoaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlOiBOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuZ3VsYXIgT25Jbml0IGltcGxlbWVudGF0aW9uXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBJbml0IHRyZWUgY2hlY2tib3ggc2VsZWN0b3JzXG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy5tdWx0aXBsZSk7XG5cbiAgICAgICAgLy8gVHJlZSBjb250cm9sbGVycyBhbmQgbWFuaXB1bGF0b3JzXG4gICAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1lcigpLFxuICAgICAgICAgICAgdGhpcy5nZXRMZXZlbCgpLFxuICAgICAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8SGllcmFyY2hpY0ZsYXROb2RlPih0aGlzLmdldExldmVsKCksIHRoaXMuaXNFeHBhbmRhYmxlKCkpO1xuXG4gICAgICAgIC8vIFRoZSBkYXRhU291cmNlIGNvbnRhaW5zIGEgbmVzdGVkIE1vZGVsTm9kZXMgbGlzdC4gRWFjaCBNb2RlbE5vZGUgaGFzIGEgY2hpbGQgYXR0cmlidXRlIHRoYXQgcmV0dXJucyBhbiBvYnNlcnZhYmxlLlxuICAgICAgICAvLyBUaGUgZGF0YVNvdXJjZSBjb250YWlucyBhIGZsYXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5lc3RlZCBNb2RlbE5vZGVzIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSB0cmVlRmxhdHRlbmVyIHJlbGF0ZWQgZnVuY3Rpb25zXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcblxuICAgICAgICAvLyBVcGRhdGUgZGF0YVNvdXJjZSB3aGVuIHJlY2VpdmluZyBuZXcgbGlzdCAtPiB3ZSBhc3NpZ24gdGhlIHdob2xlIHRyZWVcbiAgICAgICAgLy8gVGhlIHRyZWVDb250cm9sIGFuZCB0cmVlRmxhdHRlbmVyIHdpbGwgZ2VuZXJhdGUgdGhlIGRpc3BsYXllZCB0cmVlXG4gICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5kYXRhQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiAodGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhKSk7XG5cbiAgICAgICAgLy8gUHJldmVudCBlbXB0eSBzY3JlZW4gb24gZmlyc3QgbG9hZCBhbmQgaW5pdCBOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSB3aXRoIGlucHV0dGVkIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgbGV0IHZhcmlhYmxlcztcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VsZWN0aW9ucy5zb21lKHMgPT4gcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICB2YXJpYWJsZXMgPSB7ZmlsdGVyOiB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLnNlYXJjaEZhY2V0cywgdGhpcy5zZWFyY2hTZWxlY3Rpb25zKX07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkUm9vdHModmFyaWFibGVzKTtcblxuICAgICAgICAvLyBPcmdhbml6ZWRTZWxlY3Rpb24gaW50byBsaXN0IHVzYWJsZSBieSB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLnVwZGF0ZUlubmVyU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuZ3VsYXIgT25DaGFuZ2UgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZCAmJiAhY2hhbmdlcy5zZWxlY3RlZC5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbm5lclNlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpbHRlcnMgJiYgIWNoYW5nZXMuZmlsdGVycy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUm9vdHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBzZWxlY3Rpb24gb2YgYSBGbGF0Tm9kZSwgY29uc2lkZXJpbmcgaWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGFjdGl2YXRlZCBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlRmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgLy8gSXMgbXVsdGlwbGUgYWxsb3dlZCwganVzdCB0b2dnbGUgZWxlbWVudFxuICAgICAgICAgICAgaWYgKHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RTaW5nbGVGbGF0Tm9kZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgbXVsdGlwbGUsIGFuZCB3ZSB3YW50IHRvIHNlbGVjdCBhbiBlbGVtZW50LCB1bnNlbGVjdCBldmVyeXRoaW5nIGJlZm9yZSB0byBrZWVwIGEgc2luZ2xlIHNlbGVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2luZ2xlRmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiB1bnNlbGVjdGluZyBhbiBlbGVtZW50IGZyb20gdGhlIG1hdC1jaGlwcywgaXQgY2FuIGJlIGRlZXAgaW4gdGhlIGhpZXJhcmNoeSwgYW5kIHRoZSB0cmVlIGVsZW1lbnQgbWF5IG5vdCBleGlzdC4uLlxuICAgICAqIC4uLiBidXQgd2Ugc3RpbGwgbmVlZCB0byByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzIGxpc3QuXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0TW9kZWxOb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBjaGlwcyBsaXN0IG9ubHkgaWYgbm8gZmxhdE5vZGUsIGJlY2F1c2UgdW5zZWxlY3RGbGF0Tm9kZSgpIGFscmVhZHkgZGVhbHMgd2l0aCBpdC5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVUb2dnbGFibGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChmbGF0Tm9kZS5ub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLmRlc2VsZWN0YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0Tm9kZS5zZWxlY3RhYmxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREaXNwbGF5Rm4oY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24pOiAoaXRlbTogYW55KSA9PiBzdHJpbmcge1xuICAgICAgICBpZiAoY29uZmlnLmRpc3BsYXlXaXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT4gKGl0ZW0gPyBpdGVtLmZ1bGxOYW1lIHx8IGl0ZW0ubmFtZSA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5sb2FkQ2hpbGRyZW4oZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVkIHRvIGNvbGxhcHNlIGFsbCBjaGlsZHJlbiB3aGVuIGNsb3NpbmcgYSBwYXJlbnQsIGJ1dCBub3Qgc3VyZSBpdCdzIGdvb2QuXG4gICAgICovXG4gICAgLy8gcHVibGljIGxvYWRDaGlsZHJlbihmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoZmxhdE5vZGUpKSB7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGNvbnN0IGNhY2hlZEZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShmbGF0Tm9kZS5ub2RlKTtcbiAgICAvLyAgICAgICAgIGlmIChjYWNoZWRGbGF0Tm9kZSkge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5sb2FkQ2hpbGRyZW4oY2FjaGVkRmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBDbG9zZSBjaGlsZHJlblxuICAgIC8vICAgICAgICAgICAgIGNhY2hlZEZsYXROb2RlLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUoY2hpbGQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKGNoaWxkTm9kZSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHByaXZhdGUgZ2V0Q2hpbGRyZW4oKTogKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpID0+IE9ic2VydmFibGU8SGllcmFyY2hpY01vZGVsTm9kZVtdPiB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IE9ic2VydmFibGU8SGllcmFyY2hpY01vZGVsTm9kZVtdPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbkNoYW5nZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm1zIGEgSGllcmFyY2hpY01vZGVsTm9kZSBpbnRvIGEgRmxhdE5vZGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHRyYW5zZm9ybWVyKCk6IChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlRmxhdE5vZGUobm9kZSwgbGV2ZWwpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBkZWVwIG9mIHRoZSBub2RlIGluIHRoZSB0cmVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRMZXZlbCgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubGV2ZWw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgYWx3YXlzIGV4cGFuZGFibGUgYmVjYXVzZSB3ZSBsb2FkIG9uIGRlbWFuZCwgd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBhcmUgY2hpbGRyZW4geWV0XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0V4cGFuZGFibGUoKTogKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4gYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5leHBhbmRhYmxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKTogSGllcmFyY2hpY0ZsYXROb2RlIHtcbiAgICAgICAgLy8gUmV0dXJuIEZsYXROb2RlIGlmIGV4aXN0c1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIG5ldyBGbGF0Tm9kZVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGbGF0Tm9kZShub2RlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChzZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaFNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGlvbnMpO1xuICAgICAgICBpZiAoc2VsZWN0aW9ucy5zb21lKHMgPT4gcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7ZmlsdGVyOiB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLnNlYXJjaEZhY2V0cywgc2VsZWN0aW9ucyl9O1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLnNlYXJjaCh2YXJpYWJsZXMsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb290cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUm9vdHMoc2VhcmNoVmFyaWFibGVzPzogUXVlcnlWYXJpYWJsZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBIaWVyYXJjaGljRmxhdE5vZGU+KCk7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZVxuICAgICAgICAgICAgLmluaXQodGhpcy5jb25maWcsIHRoaXMuZmlsdGVycywgc2VhcmNoVmFyaWFibGVzIHx8IG51bGwpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTeW5jIGlubmVyIHNlbGVjdGlvbiAodHJlZSBhbmQgbWF0LWNoaXBzKSBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgaW5wdXQgYXR0cmlidXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVJbm5lclNlbGVjdGlvbihzZWxlY3RlZDogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgLy8gVHJhbnNmb3JtIGFuIE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uIGludG8gYSBNb2RlbE5vZGUgbGlzdCB0aGF0IGlzIHVzZWQgaW4gdGhlIHNlbGVjdGVkIHpvbmUgb2YgdGhlIGNvbXBvbmVudCAoc2VlIHRlbXBsYXRlKVxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UuZnJvbU9yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG5cbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuc2VsZWN0ZWROb2Rlcykge1xuICAgICAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuc2VsZWN0IGEgbm9kZSwga2VlcGluZyB0aGUgcmVzdCBvZiB0aGUgc2VsZWN0ZWQgdW50b3VjaGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSB1bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLnJlbW92ZU1vZGVsTm9kZShmbGF0Tm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBub2RlIGZyb20gY2hpcCBsaXN0c1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlTW9kZWxOb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZGV4ID0gdGhpcy5zZWxlY3RlZE5vZGVzLmZpbmRJbmRleChuID0+IHRoaXMuZ2V0TWFwS2V5KG4ubW9kZWwpID09PSBrZXkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMuc3BsaWNlKHNlbGVjdGlvbkluZGV4LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgYSBub2RlLCBrZWVwaW5nIHRoIHJlc3Qgb2YgdGhlIHNlbGVjdGVkIHVudG91Y2hlZFxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMucHVzaChmbGF0Tm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgYW5kIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0U2luZ2xlRmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBbZmxhdE5vZGUubm9kZV07XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIHNlbGVjdGVkIGFuZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuc2VsZWN0U2luZ2xlRmxhdE5vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSB0aGUgZ2l2ZW4gZWxlbWVudHMgaW50byB0aGUgb3JnYW5pemVkIHNlbGVjdGlvbiB0aGF0IGlzIGVtaXR0ZWQgdG8gb3V0cHV0XG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWQ6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmdhbml6ZWRGbGF0Tm9kZXNTZWxlY3Rpb24gPSB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UudG9Pcmdhbml6ZWRTZWxlY3Rpb24oc2VsZWN0ZWQpO1xuICAgICAgICByZXBsYWNlT2JqZWN0S2VlcGluZ1JlZmVyZW5jZSh0aGlzLnNlbGVjdGVkLCBvcmdhbml6ZWRGbGF0Tm9kZXNTZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vZGVTZWxlY3RlZChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTm9kZXMuc29tZShuID0+IHRoaXMuZ2V0TWFwS2V5KG4ubW9kZWwpID09PSBrZXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdE5vZGVNYXAuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpOiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0RGlzcGxheUZuKG5vZGUuY29uZmlnKShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3QgZXhwYW5kYWJsZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpc0N1c3RvbVNlbGVjdGFibGUgPSBub2RlLmNvbmZpZy5pc1NlbGVjdGFibGVDYWxsYmFja1xuICAgICAgICAgICAgPyBub2RlLmNvbmZpZy5pc1NlbGVjdGFibGVDYWxsYmFjayhub2RlLm1vZGVsKVxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGFibGUgPSAhIW5vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleSAmJiBpc0N1c3RvbVNlbGVjdGFibGU7XG5cbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSBuZXcgSGllcmFyY2hpY0ZsYXROb2RlKG5vZGUsIG5hbWUsIGxldmVsLCBleHBhbmRhYmxlLCBpc1NlbGVjdGFibGUpO1xuXG4gICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5jb3VudEl0ZW1zKGZsYXROb2RlLCB0aGlzLmZpbHRlcnMpO1xuXG4gICAgICAgIC8vIE1hcmsgbm9kZSBhcyBzZWxlY3RlZCBpZiBuZWVkZWQgKGNoZWNrcyB0aGUgc2VsZWN0ZWQgcHJvY2Vzc2VkIGlucHV0KVxuICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93VW5zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5kZXNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWNoZSBGbGF0Tm9kZVxuICAgICAgICB0aGlzLmZsYXROb2RlTWFwLnNldChrZXksIGZsYXROb2RlKTtcblxuICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBpZGVudGlmaWVyIGtleSBmb3IgbWFwIGNhY2hlXG4gICAgICogQXMgbWFueSBvYmplY3QgdHlwZXMgY2FuIGJlIHVzZWQsIHRoaXMgZnVuY3Rpb24gY29uc2lkZXJzIHR5cGVuYW1lIGFuZCBJRCB0byByZXR1cm4gc29tZXRoaW5nIGxpa2UgZG9jdW1lbnQtMTIzXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNYXBLZXkobW9kZWw6IExpdGVyYWwpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbW9kZWwuX190eXBlbmFtZSArICctJyArIG1vZGVsLmlkO1xuICAgIH1cbn1cbiIsIjxkaXYgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiMjBcIj5cbiAgICA8bmF0dXJhbC1zZWFyY2hcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIFtmYWNldHNdPVwic2VhcmNoRmFjZXRzXCJcbiAgICAgICAgW3NlbGVjdGlvbnNdPVwic2VhcmNoU2VsZWN0aW9uc1wiXG4gICAgPjwvbmF0dXJhbC1zZWFyY2g+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgW2RpYW1ldGVyXT1cIjM2XCJcbiAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbjogMTBweFwiXG4gICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICA8bWF0LXRyZWUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiPlxuICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiIFtuZ0NsYXNzXT1cIntsZWFmOiAhbm9kZS5leHBhbmRhYmxlfVwiIG1hdFRyZWVOb2RlUGFkZGluZz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZENoaWxkcmVuKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuZXhwYW5kYWJsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIndG9nZ2xlICcgKyBub2RlLm5hbWVcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0cm9rZVdpZHRoXT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW25hdHVyYWxJY29uXT1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnXCJcbiAgICAgICAgICAgICAgICA+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGbGF0Tm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNOb2RlVG9nZ2xhYmxlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5ub2RlLmNvbmZpZy5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW25hdHVyYWxJY29uXT1cIm5vZGUubm9kZS5jb25maWcuaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCJcbiAgICAgICAgICAgICAgICA+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBub2RlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwvbWF0LXRyZWU+XG5cbiAgICA8bWF0LWNoaXAtbGlzdGJveCBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIiBjbGFzcz1cIm1hdC1tZGMtY2hpcC1zZXQtc3RhY2tlZFwiPlxuICAgICAgICA8bWF0LWNoaXAtb3B0aW9uXG4gICAgICAgICAgICAocmVtb3ZlZCk9XCJ1bnNlbGVjdE1vZGVsTm9kZShub2RlKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBzZWxlY3RlZE5vZGVzXCJcbiAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm5vZGUuY29uZmlnLmljb25cIiBbbmF0dXJhbEljb25dPVwibm9kZS5jb25maWcuaWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHkgY2hpcC1sYWJlbFwiPnt7IG5vZGUubW9kZWwubmFtZSB8fCBub2RlLm1vZGVsLmZ1bGxOYW1lIH19PC9kaXY+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZSBuYXR1cmFsSWNvbj1cImNhbmNlbFwiPjwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWNoaXAtb3B0aW9uPlxuICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTb3VyY2UuZGF0YS5sZW5ndGhcIiBjbGFzcz1cIm1hcmdpbi12XCIgaTE4bj5BdWN1biByw6lzdWx0YXQ8L2Rpdj5cbiJdfQ==
|
package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs
CHANGED
|
@@ -244,9 +244,10 @@ export class NaturalHierarchicSelectorService {
|
|
|
244
244
|
return node || new HierarchicModelNode(item, configuration);
|
|
245
245
|
}
|
|
246
246
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalHierarchicSelectorService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
247
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalHierarchicSelectorService }); }
|
|
247
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalHierarchicSelectorService, providedIn: 'root' }); }
|
|
248
248
|
}
|
|
249
249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NaturalHierarchicSelectorService, decorators: [{
|
|
250
|
-
type: Injectable
|
|
250
|
+
type: Injectable,
|
|
251
|
+
args: [{ providedIn: 'root' }]
|
|
251
252
|
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWxFLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLHlDQUF5QyxDQUFDO0FBVXJHLE9BQU8sRUFBa0IsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFjM0UsTUFBTSxPQUFPLGdDQUFnQztJQWV6QyxZQUFvQyxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZHREOzs7O1dBSUc7UUFDYSxlQUFVLEdBQTJDLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQUVwSDs7OztXQUlHO1FBQ0ssa0JBQWEsR0FBcUMsRUFBRSxDQUFDO0lBRUosQ0FBQztJQUUxRDs7O09BR0c7SUFDSSxJQUFJLENBQ1AsTUFBd0MsRUFDeEMsZ0JBQXVELElBQUksRUFDM0Qsa0JBQXlDLElBQUk7UUFFN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLE9BQU8s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QWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUErQixDQUNuQyxHQUFzRDtRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2pGLENBQUM7SUFFTyxvQkFBb0IsQ0FDeEIsSUFBcUIsRUFDckIsYUFBNkM7UUFFN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0csT0FBTyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQzs4R0E1VFEsZ0NBQWdDO2tIQUFoQyxnQ0FBZ0M7OzJGQUFoQyxnQ0FBZ0M7a0JBRDVDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aW50ZXJzZWN0aW9ufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZpcnN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7ZmluYWxpemUsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge1xuICAgIE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uLFxufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuICAgIEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uLFxuICAgIEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbCwgSGllcmFyY2hpY01vZGVsTm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RlbC1ub2RlJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtGaWx0ZXJHcm91cENvbmRpdGlvbn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24ge1xuICAgIFtrZXk6IHN0cmluZ106IGFueVtdO1xufVxuXG5pbnRlcmZhY2UgQ29udGV4dHVhbGl6ZWRDb25maWcge1xuICAgIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb247XG4gICAgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBTdG9yZXMgdGhlIGdsb2JhbCByZXN1bHQgb2YgdGhlIHRyZWVcbiAgICAgKiBUaGlzIG9ic2VydmFibGUgY29udGFpbnMgTm9kZS5cbiAgICAgKiBXaGVuIGl0J3MgdXBkYXRlZCwgdGhlIFRyZWVDb250cm9sbGVyIGFuZCBUcmVlRmxhdHRlbmVyIHByb2Nlc3MgdGhlIG5ldyBhcnJheSB0byBnZW5lcmF0ZSB0aGUgZmxhdCB0cmVlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhQ2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8SGllcmFyY2hpY01vZGVsTm9kZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGllcmFyY2hpY01vZGVsTm9kZVtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciByZWxhdGlvbnMgYW5kIHNlbGVjdGlvbiBjb25zdHJhaW50c1xuICAgICAqXG4gICAgICogVGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBpbiB0aGUgb3JkZXIgb2YgdGhlIGhpZXJhcmNoaWMgKGxpc3QgZmlyc3QgcGFyZW50IHJ1bGVzLCB0aGVuIGNoaWxkIHJ1bGVzKVxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICAgIC8qKlxuICAgICAqIEluaXQgY29tcG9uZW50IGJ5IHNhdmluZyB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4gcmV0cmlldmluZyByb290IGVsZW1lbnRzLlxuICAgICAqIFVwZGF0ZXMgKiphbm90aGVyKiogb2JzZXJ2YWJsZSAodGhpcy5kYXRhQ2hhbmdlKSB3aGVuIGRhdGEgaXMgcmV0cmlldmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0KFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdLFxuICAgICAgICBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB0aGlzLmluamVjdFNlcnZpY2VzSW5Db25maWd1cmF0aW9uKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExpc3QobnVsbCwgY29udGV4dEZpbHRlciwgc2VhcmNoVmFyaWFibGVzKS5waXBlKG1hcChkYXRhID0+IHRoaXMuZGF0YUNoYW5nZS5uZXh0KGRhdGEpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGxpc3Qgb2YgY2hpbGRyZW4sIGNvbnNpZGVyaW5nIGdpdmVuIEZsYXROb2RlIGlkIGFzIGEgcGFyZW50LlxuICAgICAqIE1hcmsgbG9hZGluZyBzdGF0dXMgaW5kaXZpZHVhbGx5IG9uIG5vZGVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkQ2hpbGRyZW4oXG4gICAgICAgIGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUsXG4gICAgICAgIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgICAvLyBEb250IHJlZmV0Y2ggY2hpbGRyZW4uIEltcHJvdmUgcGVyZm9ybWFuY2VzXG4gICAgICAgIC8vIFByZXZlbnRzIGludGVyZmVyZW5jZXMgYmV0d2VlbiBIaWVyYXJjaGljTW9kZWxOb2RlIHN0cnVjdHVyZSBhbmQgYW5ndWxhciBjb21wb25lbnRzIG5hdmlnYXRpb24uXG4gICAgICAgIC8vIFByZXZlbnRzIGEgYnVnIHdoZXJlIGdyYW5kIGNoaWxkcmVuIHdlcmUgbG9zdCBpZiBjbG9zaW5nIHJvb3RcbiAgICAgICAgaWYgKGZsYXROb2RlLm5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0Tm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXRMaXN0KGZsYXROb2RlLCBjb250ZXh0RmlsdGVyKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKGZsYXROb2RlLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgICAgICAgICAgZmxhdE5vZGUubm9kZS5jaGlsZHJlbkNoYW5nZS5uZXh0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGFDaGFuZ2UudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzLCBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldExpc3QobnVsbCwgY29udGV4dEZpbHRlciwgc2VhcmNoVmFyaWFibGVzKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQoaXRlbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBlbGVtZW50cyBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgKiBHZXQgcm9vdCBlbGVtZW50cyBpZiBub2RlIGlzIG51bGwsIG9yIGNoaWxkIGVsZW1lbnRzIGlmIG5vZGUgaXMgZ2l2ZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExpc3QoXG4gICAgICAgIG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwgPSBudWxsLFxuICAgICAgICBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsID0gbnVsbCxcbiAgICApOiBPYnNlcnZhYmxlPEhpZXJhcmNoaWNNb2RlbE5vZGVbXT4ge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKG5vZGUsIGNvbnRleHRGaWx0ZXJzLCBzZWFyY2hWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGNvbmZpZ3VyYXRpb25zLm1hcChjID0+IGMuY29uZmlndXJhdGlvbi5pbmplY3RlZFNlcnZpY2UuZ2V0QWxsKGMudmFyaWFibGVzTWFuYWdlcikpO1xuXG4gICAgICAgIC8vIEZpcmUgcXVlcmllcywgYW5kIG1lcmdlIHJlc3VsdHMsIHRyYW5zZm9ybWluZyBhcG9sbG8gaXRlbXMgaW50byBOb2RlIE9iamVjdC5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Rpbmc6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggcmVzdWx0IG9mIGFuIG9ic2VydmFibGVcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggaXRlbSBvZiB0aGUgcmVzdWx0LCBjb252ZXJ0IGludG8gTm9kZSBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlc3VsdHNbaV0uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RpbmcucHVzaCh0aGlzLmdldE9yQ3JlYXRlTW9kZWxOb2RlKGl0ZW0sIGNvbmZpZ3VyYXRpb25zW2ldLmNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0aW5nO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvdW50SXRlbXMobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlLCBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLmdldENvbnRleHR1YWxpemVkQ29uZmlncyhub2RlLCBjb250ZXh0RmlsdGVycywgbnVsbCk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gY29uZmlndXJhdGlvbnMubWFwKGMgPT5cbiAgICAgICAgICAgIGMuY29uZmlndXJhdGlvbi5pbmplY3RlZFNlcnZpY2UuY291bnQoYy52YXJpYWJsZXNNYW5hZ2VyKS5waXBlKGZpcnN0KCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gcmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBsZW5ndGgpID0+IHRvdGFsICsgbGVuZ3RoLCAwKTtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kYWJsZSA9IHRvdGFsSXRlbXMgPiAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRleHR1YWxpemVkQ29uZmlncyhcbiAgICAgICAgbm9kZTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IENvbnRleHR1YWxpemVkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBjb25maWdzQW5kU2VydmljZXM6IENvbnRleHR1YWxpemVkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICAvLyBDb25zaWRlcmluZyB0aGUgd2hvbGUgY29uZmlndXJhdGlvbiBtYXkgY2F1c2UgcXVlcmllcyB3aXRoIG5vL3dyb25nIHJlc3VsdHMgd2UgaGF2ZSBpbXBlcmF0aXZlbHkgdG8gYXZvaWQgIVxuICAgICAgICAvLyBlLmcgdGhlcmUgYXJlIGNyb3NzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVxdWlwbWVudHMgYW5kIHRheG9ub21pZXMgZmlsdGVycy4gQm90aCBoYXZlIFwicGFyZW50c1wiIGFuZCBcInRheG9ub21pZXNcIiBmaWx0ZXJzLi4uXG4gICAgICAgIC8vIFdoZW4gY2xpY2tpbmcgb24gYSBlcXVpcG1lbnQsIHRoZSBjb25maWd1cmF0aW9uIG9mIHRheG9ub21pZXMgd2l0aCBtYXRjaCBcInBhcmVudHNcIiBmaWx0ZXIsIGJ1dCB1c2UgdGhlIGlkIG9mIHRoZSBlcXVpcG1lbnRcbiAgICAgICAgLy8gVG8gZml4IHRoaXMsIHdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgdGhlIG9uZSBnaXZlbiBieSB0aGUgbm9kZSBwYXNzZWQgYXMgYXJndW1lbnQuXG4gICAgICAgIC8vIFRoYXQgd291bGQgbWVhbiA6IG5vIGNoaWxkIGNhbiBhZmZlY3QgcGFyZW50LlxuICAgICAgICAvLyBUaGF0IHdvdWxkIG1lYW4gOiBzb3J0aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGhhdmUgc2VtYW50aWMvaGllcmFyY2h5IGltcGxpY2F0aW9uc1xuICAgICAgICBjb25zdCBjb25maWdzID0gbm9kZSA/IHRoaXMuZ2V0TmV4dENvbmZpZ3Mobm9kZS5ub2RlLmNvbmZpZykgOiB0aGlzLmNvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHtwYWdlSW5kZXg6IDAsIHBhZ2VTaXplOiA5OTl9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW06IENvbnRleHR1YWxpemVkQ29uZmlnID0ge30gYXMgQ29udGV4dHVhbGl6ZWRDb25maWc7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0RmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJCeVNlcnZpY2UoY29uZmlnLCBjb250ZXh0RmlsdGVycyk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdldFNlcnZpY2VGaWx0ZXIobm9kZSwgY29uZmlnLCBjb250ZXh0RmlsdGVyLCAhIXNlYXJjaFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgIGlmICghZmlsdGVyIHx8ICFjb25maWcuaW5qZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlc01hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcigpO1xuXG4gICAgICAgICAgICB2YXJpYWJsZXNNYW5hZ2VyLnNldCgndmFyaWFibGVzJywge2ZpbHRlcjogZmlsdGVyLCBwYWdpbmF0aW9uOiBwYWdpbmF0aW9ufSk7XG4gICAgICAgICAgICB2YXJpYWJsZXNNYW5hZ2VyLnNldCgnY29uZmlnLWZpbHRlcicsIHtmaWx0ZXI6IGNvbmZpZy5maWx0ZXJ9KTtcblxuICAgICAgICAgICAgaWYgKHNlYXJjaFZhcmlhYmxlcykge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXR1cmFsLXNlYXJjaCcsIHNlYXJjaFZhcmlhYmxlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhc3QgTmF0dXJhbEhpZXJhcmNoaWNTZXJ2aWNlQ29uZmlndXJhdGlvbiBiZWNhdXNlIHRoZSB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIGluamVjdGVkU2VydmljZXMgYXJlIGZpbHRlcmVkIGVhcmxpZXIgYW5kIHdlIGNhbiB2YWxpZGF0ZSB2YWx1ZVxuICAgICAgICAgICAgaXRlbS5jb25maWd1cmF0aW9uID0gY29uZmlnIGFzIE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgICBpdGVtLnZhcmlhYmxlc01hbmFnZXIgPSB2YXJpYWJsZXNNYW5hZ2VyO1xuICAgICAgICAgICAgY29uZmlnc0FuZFNlcnZpY2VzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnc0FuZFNlcnZpY2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBtb2RlbHMgbWF0Y2hpbmcgZ2l2ZW4gRmxhdE5vZGVzXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgb2YgbW9kZWxzIGdyb3VwZWQgYnkgdGhlaXIgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGUgXCJzZWxlY3RhYmxlQXRLZXlcIlxuICAgICAqL1xuICAgIHB1YmxpYyB0b09yZ2FuaXplZFNlbGVjdGlvbihub2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24ucmVkdWNlKChncm91cCwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIGdyb3VwW2NvbmZpZy5zZWxlY3RhYmxlQXRLZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICAgIH0sIHt9IGFzIExpdGVyYWwpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgaWYgKG5vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbltub2RlLmNvbmZpZy5zZWxlY3RhYmxlQXRLZXldLnB1c2gobm9kZS5tb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIGxpc3Qgb2YgTW9kZWxOb2Rlc1xuICAgICAqL1xuICAgIHB1YmxpYyBmcm9tT3JnYW5pemVkU2VsZWN0aW9uKG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSB7XG4gICAgICAgIGlmICghb3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0YWJsZUF0S2V5IG9mIE9iamVjdC5rZXlzKG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWd1cmF0aW9uQnlTZWxlY3RhYmxlS2V5KHNlbGVjdGFibGVBdEtleSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbltzZWxlY3RhYmxlQXRLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBIaWVyYXJjaGljTW9kZWxOb2RlKG1vZGVsLCBjb25maWcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdFNlcnZpY2VzSW5Db25maWd1cmF0aW9uKFxuICAgICAgICBjb25maWd1cmF0aW9uczogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10sXG4gICAgKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFjb25maWcuaW5qZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmluamVjdGVkU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KGNvbmZpZy5zZXJ2aWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhhdCBlYWNoIGNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSBpcyB1bmlxdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uczogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5kZXggPSBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzLmluZGV4T2YoY29uZmlnLnNlbGVjdGFibGVBdEtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IC0xICYmIGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlcy5wdXNoKGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gOiByZW1vdmUgP1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5YmUgZGFuZ2Vyb3VzIGluIGNhc2Ugd2UgcmUtb3BlbiBoaWVyYXJjaGljYWwgc2VsZWN0b3Igd2l0aCB0aGUgbGFzdCByZXR1cm5lZCBjb25maWcgaGF2aW5nIG5vbi11bmlxdWVcbiAgICAgICAgICAgICAgICAvLyBrZXlzXG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4IDwgLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGhpZXJhcmNoaWMgY29uZmlndXJhdGlvbiA6IHNlbGVjdGFibGVBdEtleSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVuaXF1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjb25maWd1cmF0aW9ucyBzZXR1cCBpbiB0aGUgbGlzdCBhZnRlciB0aGUgZ2l2ZW4gb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0Q29uZmlncyhjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdIHtcbiAgICAgICAgY29uc3QgY29uZmlnSW5kZXggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZmluZEluZGV4KGMgPT4gYyA9PT0gY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5zbGljZShjb25maWdJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHF1ZXJ5VmFyaWFibGVzIGZpbHRlciBmb3IgY2hpbGRyZW4gcXVlcnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNlcnZpY2VGaWx0ZXIoXG4gICAgICAgIGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsLFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGFsbERlZXBzID0gZmFsc2UsXG4gICAgKTogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZGl0aW9uOiBGaWx0ZXJHcm91cENvbmRpdGlvbiA9IHt9O1xuXG4gICAgICAgIC8vIGlmIG5vIHBhcmVudCwgZmlsdGVyIGVtcHR5IGVsZW1lbnRzXG4gICAgICAgIGlmICghZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRGaWx0ZXIgPyBjb250ZXh0RmlsdGVyIDoge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsRGVlcHMpIHtcbiAgICAgICAgICAgICAgICBjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRDb25kaXRpb25bZl0gPSB7ZW1wdHk6IHt9fTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZmxhdE5vZGUubm9kZS5jb25maWcuY2hpbGRyZW5SZWxhdGlvbk5hbWVzIHx8ICFjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdGaWx0ZXJzID0gaW50ZXJzZWN0aW9uKFxuICAgICAgICAgICAgICAgIGZsYXROb2RlLm5vZGUuY29uZmlnLmNoaWxkcmVuUmVsYXRpb25OYW1lcyxcbiAgICAgICAgICAgICAgICBjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFtYXRjaGluZ0ZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZENvbmRpdGlvblttYXRjaGluZ0ZpbHRlcnNbMF1dID0ge2hhdmU6IHt2YWx1ZXM6IFtmbGF0Tm9kZS5ub2RlLm1vZGVsLmlkXX19O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHtncm91cHM6IFt7Y29uZGl0aW9uczogW2ZpZWxkQ29uZGl0aW9uXX1dfTtcblxuICAgICAgICAvLyB0b2RvIDogaXMgaXQgcmlnaHQgPyBzaG91bGRuJ3QgaXQgYmUgbWFuYWdlZCB3aXRoIFF1ZXJ5VmFyaWFibGVzTWFuYWdlcidzIGNoYW5uZWxzID8gP1xuICAgICAgICBpZiAoY29udGV4dEZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVycy5ncm91cHMucHVzaCguLi5jb250ZXh0RmlsdGVyLmdyb3Vwcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBjb250ZXh0IGZpbHRlciBhcHBsaWNhYmxlIHRvIHRoZSBzZXJ2aWNlIGZvciBnaXZlbiBjb25maWdcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWcgQXBwbGljYWJsZSBjb25maWdcbiAgICAgKiBAcGFyYW0gY29udGV4dEZpbHRlcnMgTGlzdCBvZiBjb250ZXh0IGZpbHRlcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEZpbHRlckJ5U2VydmljZShcbiAgICAgICAgY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvbltdIHwgbnVsbCxcbiAgICApOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvblsnZmlsdGVyJ10gfCBudWxsIHtcbiAgICAgICAgaWYgKCFjb250ZXh0RmlsdGVycyB8fCAhY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGNvbnRleHRGaWx0ZXJzLmZpbmQoZiA9PiBmLnNlcnZpY2UgPT09IGNvbmZpZy5zZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlciA/IGZpbHRlci5maWx0ZXIgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpbiBjb25maWd1cmF0aW9ucy5zZWxlY3RhYmxlQXRLZXkgYXR0cmlidXRlIHRvIGZpbmQgZ2l2ZW4ga2V5IGFuZCByZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyYXRpb25CeVNlbGVjdGFibGVLZXkoXG4gICAgICAgIGtleTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uWydzZWxlY3RhYmxlQXRLZXknXSxcbiAgICApOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24gfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5maW5kKGNvbmYgPT4gY29uZi5zZWxlY3RhYmxlQXRLZXkgPT09IGtleSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yQ3JlYXRlTW9kZWxOb2RlKFxuICAgICAgICBpdGVtOiBIaWVyYXJjaGljTW9kZWwsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICApOiBIaWVyYXJjaGljTW9kZWxOb2RlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZGF0YUNoYW5nZS52YWx1ZS5maW5kKG4gPT4gbi5tb2RlbC5pZCA9PT0gaXRlbS5pZCAmJiBuLm1vZGVsLl9fdHlwZW5hbWUgPT09IGl0ZW0uX190eXBlbmFtZSk7XG4gICAgICAgIHJldHVybiBub2RlIHx8IG5ldyBIaWVyYXJjaGljTW9kZWxOb2RlKGl0ZW0sIGNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiJdfQ==
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWxFLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLHlDQUF5QyxDQUFDO0FBVXJHLE9BQU8sRUFBa0IsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFjM0UsTUFBTSxPQUFPLGdDQUFnQztJQWV6QyxZQUFvQyxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZHREOzs7O1dBSUc7UUFDYSxlQUFVLEdBQTJDLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQUVwSDs7OztXQUlHO1FBQ0ssa0JBQWEsR0FBcUMsRUFBRSxDQUFDO0lBRUosQ0FBQztJQUUxRDs7O09BR0c7SUFDSSxJQUFJLENBQ1AsTUFBd0MsRUFDeEMsZ0JBQXVELElBQUksRUFDM0Qsa0JBQXlDLElBQUk7UUFFN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLE9BQU8s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QWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUErQixDQUNuQyxHQUFzRDtRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2pGLENBQUM7SUFFTyxvQkFBb0IsQ0FDeEIsSUFBcUIsRUFDckIsYUFBNkM7UUFFN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0csT0FBTyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQzs4R0E1VFEsZ0NBQWdDO2tIQUFoQyxnQ0FBZ0MsY0FEcEIsTUFBTTs7MkZBQ2xCLGdDQUFnQztrQkFENUMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aW50ZXJzZWN0aW9ufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZpcnN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7ZmluYWxpemUsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge1xuICAgIE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uLFxufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuICAgIEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uLFxuICAgIEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbCwgSGllcmFyY2hpY01vZGVsTm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RlbC1ub2RlJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtGaWx0ZXJHcm91cENvbmRpdGlvbn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24ge1xuICAgIFtrZXk6IHN0cmluZ106IGFueVtdO1xufVxuXG5pbnRlcmZhY2UgQ29udGV4dHVhbGl6ZWRDb25maWcge1xuICAgIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb247XG4gICAgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjtcbn1cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIFN0b3JlcyB0aGUgZ2xvYmFsIHJlc3VsdCBvZiB0aGUgdHJlZVxuICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBjb250YWlucyBOb2RlLlxuICAgICAqIFdoZW4gaXQncyB1cGRhdGVkLCB0aGUgVHJlZUNvbnRyb2xsZXIgYW5kIFRyZWVGbGF0dGVuZXIgcHJvY2VzcyB0aGUgbmV3IGFycmF5IHRvIGdlbmVyYXRlIHRoZSBmbGF0IHRyZWUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGFDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIaWVyYXJjaGljTW9kZWxOb2RlW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHJlbGF0aW9ucyBhbmQgc2VsZWN0aW9uIGNvbnN0cmFpbnRzXG4gICAgICpcbiAgICAgKiBUaGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGluIHRoZSBvcmRlciBvZiB0aGUgaGllcmFyY2hpYyAobGlzdCBmaXJzdCBwYXJlbnQgcnVsZXMsIHRoZW4gY2hpbGQgcnVsZXMpXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gICAgLyoqXG4gICAgICogSW5pdCBjb21wb25lbnQgYnkgc2F2aW5nIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlbiByZXRyaWV2aW5nIHJvb3QgZWxlbWVudHMuXG4gICAgICogVXBkYXRlcyAqKmFub3RoZXIqKiBvYnNlcnZhYmxlICh0aGlzLmRhdGFDaGFuZ2UpIHdoZW4gZGF0YSBpcyByZXRyaWV2ZWQuXG4gICAgICovXG4gICAgcHVibGljIGluaXQoXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10sXG4gICAgICAgIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHRoaXMuaW5qZWN0U2VydmljZXNJbkNvbmZpZ3VyYXRpb24oY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdChudWxsLCBjb250ZXh0RmlsdGVyLCBzZWFyY2hWYXJpYWJsZXMpLnBpcGUobWFwKGRhdGEgPT4gdGhpcy5kYXRhQ2hhbmdlLm5leHQoZGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBjaGlsZHJlbiwgY29uc2lkZXJpbmcgZ2l2ZW4gRmxhdE5vZGUgaWQgYXMgYSBwYXJlbnQuXG4gICAgICogTWFyayBsb2FkaW5nIHN0YXR1cyBpbmRpdmlkdWFsbHkgb24gbm9kZXMuXG4gICAgICovXG4gICAgcHVibGljIGxvYWRDaGlsZHJlbihcbiAgICAgICAgZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSxcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIERvbnQgcmVmZXRjaCBjaGlsZHJlbi4gSW1wcm92ZSBwZXJmb3JtYW5jZXNcbiAgICAgICAgLy8gUHJldmVudHMgaW50ZXJmZXJlbmNlcyBiZXR3ZWVuIEhpZXJhcmNoaWNNb2RlbE5vZGUgc3RydWN0dXJlIGFuZCBhbmd1bGFyIGNvbXBvbmVudHMgbmF2aWdhdGlvbi5cbiAgICAgICAgLy8gUHJldmVudHMgYSBidWcgd2hlcmUgZ3JhbmQgY2hpbGRyZW4gd2VyZSBsb3N0IGlmIGNsb3Npbmcgcm9vdFxuICAgICAgICBpZiAoZmxhdE5vZGUubm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZsYXROb2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldExpc3QoZmxhdE5vZGUsIGNvbnRleHRGaWx0ZXIpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAoZmxhdE5vZGUubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5ub2RlLmNoaWxkcmVuQ2hhbmdlLm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YUNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMsIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0TGlzdChudWxsLCBjb250ZXh0RmlsdGVyLCBzZWFyY2hWYXJpYWJsZXMpLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dChpdGVtcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGVsZW1lbnRzIGZyb20gdGhlIHNlcnZlclxuICAgICAqIEdldCByb290IGVsZW1lbnRzIGlmIG5vZGUgaXMgbnVsbCwgb3IgY2hpbGQgZWxlbWVudHMgaWYgbm9kZSBpcyBnaXZlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGlzdChcbiAgICAgICAgbm9kZTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IE9ic2VydmFibGU8SGllcmFyY2hpY01vZGVsTm9kZVtdPiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25zID0gdGhpcy5nZXRDb250ZXh0dWFsaXplZENvbmZpZ3Mobm9kZSwgY29udGV4dEZpbHRlcnMsIHNlYXJjaFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gY29uZmlndXJhdGlvbnMubWFwKGMgPT4gYy5jb25maWd1cmF0aW9uLmluamVjdGVkU2VydmljZS5nZXRBbGwoYy52YXJpYWJsZXNNYW5hZ2VyKSk7XG5cbiAgICAgICAgLy8gRmlyZSBxdWVyaWVzLCBhbmQgbWVyZ2UgcmVzdWx0cywgdHJhbnNmb3JtaW5nIGFwb2xsbyBpdGVtcyBpbnRvIE5vZGUgT2JqZWN0LlxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGluZzogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCByZXN1bHQgb2YgYW4gb2JzZXJ2YWJsZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCBpdGVtIG9mIHRoZSByZXN1bHQsIGNvbnZlcnQgaW50byBOb2RlIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzdWx0c1tpXS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZy5wdXNoKHRoaXMuZ2V0T3JDcmVhdGVNb2RlbE5vZGUoaXRlbSwgY29uZmlndXJhdGlvbnNbaV0uY29uZmlndXJhdGlvbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Rpbmc7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY291bnRJdGVtcyhub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUsIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKG5vZGUsIGNvbnRleHRGaWx0ZXJzLCBudWxsKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBjb25maWd1cmF0aW9ucy5tYXAoYyA9PlxuICAgICAgICAgICAgYy5jb25maWd1cmF0aW9uLmluamVjdGVkU2VydmljZS5jb3VudChjLnZhcmlhYmxlc01hbmFnZXIpLnBpcGUoZmlyc3QoKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsSXRlbXMgPSByZXN1bHRzLnJlZHVjZSgodG90YWwsIGxlbmd0aCkgPT4gdG90YWwgKyBsZW5ndGgsIDApO1xuICAgICAgICAgICAgbm9kZS5leHBhbmRhYmxlID0gdG90YWxJdGVtcyA+IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKFxuICAgICAgICBub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsID0gbnVsbCxcbiAgICAgICAgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogQ29udGV4dHVhbGl6ZWRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NBbmRTZXJ2aWNlczogQ29udGV4dHVhbGl6ZWRDb25maWdbXSA9IFtdO1xuXG4gICAgICAgIC8vIENvbnNpZGVyaW5nIHRoZSB3aG9sZSBjb25maWd1cmF0aW9uIG1heSBjYXVzZSBxdWVyaWVzIHdpdGggbm8vd3JvbmcgcmVzdWx0cyB3ZSBoYXZlIGltcGVyYXRpdmVseSB0byBhdm9pZCAhXG4gICAgICAgIC8vIGUuZyB0aGVyZSBhcmUgY3Jvc3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gZXF1aXBtZW50cyBhbmQgdGF4b25vbWllcyBmaWx0ZXJzLiBCb3RoIGhhdmUgXCJwYXJlbnRzXCIgYW5kIFwidGF4b25vbWllc1wiIGZpbHRlcnMuLi5cbiAgICAgICAgLy8gV2hlbiBjbGlja2luZyBvbiBhIGVxdWlwbWVudCwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGF4b25vbWllcyB3aXRoIG1hdGNoIFwicGFyZW50c1wiIGZpbHRlciwgYnV0IHVzZSB0aGUgaWQgb2YgdGhlIGVxdWlwbWVudFxuICAgICAgICAvLyBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIG9ubHkgY29uc2lkZXIgY29uZmlndXJhdGlvbiBhZnRlciB0aGUgb25lIGdpdmVuIGJ5IHRoZSBub2RlIHBhc3NlZCBhcyBhcmd1bWVudC5cbiAgICAgICAgLy8gVGhhdCB3b3VsZCBtZWFuIDogbm8gY2hpbGQgY2FuIGFmZmVjdCBwYXJlbnQuXG4gICAgICAgIC8vIFRoYXQgd291bGQgbWVhbiA6IHNvcnRpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaGF2ZSBzZW1hbnRpYy9oaWVyYXJjaHkgaW1wbGljYXRpb25zXG4gICAgICAgIGNvbnN0IGNvbmZpZ3MgPSBub2RlID8gdGhpcy5nZXROZXh0Q29uZmlncyhub2RlLm5vZGUuY29uZmlnKSA6IHRoaXMuY29uZmlndXJhdGlvbjtcblxuICAgICAgICBjb25zdCBwYWdpbmF0aW9uID0ge3BhZ2VJbmRleDogMCwgcGFnZVNpemU6IDk5OX07XG5cbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuICAgICAgICAgICAgY29uc3QgaXRlbTogQ29udGV4dHVhbGl6ZWRDb25maWcgPSB7fSBhcyBDb250ZXh0dWFsaXplZENvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRGaWx0ZXIgPSB0aGlzLmdldEZpbHRlckJ5U2VydmljZShjb25maWcsIGNvbnRleHRGaWx0ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0U2VydmljZUZpbHRlcihub2RlLCBjb25maWcsIGNvbnRleHRGaWx0ZXIsICEhc2VhcmNoVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgIWNvbmZpZy5pbmplY3RlZFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzTWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG5cbiAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCd2YXJpYWJsZXMnLCB7ZmlsdGVyOiBmaWx0ZXIsIHBhZ2luYXRpb246IHBhZ2luYXRpb259KTtcbiAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCdjb25maWctZmlsdGVyJywge2ZpbHRlcjogY29uZmlnLmZpbHRlcn0pO1xuXG4gICAgICAgICAgICBpZiAoc2VhcmNoVmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVzTWFuYWdlci5zZXQoJ25hdHVyYWwtc2VhcmNoJywgc2VhcmNoVmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FzdCBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uIGJlY2F1c2UgdGhlIHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gaW5qZWN0ZWRTZXJ2aWNlcyBhcmUgZmlsdGVyZWQgZWFybGllciBhbmQgd2UgY2FuIHZhbGlkYXRlIHZhbHVlXG4gICAgICAgICAgICBpdGVtLmNvbmZpZ3VyYXRpb24gPSBjb25maWcgYXMgTmF0dXJhbEhpZXJhcmNoaWNTZXJ2aWNlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIGl0ZW0udmFyaWFibGVzTWFuYWdlciA9IHZhcmlhYmxlc01hbmFnZXI7XG4gICAgICAgICAgICBjb25maWdzQW5kU2VydmljZXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWdzQW5kU2VydmljZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIG1vZGVscyBtYXRjaGluZyBnaXZlbiBGbGF0Tm9kZXNcbiAgICAgKiBSZXR1cm5zIGEgTGl0ZXJhbCBvZiBtb2RlbHMgZ3JvdXBlZCBieSB0aGVpciBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZSBcInNlbGVjdGFibGVBdEtleVwiXG4gICAgICovXG4gICAgcHVibGljIHRvT3JnYW5pemVkU2VsZWN0aW9uKG5vZGVzOiBIaWVyYXJjaGljTW9kZWxOb2RlW10pOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbi5yZWR1Y2UoKGdyb3VwLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBbY29uZmlnLnNlbGVjdGFibGVBdEtleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfSwge30gYXMgTGl0ZXJhbCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uW25vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleV0ucHVzaChub2RlLm1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBhbiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiBpbnRvIGEgbGlzdCBvZiBNb2RlbE5vZGVzXG4gICAgICovXG4gICAgcHVibGljIGZyb21Pcmdhbml6ZWRTZWxlY3Rpb24ob3JnYW5pemVkTW9kZWxTZWxlY3Rpb246IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKTogSGllcmFyY2hpY01vZGVsTm9kZVtdIHtcbiAgICAgICAgaWYgKCFvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBIaWVyYXJjaGljTW9kZWxOb2RlW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzZWxlY3RhYmxlQXRLZXkgb2YgT2JqZWN0LmtleXMob3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZ3VyYXRpb25CeVNlbGVjdGFibGVLZXkoc2VsZWN0YWJsZUF0S2V5KTtcbiAgICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uW3NlbGVjdGFibGVBdEtleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEhpZXJhcmNoaWNNb2RlbE5vZGUobW9kZWwsIGNvbmZpZykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5qZWN0U2VydmljZXNJbkNvbmZpZ3VyYXRpb24oXG4gICAgICAgIGNvbmZpZ3VyYXRpb25zOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSxcbiAgICApOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSB7XG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5pbmplY3RlZFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuaW5qZWN0ZWRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoY29uZmlnLnNlcnZpY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IGVhY2ggY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlQXRLZXkgYXR0cmlidXRlIGlzIHVuaXF1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25zOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmRleCA9IHNlbGVjdGFibGVBdEtleUF0dHJpYnV0ZXMuaW5kZXhPZihjb25maWcuc2VsZWN0YWJsZUF0S2V5KTtcblxuICAgICAgICAgICAgICAgIGlmIChrZXlJbmRleCA9PT0gLTEgJiYgY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzLnB1c2goY29uZmlnLnNlbGVjdGFibGVBdEtleSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyA6IHJlbW92ZSA/XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXliZSBkYW5nZXJvdXMgaW4gY2FzZSB3ZSByZS1vcGVuIGhpZXJhcmNoaWNhbCBzZWxlY3RvciB3aXRoIHRoZSBsYXN0IHJldHVybmVkIGNvbmZpZyBoYXZpbmcgbm9uLXVuaXF1ZVxuICAgICAgICAgICAgICAgIC8vIGtleXNcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPCAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgaGllcmFyY2hpYyBjb25maWd1cmF0aW9uIDogc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSBzaG91bGQgYmUgdW5pcXVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGNvbmZpZ3VyYXRpb25zIHNldHVwIGluIHRoZSBsaXN0IGFmdGVyIHRoZSBnaXZlbiBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE5leHRDb25maWdzKGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10ge1xuICAgICAgICBjb25zdCBjb25maWdJbmRleCA9IHRoaXMuY29uZmlndXJhdGlvbi5maW5kSW5kZXgoYyA9PiBjID09PSBjb25maWcpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnNsaWNlKGNvbmZpZ0luZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgcXVlcnlWYXJpYWJsZXMgZmlsdGVyIGZvciBjaGlsZHJlbiBxdWVyeVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U2VydmljZUZpbHRlcihcbiAgICAgICAgZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwsXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgICAgICBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvblsnZmlsdGVyJ10gfCBudWxsID0gbnVsbCxcbiAgICAgICAgYWxsRGVlcHMgPSBmYWxzZSxcbiAgICApOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvblsnZmlsdGVyJ10gfCBudWxsIHtcbiAgICAgICAgY29uc3QgZmllbGRDb25kaXRpb246IEZpbHRlckdyb3VwQ29uZGl0aW9uID0ge307XG5cbiAgICAgICAgLy8gaWYgbm8gcGFyZW50LCBmaWx0ZXIgZW1wdHkgZWxlbWVudHNcbiAgICAgICAgaWYgKCFmbGF0Tm9kZSkge1xuICAgICAgICAgICAgaWYgKCFjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dEZpbHRlciA/IGNvbnRleHRGaWx0ZXIgOiB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhbGxEZWVwcykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZENvbmRpdGlvbltmXSA9IHtlbXB0eToge319O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmbGF0Tm9kZS5ub2RlLmNvbmZpZy5jaGlsZHJlblJlbGF0aW9uTmFtZXMgfHwgIWNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0ZpbHRlcnMgPSBpbnRlcnNlY3Rpb24oXG4gICAgICAgICAgICAgICAgZmxhdE5vZGUubm9kZS5jb25maWcuY2hpbGRyZW5SZWxhdGlvbk5hbWVzLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoaW5nRmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkQ29uZGl0aW9uW21hdGNoaW5nRmlsdGVyc1swXV0gPSB7aGF2ZToge3ZhbHVlczogW2ZsYXROb2RlLm5vZGUubW9kZWwuaWRdfX07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJzID0ge2dyb3VwczogW3tjb25kaXRpb25zOiBbZmllbGRDb25kaXRpb25dfV19O1xuXG4gICAgICAgIC8vIHRvZG8gOiBpcyBpdCByaWdodCA/IHNob3VsZG4ndCBpdCBiZSBtYW5hZ2VkIHdpdGggUXVlcnlWYXJpYWJsZXNNYW5hZ2VyJ3MgY2hhbm5lbHMgPyA/XG4gICAgICAgIGlmIChjb250ZXh0RmlsdGVyKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLmdyb3Vwcy5wdXNoKC4uLmNvbnRleHRGaWx0ZXIuZ3JvdXBzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGNvbnRleHQgZmlsdGVyIGFwcGxpY2FibGUgdG8gdGhlIHNlcnZpY2UgZm9yIGdpdmVuIGNvbmZpZ1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmZpZyBBcHBsaWNhYmxlIGNvbmZpZ1xuICAgICAqIEBwYXJhbSBjb250ZXh0RmlsdGVycyBMaXN0IG9mIGNvbnRleHQgZmlsdGVyc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RmlsdGVyQnlTZXJ2aWNlKFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICAgICAgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uW10gfCBudWxsLFxuICAgICk6IEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uWydmaWx0ZXInXSB8IG51bGwge1xuICAgICAgICBpZiAoIWNvbnRleHRGaWx0ZXJzIHx8ICFjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gY29udGV4dEZpbHRlcnMuZmluZChmID0+IGYuc2VydmljZSA9PT0gY29uZmlnLnNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gZmlsdGVyID8gZmlsdGVyLmZpbHRlciA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGluIGNvbmZpZ3VyYXRpb25zLnNlbGVjdGFibGVBdEtleSBhdHRyaWJ1dGUgdG8gZmluZCBnaXZlbiBrZXkgYW5kIHJldHVybiB0aGUgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q29uZmlndXJhdGlvbkJ5U2VsZWN0YWJsZUtleShcbiAgICAgICAga2V5OiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bJ3NlbGVjdGFibGVBdEtleSddLFxuICAgICk6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbiB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmZpbmQoY29uZiA9PiBjb25mLnNlbGVjdGFibGVBdEtleSA9PT0ga2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVNb2RlbE5vZGUoXG4gICAgICAgIGl0ZW06IEhpZXJhcmNoaWNNb2RlbCxcbiAgICAgICAgY29uZmlndXJhdGlvbjogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgICk6IEhpZXJhcmNoaWNNb2RlbE5vZGUge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhQ2hhbmdlLnZhbHVlLmZpbmQobiA9PiBuLm1vZGVsLmlkID09PSBpdGVtLmlkICYmIG4ubW9kZWwuX190eXBlbmFtZSA9PT0gaXRlbS5fX3R5cGVuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vZGUgfHwgbmV3IEhpZXJhcmNoaWNNb2RlbE5vZGUoaXRlbSwgY29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIl19
|