@abp/ng.feature-management 5.0.1 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +3 -3
  2. package/abp-ng.feature-management.d.ts +5 -5
  3. package/bundles/abp-ng.feature-management-proxy.umd.js +28 -28
  4. package/bundles/abp-ng.feature-management-proxy.umd.js.map +1 -1
  5. package/bundles/abp-ng.feature-management.umd.js +534 -534
  6. package/bundles/abp-ng.feature-management.umd.js.map +1 -1
  7. package/esm2015/abp-ng.feature-management.js +4 -4
  8. package/esm2015/lib/components/feature-management/feature-management.component.js +158 -158
  9. package/esm2015/lib/components/index.js +2 -2
  10. package/esm2015/lib/directives/free-text-input.directive.js +37 -37
  11. package/esm2015/lib/directives/index.js +2 -2
  12. package/esm2015/lib/enums/components.js +2 -2
  13. package/esm2015/lib/feature-management.module.js +22 -22
  14. package/esm2015/lib/models/feature-management.js +2 -2
  15. package/esm2015/lib/models/index.js +2 -2
  16. package/esm2015/proxy/abp-ng.feature-management-proxy.js +4 -4
  17. package/esm2015/proxy/lib/index.js +3 -3
  18. package/esm2015/proxy/lib/proxy/feature-management/features.service.js +30 -30
  19. package/esm2015/proxy/lib/proxy/feature-management/index.js +3 -3
  20. package/esm2015/proxy/lib/proxy/feature-management/models.js +2 -2
  21. package/esm2015/proxy/lib/proxy/validation/index.js +3 -3
  22. package/esm2015/proxy/lib/proxy/validation/string-values/index.js +2 -2
  23. package/esm2015/proxy/lib/proxy/validation/string-values/models.js +2 -2
  24. package/esm2015/proxy/public-api.js +2 -2
  25. package/esm2015/public-api.js +6 -6
  26. package/fesm2015/abp-ng.feature-management-proxy.js +26 -26
  27. package/fesm2015/abp-ng.feature-management-proxy.js.map +1 -1
  28. package/fesm2015/abp-ng.feature-management.js +192 -192
  29. package/fesm2015/abp-ng.feature-management.js.map +1 -1
  30. package/lib/components/feature-management/feature-management.component.d.ts +49 -49
  31. package/lib/components/index.d.ts +1 -1
  32. package/lib/directives/free-text-input.directive.d.ts +21 -21
  33. package/lib/directives/index.d.ts +1 -1
  34. package/lib/enums/components.d.ts +3 -3
  35. package/lib/feature-management.module.d.ts +11 -11
  36. package/lib/models/feature-management.d.ts +11 -11
  37. package/lib/models/index.d.ts +1 -1
  38. package/package.json +3 -3
  39. package/proxy/abp-ng.feature-management-proxy.d.ts +5 -5
  40. package/proxy/lib/index.d.ts +2 -2
  41. package/proxy/lib/proxy/feature-management/features.service.d.ts +12 -12
  42. package/proxy/lib/proxy/feature-management/index.d.ts +2 -2
  43. package/proxy/lib/proxy/feature-management/models.d.ts +30 -30
  44. package/proxy/lib/proxy/validation/index.d.ts +2 -2
  45. package/proxy/lib/proxy/validation/string-values/index.d.ts +1 -1
  46. package/proxy/lib/proxy/validation/string-values/models.d.ts +11 -11
  47. package/proxy/public-api.d.ts +1 -1
  48. package/public-api.d.ts +5 -5
@@ -1,158 +1,158 @@
1
- import { ConfigStateService, TrackByService } from '@abp/ng.core';
2
- import { FeaturesService, } from '@abp/ng.feature-management/proxy';
3
- import { Component, EventEmitter, Input, Output } from '@angular/core';
4
- import { finalize } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@abp/ng.core";
7
- import * as i2 from "@abp/ng.feature-management/proxy";
8
- import * as i3 from "@abp/ng.theme.shared";
9
- import * as i4 from "@ng-bootstrap/ng-bootstrap";
10
- import * as i5 from "@angular/common";
11
- import * as i6 from "@angular/forms";
12
- import * as i7 from "../../directives/free-text-input.directive";
13
- var ValueTypes;
14
- (function (ValueTypes) {
15
- ValueTypes["ToggleStringValueType"] = "ToggleStringValueType";
16
- ValueTypes["FreeTextStringValueType"] = "FreeTextStringValueType";
17
- ValueTypes["SelectionStringValueType"] = "SelectionStringValueType";
18
- })(ValueTypes || (ValueTypes = {}));
19
- export class FeatureManagementComponent {
20
- constructor(track, service, configState) {
21
- this.track = track;
22
- this.service = service;
23
- this.configState = configState;
24
- this.groups = [];
25
- this.valueTypes = ValueTypes;
26
- this.visibleChange = new EventEmitter();
27
- this.modalBusy = false;
28
- }
29
- get visible() {
30
- return this._visible;
31
- }
32
- set visible(value) {
33
- if (this._visible === value)
34
- return;
35
- this._visible = value;
36
- this.visibleChange.emit(value);
37
- if (value)
38
- this.openModal();
39
- }
40
- openModal() {
41
- if (!this.providerName) {
42
- throw new Error('providerName is required.');
43
- }
44
- this.getFeatures();
45
- }
46
- getFeatures() {
47
- this.service.get(this.providerName, this.providerKey).subscribe(res => {
48
- var _a;
49
- if (!((_a = res.groups) === null || _a === void 0 ? void 0 : _a.length))
50
- return;
51
- this.groups = res.groups.map(({ name, displayName }) => ({ name, displayName }));
52
- this.selectedGroupDisplayName = this.groups[0].displayName;
53
- this.features = res.groups.reduce((acc, val) => (Object.assign(Object.assign({}, acc), { [val.name]: mapFeatures(val.features, document.body.dir) })), {});
54
- });
55
- }
56
- save() {
57
- if (this.modalBusy)
58
- return;
59
- const changedFeatures = [];
60
- Object.keys(this.features).forEach(key => {
61
- this.features[key].forEach(feature => {
62
- if (feature.value !== feature.initialValue)
63
- changedFeatures.push({ name: feature.name, value: `${feature.value}` });
64
- });
65
- });
66
- if (!changedFeatures.length) {
67
- this.visible = false;
68
- return;
69
- }
70
- this.modalBusy = true;
71
- this.service
72
- .update(this.providerName, this.providerKey, { features: changedFeatures })
73
- .pipe(finalize(() => (this.modalBusy = false)))
74
- .subscribe(() => {
75
- this.visible = false;
76
- if (!this.providerKey) {
77
- // to refresh host's features
78
- this.configState.refreshAppState().subscribe();
79
- }
80
- });
81
- }
82
- onCheckboxClick(val, feature) {
83
- if (val) {
84
- this.checkToggleAncestors(feature);
85
- }
86
- else {
87
- this.uncheckToggleDescendants(feature);
88
- }
89
- }
90
- uncheckToggleDescendants(feature) {
91
- this.findAllDescendantsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => this.setFeatureValue(node, false));
92
- }
93
- checkToggleAncestors(feature) {
94
- this.findAllAncestorsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => this.setFeatureValue(node, true));
95
- }
96
- findAllAncestorsOfByType(feature, type) {
97
- let parent = this.findParentByType(feature, type);
98
- const ancestors = [];
99
- while (parent) {
100
- ancestors.push(parent);
101
- parent = this.findParentByType(parent, type);
102
- }
103
- return ancestors;
104
- }
105
- findAllDescendantsOfByType(feature, type) {
106
- const descendants = [];
107
- const queue = [feature];
108
- while (queue.length) {
109
- const node = queue.pop();
110
- const newDescendants = this.findChildrenByType(node, type);
111
- descendants.push(...newDescendants);
112
- queue.push(...newDescendants);
113
- }
114
- return descendants;
115
- }
116
- findParentByType(feature, type) {
117
- return this.getCurrentGroup().find(f => f.valueType.name === type && f.name === feature.parentName);
118
- }
119
- findChildrenByType(feature, type) {
120
- return this.getCurrentGroup().filter(f => f.valueType.name === type && f.parentName === feature.name);
121
- }
122
- getCurrentGroup() {
123
- var _a;
124
- return (_a = this.features[this.selectedGroupDisplayName]) !== null && _a !== void 0 ? _a : [];
125
- }
126
- setFeatureValue(feature, val) {
127
- feature.value = val;
128
- }
129
- }
130
- FeatureManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FeatureManagementComponent, deps: [{ token: i1.TrackByService }, { token: i2.FeaturesService }, { token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
131
- FeatureManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: FeatureManagementComponent, selector: "abp-feature-management", inputs: { providerKey: "providerKey", providerName: "providerName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, exportAs: ["abpFeatureManagement"], ngImport: i0, template: "<abp-modal *ngIf=\"visible\" [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'AbpFeatureManagement::Features' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n [(activeId)]=\"selectedGroupDisplayName\"\r\n class=\"nav-pills\"\r\n orientation=\"vertical\"\r\n >\r\n <li\r\n *ngFor=\"let group of groups; trackBy: track.by('name')\"\r\n [ngbNavItem]=\"group.displayName\"\r\n >\r\n <a ngbNavLink>{{ group.displayName }}</a>\r\n <ng-template ngbNavContent>\r\n <h4>{{ selectedGroupDisplayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n\r\n <div\r\n class=\"mt-2\"\r\n *ngFor=\"let feature of features[group.name]; let i = index; trackBy: track.by('id')\"\r\n [ngStyle]=\"feature.style\"\r\n [ngSwitch]=\"feature.valueType?.name\"\r\n (keyup.enter)=\"save()\"\r\n >\r\n <ng-container *ngSwitchCase=\"valueTypes.ToggleStringValueType\">\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"feature.name\"\r\n [(ngModel)]=\"feature.value\"\r\n (ngModelChange)=\"onCheckboxClick($event, feature)\"\r\n />\r\n\r\n <label class=\"form-check-label\" [htmlFor]=\"feature.name\">{{\r\n feature.displayName\r\n }}</label>\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"valueTypes.FreeTextStringValueType\">\r\n <div class=\"mb-3 form-group\">\r\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\r\n feature.displayName\r\n }}</label>\r\n <input\r\n class=\"form-control\"\r\n type=\"text\"\r\n [id]=\"feature.name\"\r\n [(ngModel)]=\"feature.value\"\r\n [abpFeatureManagementFreeText]=\"feature\"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"valueTypes.SelectionStringValueType\">\r\n <ng-container *ngIf=\"feature.valueType.itemSource?.items?.length\">\r\n <div class=\"mb-3 form-group\">\r\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\r\n feature.displayName\r\n }}</label>\r\n <select class=\"form-select\" [id]=\"feature.name\" [(ngModel)]=\"feature.value\">\r\n <option\r\n *ngFor=\"\r\n let item of feature.valueType.itemSource?.items;\r\n trackBy: track.by('value')\r\n \"\r\n [ngValue]=\"item.value\"\r\n >\r\n {{\r\n item.displayText?.resourceName + '::' + item.displayText?.name\r\n | abpLocalization\r\n }}\r\n </option>\r\n </select>\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>{{ feature.displayName }}</ng-container>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #descTmp let-description>\r\n <small *ngIf=\"description\" class=\"d-block form-text text-muted\">{{ description }}</small>\r\n </ng-template>\r\n\r\n <div class=\"col-md-8\"><div [ngbNavOutlet]=\"nav\"></div></div>\r\n\r\n <div class=\"mx-3\" *ngIf=\"!groups.length\">\r\n {{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">\r\n {{ 'AbpFeatureManagement::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"groups.length\"\r\n iconClass=\"fa fa-check\"\r\n [disabled]=\"modalBusy\"\r\n (click)=\"save()\"\r\n >\r\n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", components: [{ type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { type: i4.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgbNav, selector: "[ngbNav]", inputs: ["animation", "destroyOnHide", "orientation", "roles", "keyboard", "activeId"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgbNavItem, selector: "[ngbNavItem]", inputs: ["disabled", "domId", "destroyOnHide", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { type: i4.NgbNavLink, selector: "a[ngbNavLink]" }, { type: i4.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.FreeTextInputDirective, selector: "input[abpFeatureManagementFreeText]", inputs: ["abpFeatureManagementFreeText"], exportAs: ["inputAbpFeatureManagementFreeText"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3.ModalCloseDirective, selector: "[abpClose]" }], pipes: { "abpLocalization": i1.LocalizationPipe } });
132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FeatureManagementComponent, decorators: [{
133
- type: Component,
134
- args: [{
135
- selector: 'abp-feature-management',
136
- templateUrl: './feature-management.component.html',
137
- exportAs: 'abpFeatureManagement',
138
- }]
139
- }], ctorParameters: function () { return [{ type: i1.TrackByService }, { type: i2.FeaturesService }, { type: i1.ConfigStateService }]; }, propDecorators: { providerKey: [{
140
- type: Input
141
- }], providerName: [{
142
- type: Input
143
- }], visible: [{
144
- type: Input
145
- }], visibleChange: [{
146
- type: Output
147
- }] } });
148
- function mapFeatures(features, dir) {
149
- const margin = `margin-${dir === 'rtl' ? 'right' : 'left'}.px`;
150
- return features.map(feature => {
151
- var _a;
152
- const value = ((_a = feature.valueType) === null || _a === void 0 ? void 0 : _a.name) === ValueTypes.ToggleStringValueType
153
- ? (feature.value || '').toLowerCase() === 'true'
154
- : feature.value;
155
- return Object.assign(Object.assign({}, feature), { value, initialValue: value, style: { [margin]: feature.depth * 20 } });
156
- });
157
- }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBR0wsZUFBZSxHQUVoQixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFHMUMsSUFBSyxVQUlKO0FBSkQsV0FBSyxVQUFVO0lBQ2IsNkRBQStDLENBQUE7SUFDL0MsaUVBQW1ELENBQUE7SUFDbkQsbUVBQXFELENBQUE7QUFDdkQsQ0FBQyxFQUpJLFVBQVUsS0FBVixVQUFVLFFBSWQ7QUFPRCxNQUFNLE9BQU8sMEJBQTBCO0lBd0NyQyxZQUNrQixLQUFxQixFQUMzQixPQUF3QixFQUN4QixXQUErQjtRQUZ6QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUE5QjNDLFdBQU0sR0FBb0QsRUFBRSxDQUFDO1FBTTdELGVBQVUsR0FBRyxVQUFVLENBQUM7UUFpQkwsa0JBQWEs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QUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxJQUN2QztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgVHJhY2tCeVNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmVEdG8sXHJcbiAgRmVhdHVyZUdyb3VwRHRvLFxyXG4gIEZlYXR1cmVzU2VydmljZSxcclxuICBVcGRhdGVGZWF0dXJlRHRvLFxyXG59IGZyb20gJ0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50L3Byb3h5JztcclxuaW1wb3J0IHsgTG9jYWxlRGlyZWN0aW9uIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmVhdHVyZS1tYW5hZ2VtZW50JztcclxuXHJcbmVudW0gVmFsdWVUeXBlcyB7XHJcbiAgVG9nZ2xlU3RyaW5nVmFsdWVUeXBlID0gJ1RvZ2dsZVN0cmluZ1ZhbHVlVHlwZScsXHJcbiAgRnJlZVRleHRTdHJpbmdWYWx1ZVR5cGUgPSAnRnJlZVRleHRTdHJpbmdWYWx1ZVR5cGUnLFxyXG4gIFNlbGVjdGlvblN0cmluZ1ZhbHVlVHlwZSA9ICdTZWxlY3Rpb25TdHJpbmdWYWx1ZVR5cGUnLFxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1mZWF0dXJlLW1hbmFnZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnYWJwRmVhdHVyZU1hbmFnZW1lbnQnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgICBGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudElucHV0cyxcclxuICAgIEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVNYW5hZ2VtZW50Q29tcG9uZW50T3V0cHV0c1xyXG57XHJcbiAgQElucHV0KClcclxuICBwcm92aWRlcktleTogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwRGlzcGxheU5hbWU6IHN0cmluZztcclxuXHJcbiAgZ3JvdXBzOiBQaWNrPEZlYXR1cmVHcm91cER0bywgJ25hbWUnIHwgJ2Rpc3BsYXlOYW1lJz5bXSA9IFtdO1xyXG5cclxuICBmZWF0dXJlczoge1xyXG4gICAgW2dyb3VwOiBzdHJpbmddOiBBcnJheTxGZWF0dXJlRHRvICYgeyBzdHlsZT86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07IGluaXRpYWxWYWx1ZTogYW55IH0+O1xyXG4gIH07XHJcblxyXG4gIHZhbHVlVHlwZXMgPSBWYWx1ZVR5cGVzO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Zpc2libGU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fdmlzaWJsZSA9PT0gdmFsdWUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICBpZiAodmFsdWUpIHRoaXMub3Blbk1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgbW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRyYWNrOiBUcmFja0J5U2VydmljZSxcclxuICAgIHByb3RlY3RlZCBzZXJ2aWNlOiBGZWF0dXJlc1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm92aWRlck5hbWUgaXMgcmVxdWlyZWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRGZWF0dXJlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZXMoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKCFyZXMuZ3JvdXBzPy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgdGhpcy5ncm91cHMgPSByZXMuZ3JvdXBzLm1hcCgoeyBuYW1lLCBkaXNwbGF5TmFtZSB9KSA9PiAoeyBuYW1lLCBkaXNwbGF5TmFtZSB9KSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lID0gdGhpcy5ncm91cHNbMF0uZGlzcGxheU5hbWU7XHJcbiAgICAgIHRoaXMuZmVhdHVyZXMgPSByZXMuZ3JvdXBzLnJlZHVjZShcclxuICAgICAgICAoYWNjLCB2YWwpID0+ICh7XHJcbiAgICAgICAgICAuLi5hY2MsXHJcbiAgICAgICAgICBbdmFsLm5hbWVdOiBtYXBGZWF0dXJlcyh2YWwuZmVhdHVyZXMsIGRvY3VtZW50LmJvZHkuZGlyIGFzIExvY2FsZURpcmVjdGlvbiksXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAge30sXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RhbEJ1c3kpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjaGFuZ2VkRmVhdHVyZXMgPSBbXSBhcyBVcGRhdGVGZWF0dXJlRHRvW107XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mZWF0dXJlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICB0aGlzLmZlYXR1cmVzW2tleV0uZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgICBpZiAoZmVhdHVyZS52YWx1ZSAhPT0gZmVhdHVyZS5pbml0aWFsVmFsdWUpXHJcbiAgICAgICAgICBjaGFuZ2VkRmVhdHVyZXMucHVzaCh7IG5hbWU6IGZlYXR1cmUubmFtZSwgdmFsdWU6IGAke2ZlYXR1cmUudmFsdWV9YCB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWNoYW5nZWRGZWF0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGFsQnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLnVwZGF0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSwgeyBmZWF0dXJlczogY2hhbmdlZEZlYXR1cmVzIH0pXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLm1vZGFsQnVzeSA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucHJvdmlkZXJLZXkpIHtcclxuICAgICAgICAgIC8vIHRvIHJlZnJlc2ggaG9zdCdzIGZlYXR1cmVzXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrYm94Q2xpY2sodmFsOiBib29sZWFuLCBmZWF0dXJlOiBGZWF0dXJlRHRvKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tUb2dnbGVBbmNlc3RvcnMoZmVhdHVyZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVuY2hlY2tUb2dnbGVEZXNjZW5kYW50cyhmZWF0dXJlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5jaGVja1RvZ2dsZURlc2NlbmRhbnRzKGZlYXR1cmU6IEZlYXR1cmVEdG8pIHtcclxuICAgIHRoaXMuZmluZEFsbERlc2NlbmRhbnRzT2ZCeVR5cGUoZmVhdHVyZSwgVmFsdWVUeXBlcy5Ub2dnbGVTdHJpbmdWYWx1ZVR5cGUpLmZvckVhY2gobm9kZSA9PlxyXG4gICAgICB0aGlzLnNldEZlYXR1cmVWYWx1ZShub2RlLCBmYWxzZSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1RvZ2dsZUFuY2VzdG9ycyhmZWF0dXJlOiBGZWF0dXJlRHRvKSB7XHJcbiAgICB0aGlzLmZpbmRBbGxBbmNlc3RvcnNPZkJ5VHlwZShmZWF0dXJlLCBWYWx1ZVR5cGVzLlRvZ2dsZVN0cmluZ1ZhbHVlVHlwZSkuZm9yRWFjaChub2RlID0+XHJcbiAgICAgIHRoaXMuc2V0RmVhdHVyZVZhbHVlKG5vZGUsIHRydWUpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZEFsbEFuY2VzdG9yc09mQnlUeXBlKGZlYXR1cmU6IEZlYXR1cmVEdG8sIHR5cGU6IFZhbHVlVHlwZXMpIHtcclxuICAgIGxldCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnRCeVR5cGUoZmVhdHVyZSwgdHlwZSk7XHJcbiAgICBjb25zdCBhbmNlc3RvcnMgPSBbXTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgYW5jZXN0b3JzLnB1c2gocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50QnlUeXBlKHBhcmVudCwgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYW5jZXN0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQWxsRGVzY2VuZGFudHNPZkJ5VHlwZShmZWF0dXJlOiBGZWF0dXJlRHRvLCB0eXBlOiBWYWx1ZVR5cGVzKSB7XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IFtdO1xyXG4gICAgY29uc3QgcXVldWUgPSBbZmVhdHVyZV07XHJcblxyXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBub2RlID0gcXVldWUucG9wKCk7XHJcbiAgICAgIGNvbnN0IG5ld0Rlc2NlbmRhbnRzID0gdGhpcy5maW5kQ2hpbGRyZW5CeVR5cGUobm9kZSwgdHlwZSk7XHJcbiAgICAgIGRlc2NlbmRhbnRzLnB1c2goLi4ubmV3RGVzY2VuZGFudHMpO1xyXG4gICAgICBxdWV1ZS5wdXNoKC4uLm5ld0Rlc2NlbmRhbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVzY2VuZGFudHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRQYXJlbnRCeVR5cGUoZmVhdHVyZTogRmVhdHVyZUR0bywgdHlwZTogVmFsdWVUeXBlcykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudEdyb3VwKCkuZmluZChcclxuICAgICAgZiA9PiBmLnZhbHVlVHlwZS5uYW1lID09PSB0eXBlICYmIGYubmFtZSA9PT0gZmVhdHVyZS5wYXJlbnROYW1lLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENoaWxkcmVuQnlUeXBlKGZlYXR1cmU6IEZlYXR1cmVEdG8sIHR5cGU6IFZhbHVlVHlwZXMpIHtcclxuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRHcm91cCgpLmZpbHRlcihcclxuICAgICAgZiA9PiBmLnZhbHVlVHlwZS5uYW1lID09PSB0eXBlICYmIGYucGFyZW50TmFtZSA9PT0gZmVhdHVyZS5uYW1lLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q3VycmVudEdyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZXNbdGhpcy5zZWxlY3RlZEdyb3VwRGlzcGxheU5hbWVdID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGZWF0dXJlVmFsdWUoZmVhdHVyZTogRmVhdHVyZUR0bywgdmFsOiBib29sZWFuKSB7XHJcbiAgICBmZWF0dXJlLnZhbHVlID0gdmFsIGFzIGFueTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hcEZlYXR1cmVzKGZlYXR1cmVzOiBGZWF0dXJlRHRvW10sIGRpcjogTG9jYWxlRGlyZWN0aW9uKSB7XHJcbiAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0ke2RpciA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnfS5weGA7XHJcblxyXG4gIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9XHJcbiAgICAgIGZlYXR1cmUudmFsdWVUeXBlPy5uYW1lID09PSBWYWx1ZVR5cGVzLlRvZ2dsZVN0cmluZ1ZhbHVlVHlwZVxyXG4gICAgICAgID8gKGZlYXR1cmUudmFsdWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xyXG4gICAgICAgIDogZmVhdHVyZS52YWx1ZTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5mZWF0dXJlLFxyXG4gICAgICB2YWx1ZSxcclxuICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcclxuICAgICAgc3R5bGU6IHsgW21hcmdpbl06IGZlYXR1cmUuZGVwdGggKiAyMCB9LFxyXG4gICAgfTtcclxuICB9KTtcclxufVxyXG4iLCI8YWJwLW1vZGFsICpuZ0lmPVwidmlzaWJsZVwiIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtidXN5XT1cIm1vZGFsQnVzeVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpGZWF0dXJlcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgPHVsXHJcbiAgICAgICAgICBuZ2JOYXZcclxuICAgICAgICAgICNuYXY9XCJuZ2JOYXZcIlxyXG4gICAgICAgICAgWyhhY3RpdmVJZCldPVwic2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lXCJcclxuICAgICAgICAgIGNsYXNzPVwibmF2LXBpbGxzXCJcclxuICAgICAgICAgIG9yaWVudGF0aW9uPVwidmVydGljYWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzOyB0cmFja0J5OiB0cmFjay5ieSgnbmFtZScpXCJcclxuICAgICAgICAgICAgW25nYk5hdkl0ZW1dPVwiZ3JvdXAuZGlzcGxheU5hbWVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPnt7IGdyb3VwLmRpc3BsYXlOYW1lIH19PC9hPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICA8aDQ+e3sgc2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lIH19PC9oND5cclxuICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJtdC0yIG1iLTNcIiAvPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZlYXR1cmUgb2YgZmVhdHVyZXNbZ3JvdXAubmFtZV07IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrLmJ5KCdpZCcpXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImZlYXR1cmUuc3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImZlYXR1cmUudmFsdWVUeXBlPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInZhbHVlVHlwZXMuVG9nZ2xlU3RyaW5nVmFsdWVUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJmZWF0dXJlLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmZWF0dXJlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDbGljaygkZXZlbnQsIGZlYXR1cmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2h0bWxGb3JdPVwiZmVhdHVyZS5uYW1lXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZGlzcGxheU5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNjVG1wOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmVhdHVyZS5kZXNjcmlwdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ2YWx1ZVR5cGVzLkZyZWVUZXh0U3RyaW5nVmFsdWVUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2h0bWxGb3JdPVwiZmVhdHVyZS5uYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZGlzcGxheU5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZmVhdHVyZS5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmVhdHVyZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWJwRmVhdHVyZU1hbmFnZW1lbnRGcmVlVGV4dF09XCJmZWF0dXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRlc2NUbXA7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmZWF0dXJlLmRlc2NyaXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInZhbHVlVHlwZXMuU2VsZWN0aW9uU3RyaW5nVmFsdWVUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZWF0dXJlLnZhbHVlVHlwZS5pdGVtU291cmNlPy5pdGVtcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtodG1sRm9yXT1cImZlYXR1cmUubmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZGlzcGxheU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFtpZF09XCJmZWF0dXJlLm5hbWVcIiBbKG5nTW9kZWwpXT1cImZlYXR1cmUudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZmVhdHVyZS52YWx1ZVR5cGUuaXRlbVNvdXJjZT8uaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFjay5ieSgndmFsdWUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNwbGF5VGV4dD8ucmVzb3VyY2VOYW1lICsgJzo6JyArIGl0ZW0uZGlzcGxheVRleHQ/Lm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRlc2NUbXA7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmZWF0dXJlLmRlc2NyaXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0Pnt7IGZlYXR1cmUuZGlzcGxheU5hbWUgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Rlc2NUbXAgbGV0LWRlc2NyaXB0aW9uPlxyXG4gICAgICAgIDxzbWFsbCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJkLWJsb2NrIGZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+e3sgZGVzY3JpcHRpb24gfX08L3NtYWxsPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+PGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PjwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm14LTNcIiAqbmdJZj1cIiFncm91cHMubGVuZ3RoXCI+XHJcbiAgICAgICAge3sgJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpOb0ZlYXR1cmVGb3VuZE1lc3NhZ2UnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIGFicENsb3NlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCI+XHJcbiAgICAgIHt7ICdBYnBGZWF0dXJlTWFuYWdlbWVudDo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YWJwLWJ1dHRvblxyXG4gICAgICAqbmdJZj1cImdyb3Vwcy5sZW5ndGhcIlxyXG4gICAgICBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEJ1c3lcIlxyXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgID5cclxuICAgICAge3sgJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9hYnAtYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG4iXX0=
1
+ import { ConfigStateService, TrackByService } from '@abp/ng.core';
2
+ import { FeaturesService, } from '@abp/ng.feature-management/proxy';
3
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
4
+ import { finalize } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@abp/ng.core";
7
+ import * as i2 from "@abp/ng.feature-management/proxy";
8
+ import * as i3 from "@abp/ng.theme.shared";
9
+ import * as i4 from "@ng-bootstrap/ng-bootstrap";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@angular/forms";
12
+ import * as i7 from "../../directives/free-text-input.directive";
13
+ var ValueTypes;
14
+ (function (ValueTypes) {
15
+ ValueTypes["ToggleStringValueType"] = "ToggleStringValueType";
16
+ ValueTypes["FreeTextStringValueType"] = "FreeTextStringValueType";
17
+ ValueTypes["SelectionStringValueType"] = "SelectionStringValueType";
18
+ })(ValueTypes || (ValueTypes = {}));
19
+ export class FeatureManagementComponent {
20
+ constructor(track, service, configState) {
21
+ this.track = track;
22
+ this.service = service;
23
+ this.configState = configState;
24
+ this.groups = [];
25
+ this.valueTypes = ValueTypes;
26
+ this.visibleChange = new EventEmitter();
27
+ this.modalBusy = false;
28
+ }
29
+ get visible() {
30
+ return this._visible;
31
+ }
32
+ set visible(value) {
33
+ if (this._visible === value)
34
+ return;
35
+ this._visible = value;
36
+ this.visibleChange.emit(value);
37
+ if (value)
38
+ this.openModal();
39
+ }
40
+ openModal() {
41
+ if (!this.providerName) {
42
+ throw new Error('providerName is required.');
43
+ }
44
+ this.getFeatures();
45
+ }
46
+ getFeatures() {
47
+ this.service.get(this.providerName, this.providerKey).subscribe(res => {
48
+ var _a;
49
+ if (!((_a = res.groups) === null || _a === void 0 ? void 0 : _a.length))
50
+ return;
51
+ this.groups = res.groups.map(({ name, displayName }) => ({ name, displayName }));
52
+ this.selectedGroupDisplayName = this.groups[0].displayName;
53
+ this.features = res.groups.reduce((acc, val) => (Object.assign(Object.assign({}, acc), { [val.name]: mapFeatures(val.features, document.body.dir) })), {});
54
+ });
55
+ }
56
+ save() {
57
+ if (this.modalBusy)
58
+ return;
59
+ const changedFeatures = [];
60
+ Object.keys(this.features).forEach(key => {
61
+ this.features[key].forEach(feature => {
62
+ if (feature.value !== feature.initialValue)
63
+ changedFeatures.push({ name: feature.name, value: `${feature.value}` });
64
+ });
65
+ });
66
+ if (!changedFeatures.length) {
67
+ this.visible = false;
68
+ return;
69
+ }
70
+ this.modalBusy = true;
71
+ this.service
72
+ .update(this.providerName, this.providerKey, { features: changedFeatures })
73
+ .pipe(finalize(() => (this.modalBusy = false)))
74
+ .subscribe(() => {
75
+ this.visible = false;
76
+ if (!this.providerKey) {
77
+ // to refresh host's features
78
+ this.configState.refreshAppState().subscribe();
79
+ }
80
+ });
81
+ }
82
+ onCheckboxClick(val, feature) {
83
+ if (val) {
84
+ this.checkToggleAncestors(feature);
85
+ }
86
+ else {
87
+ this.uncheckToggleDescendants(feature);
88
+ }
89
+ }
90
+ uncheckToggleDescendants(feature) {
91
+ this.findAllDescendantsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => this.setFeatureValue(node, false));
92
+ }
93
+ checkToggleAncestors(feature) {
94
+ this.findAllAncestorsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => this.setFeatureValue(node, true));
95
+ }
96
+ findAllAncestorsOfByType(feature, type) {
97
+ let parent = this.findParentByType(feature, type);
98
+ const ancestors = [];
99
+ while (parent) {
100
+ ancestors.push(parent);
101
+ parent = this.findParentByType(parent, type);
102
+ }
103
+ return ancestors;
104
+ }
105
+ findAllDescendantsOfByType(feature, type) {
106
+ const descendants = [];
107
+ const queue = [feature];
108
+ while (queue.length) {
109
+ const node = queue.pop();
110
+ const newDescendants = this.findChildrenByType(node, type);
111
+ descendants.push(...newDescendants);
112
+ queue.push(...newDescendants);
113
+ }
114
+ return descendants;
115
+ }
116
+ findParentByType(feature, type) {
117
+ return this.getCurrentGroup().find(f => f.valueType.name === type && f.name === feature.parentName);
118
+ }
119
+ findChildrenByType(feature, type) {
120
+ return this.getCurrentGroup().filter(f => f.valueType.name === type && f.parentName === feature.name);
121
+ }
122
+ getCurrentGroup() {
123
+ var _a;
124
+ return (_a = this.features[this.selectedGroupDisplayName]) !== null && _a !== void 0 ? _a : [];
125
+ }
126
+ setFeatureValue(feature, val) {
127
+ feature.value = val;
128
+ }
129
+ }
130
+ FeatureManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FeatureManagementComponent, deps: [{ token: i1.TrackByService }, { token: i2.FeaturesService }, { token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
131
+ FeatureManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: FeatureManagementComponent, selector: "abp-feature-management", inputs: { providerKey: "providerKey", providerName: "providerName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, exportAs: ["abpFeatureManagement"], ngImport: i0, template: "<abp-modal *ngIf=\"visible\" [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ 'AbpFeatureManagement::Features' | abpLocalization }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <ul\n ngbNav\n #nav=\"ngbNav\"\n [(activeId)]=\"selectedGroupDisplayName\"\n class=\"nav-pills\"\n orientation=\"vertical\"\n >\n <li\n *ngFor=\"let group of groups; trackBy: track.by('name')\"\n [ngbNavItem]=\"group.displayName\"\n >\n <a ngbNavLink>{{ group.displayName }}</a>\n <ng-template ngbNavContent>\n <h4>{{ selectedGroupDisplayName }}</h4>\n <hr class=\"mt-2 mb-3\" />\n\n <div\n class=\"mt-2\"\n *ngFor=\"let feature of features[group.name]; let i = index; trackBy: track.by('id')\"\n [ngStyle]=\"feature.style\"\n [ngSwitch]=\"feature.valueType?.name\"\n (keyup.enter)=\"save()\"\n >\n <ng-container *ngSwitchCase=\"valueTypes.ToggleStringValueType\">\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [id]=\"feature.name\"\n [(ngModel)]=\"feature.value\"\n (ngModelChange)=\"onCheckboxClick($event, feature)\"\n />\n\n <label class=\"form-check-label\" [htmlFor]=\"feature.name\">{{\n feature.displayName\n }}</label>\n <ng-container\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\n ></ng-container>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"valueTypes.FreeTextStringValueType\">\n <div class=\"mb-3 form-group\">\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\n feature.displayName\n }}</label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"feature.name\"\n [(ngModel)]=\"feature.value\"\n [abpFeatureManagementFreeText]=\"feature\"\n />\n\n <ng-container\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\n ></ng-container>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"valueTypes.SelectionStringValueType\">\n <ng-container *ngIf=\"feature.valueType.itemSource?.items?.length\">\n <div class=\"mb-3 form-group\">\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\n feature.displayName\n }}</label>\n <select class=\"form-select\" [id]=\"feature.name\" [(ngModel)]=\"feature.value\">\n <option\n *ngFor=\"\n let item of feature.valueType.itemSource?.items;\n trackBy: track.by('value')\n \"\n [ngValue]=\"item.value\"\n >\n {{\n item.displayText?.resourceName + '::' + item.displayText?.name\n | abpLocalization\n }}\n </option>\n </select>\n <ng-container\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\n ></ng-container>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>{{ feature.displayName }}</ng-container>\n </div>\n </ng-template>\n </li>\n </ul>\n </div>\n\n <ng-template #descTmp let-description>\n <small *ngIf=\"description\" class=\"d-block form-text text-muted\">{{ description }}</small>\n </ng-template>\n\n <div class=\"col-md-8\"><div [ngbNavOutlet]=\"nav\"></div></div>\n\n <div class=\"mx-3\" *ngIf=\"!groups.length\">\n {{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }}\n </div>\n </div>\n </ng-template>\n\n <ng-template #abpFooter>\n <button abpClose type=\"button\" class=\"btn btn-secondary\">\n {{ 'AbpFeatureManagement::Cancel' | abpLocalization }}\n </button>\n <abp-button\n *ngIf=\"groups.length\"\n iconClass=\"fa fa-check\"\n [disabled]=\"modalBusy\"\n (click)=\"save()\"\n >\n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n </abp-button>\n </ng-template>\n</abp-modal>\n", components: [{ type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { type: i4.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgbNav, selector: "[ngbNav]", inputs: ["animation", "destroyOnHide", "orientation", "roles", "keyboard", "activeId"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgbNavItem, selector: "[ngbNavItem]", inputs: ["disabled", "domId", "destroyOnHide", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { type: i4.NgbNavLink, selector: "a[ngbNavLink]" }, { type: i4.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.FreeTextInputDirective, selector: "input[abpFeatureManagementFreeText]", inputs: ["abpFeatureManagementFreeText"], exportAs: ["inputAbpFeatureManagementFreeText"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3.ModalCloseDirective, selector: "[abpClose]" }], pipes: { "abpLocalization": i1.LocalizationPipe } });
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FeatureManagementComponent, decorators: [{
133
+ type: Component,
134
+ args: [{
135
+ selector: 'abp-feature-management',
136
+ templateUrl: './feature-management.component.html',
137
+ exportAs: 'abpFeatureManagement',
138
+ }]
139
+ }], ctorParameters: function () { return [{ type: i1.TrackByService }, { type: i2.FeaturesService }, { type: i1.ConfigStateService }]; }, propDecorators: { providerKey: [{
140
+ type: Input
141
+ }], providerName: [{
142
+ type: Input
143
+ }], visible: [{
144
+ type: Input
145
+ }], visibleChange: [{
146
+ type: Output
147
+ }] } });
148
+ function mapFeatures(features, dir) {
149
+ const margin = `margin-${dir === 'rtl' ? 'right' : 'left'}.px`;
150
+ return features.map(feature => {
151
+ var _a;
152
+ const value = ((_a = feature.valueType) === null || _a === void 0 ? void 0 : _a.name) === ValueTypes.ToggleStringValueType
153
+ ? (feature.value || '').toLowerCase() === 'true'
154
+ : feature.value;
155
+ return Object.assign(Object.assign({}, feature), { value, initialValue: value, style: { [margin]: feature.depth * 20 } });
156
+ });
157
+ }
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBR0wsZUFBZSxHQUVoQixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFHMUMsSUFBSyxVQUlKO0FBSkQsV0FBSyxVQUFVO0lBQ2IsNkRBQStDLENBQUE7SUFDL0MsaUVBQW1ELENBQUE7SUFDbkQsbUVBQXFELENBQUE7QUFDdkQsQ0FBQyxFQUpJLFVBQVUsS0FBVixVQUFVLFFBSWQ7QUFPRCxNQUFNLE9BQU8sMEJBQTBCO0lBd0NyQyxZQUNrQixLQUFxQixFQUMzQixPQUF3QixFQUN4QixXQUErQjtRQUZ6QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUE5QjNDLFdBQU0sR0FBb0QsRUFBRSxDQUFDO1FBTTdELGVBQVUsR0FBRyxVQUFVLENBQUM7UUFpQkwsa0JBQWEs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QUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxJQUN2QztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgVHJhY2tCeVNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHtcbiAgRmVhdHVyZUR0byxcbiAgRmVhdHVyZUdyb3VwRHRvLFxuICBGZWF0dXJlc1NlcnZpY2UsXG4gIFVwZGF0ZUZlYXR1cmVEdG8sXG59IGZyb20gJ0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50L3Byb3h5JztcbmltcG9ydCB7IExvY2FsZURpcmVjdGlvbiB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZlYXR1cmVNYW5hZ2VtZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZlYXR1cmUtbWFuYWdlbWVudCc7XG5cbmVudW0gVmFsdWVUeXBlcyB7XG4gIFRvZ2dsZVN0cmluZ1ZhbHVlVHlwZSA9ICdUb2dnbGVTdHJpbmdWYWx1ZVR5cGUnLFxuICBGcmVlVGV4dFN0cmluZ1ZhbHVlVHlwZSA9ICdGcmVlVGV4dFN0cmluZ1ZhbHVlVHlwZScsXG4gIFNlbGVjdGlvblN0cmluZ1ZhbHVlVHlwZSA9ICdTZWxlY3Rpb25TdHJpbmdWYWx1ZVR5cGUnLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhYnAtZmVhdHVyZS1tYW5hZ2VtZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQuaHRtbCcsXG4gIGV4cG9ydEFzOiAnYWJwRmVhdHVyZU1hbmFnZW1lbnQnLFxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gICAgRmVhdHVyZU1hbmFnZW1lbnQuRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXG4gICAgRmVhdHVyZU1hbmFnZW1lbnQuRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnRPdXRwdXRzXG57XG4gIEBJbnB1dCgpXG4gIHByb3ZpZGVyS2V5OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XG5cbiAgc2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lOiBzdHJpbmc7XG5cbiAgZ3JvdXBzOiBQaWNrPEZlYXR1cmVHcm91cER0bywgJ25hbWUnIHwgJ2Rpc3BsYXlOYW1lJz5bXSA9IFtdO1xuXG4gIGZlYXR1cmVzOiB7XG4gICAgW2dyb3VwOiBzdHJpbmddOiBBcnJheTxGZWF0dXJlRHRvICYgeyBzdHlsZT86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07IGluaXRpYWxWYWx1ZTogYW55IH0+O1xuICB9O1xuXG4gIHZhbHVlVHlwZXMgPSBWYWx1ZVR5cGVzO1xuXG4gIHByb3RlY3RlZCBfdmlzaWJsZTtcblxuICBASW5wdXQoKVxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgfVxuXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3Zpc2libGUgPT09IHZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIGlmICh2YWx1ZSkgdGhpcy5vcGVuTW9kYWwoKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIG1vZGFsQnVzeSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB0cmFjazogVHJhY2tCeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNlcnZpY2U6IEZlYXR1cmVzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcbiAgKSB7fVxuXG4gIG9wZW5Nb2RhbCgpIHtcbiAgICBpZiAoIXRoaXMucHJvdmlkZXJOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3ZpZGVyTmFtZSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmdldEZlYXR1cmVzKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlcygpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmICghcmVzLmdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XG4gICAgICB0aGlzLmdyb3VwcyA9IHJlcy5ncm91cHMubWFwKCh7IG5hbWUsIGRpc3BsYXlOYW1lIH0pID0+ICh7IG5hbWUsIGRpc3BsYXlOYW1lIH0pKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lID0gdGhpcy5ncm91cHNbMF0uZGlzcGxheU5hbWU7XG4gICAgICB0aGlzLmZlYXR1cmVzID0gcmVzLmdyb3Vwcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHZhbCkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW3ZhbC5uYW1lXTogbWFwRmVhdHVyZXModmFsLmZlYXR1cmVzLCBkb2N1bWVudC5ib2R5LmRpciBhcyBMb2NhbGVEaXJlY3Rpb24pLFxuICAgICAgICB9KSxcbiAgICAgICAge30sXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICBpZiAodGhpcy5tb2RhbEJ1c3kpIHJldHVybjtcblxuICAgIGNvbnN0IGNoYW5nZWRGZWF0dXJlcyA9IFtdIGFzIFVwZGF0ZUZlYXR1cmVEdG9bXTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmVhdHVyZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuZmVhdHVyZXNba2V5XS5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICBpZiAoZmVhdHVyZS52YWx1ZSAhPT0gZmVhdHVyZS5pbml0aWFsVmFsdWUpXG4gICAgICAgICAgY2hhbmdlZEZlYXR1cmVzLnB1c2goeyBuYW1lOiBmZWF0dXJlLm5hbWUsIHZhbHVlOiBgJHtmZWF0dXJlLnZhbHVlfWAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICghY2hhbmdlZEZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZVxuICAgICAgLnVwZGF0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSwgeyBmZWF0dXJlczogY2hhbmdlZEZlYXR1cmVzIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5wcm92aWRlcktleSkge1xuICAgICAgICAgIC8vIHRvIHJlZnJlc2ggaG9zdCdzIGZlYXR1cmVzXG4gICAgICAgICAgdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvbkNoZWNrYm94Q2xpY2sodmFsOiBib29sZWFuLCBmZWF0dXJlOiBGZWF0dXJlRHRvKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5jaGVja1RvZ2dsZUFuY2VzdG9ycyhmZWF0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bmNoZWNrVG9nZ2xlRGVzY2VuZGFudHMoZmVhdHVyZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bmNoZWNrVG9nZ2xlRGVzY2VuZGFudHMoZmVhdHVyZTogRmVhdHVyZUR0bykge1xuICAgIHRoaXMuZmluZEFsbERlc2NlbmRhbnRzT2ZCeVR5cGUoZmVhdHVyZSwgVmFsdWVUeXBlcy5Ub2dnbGVTdHJpbmdWYWx1ZVR5cGUpLmZvckVhY2gobm9kZSA9PlxuICAgICAgdGhpcy5zZXRGZWF0dXJlVmFsdWUobm9kZSwgZmFsc2UpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVG9nZ2xlQW5jZXN0b3JzKGZlYXR1cmU6IEZlYXR1cmVEdG8pIHtcbiAgICB0aGlzLmZpbmRBbGxBbmNlc3RvcnNPZkJ5VHlwZShmZWF0dXJlLCBWYWx1ZVR5cGVzLlRvZ2dsZVN0cmluZ1ZhbHVlVHlwZSkuZm9yRWFjaChub2RlID0+XG4gICAgICB0aGlzLnNldEZlYXR1cmVWYWx1ZShub2RlLCB0cnVlKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQWxsQW5jZXN0b3JzT2ZCeVR5cGUoZmVhdHVyZTogRmVhdHVyZUR0bywgdHlwZTogVmFsdWVUeXBlcykge1xuICAgIGxldCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnRCeVR5cGUoZmVhdHVyZSwgdHlwZSk7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gW107XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgYW5jZXN0b3JzLnB1c2gocGFyZW50KTtcbiAgICAgIHBhcmVudCA9IHRoaXMuZmluZFBhcmVudEJ5VHlwZShwYXJlbnQsIHR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JzO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQWxsRGVzY2VuZGFudHNPZkJ5VHlwZShmZWF0dXJlOiBGZWF0dXJlRHRvLCB0eXBlOiBWYWx1ZVR5cGVzKSB7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSBbXTtcbiAgICBjb25zdCBxdWV1ZSA9IFtmZWF0dXJlXTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGNvbnN0IG5ld0Rlc2NlbmRhbnRzID0gdGhpcy5maW5kQ2hpbGRyZW5CeVR5cGUobm9kZSwgdHlwZSk7XG4gICAgICBkZXNjZW5kYW50cy5wdXNoKC4uLm5ld0Rlc2NlbmRhbnRzKTtcbiAgICAgIHF1ZXVlLnB1c2goLi4ubmV3RGVzY2VuZGFudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBkZXNjZW5kYW50cztcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudEJ5VHlwZShmZWF0dXJlOiBGZWF0dXJlRHRvLCB0eXBlOiBWYWx1ZVR5cGVzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudEdyb3VwKCkuZmluZChcbiAgICAgIGYgPT4gZi52YWx1ZVR5cGUubmFtZSA9PT0gdHlwZSAmJiBmLm5hbWUgPT09IGZlYXR1cmUucGFyZW50TmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ2hpbGRyZW5CeVR5cGUoZmVhdHVyZTogRmVhdHVyZUR0bywgdHlwZTogVmFsdWVUeXBlcykge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRHcm91cCgpLmZpbHRlcihcbiAgICAgIGYgPT4gZi52YWx1ZVR5cGUubmFtZSA9PT0gdHlwZSAmJiBmLnBhcmVudE5hbWUgPT09IGZlYXR1cmUubmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50R3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZXNbdGhpcy5zZWxlY3RlZEdyb3VwRGlzcGxheU5hbWVdID8/IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGZWF0dXJlVmFsdWUoZmVhdHVyZTogRmVhdHVyZUR0bywgdmFsOiBib29sZWFuKSB7XG4gICAgZmVhdHVyZS52YWx1ZSA9IHZhbCBhcyBhbnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwRmVhdHVyZXMoZmVhdHVyZXM6IEZlYXR1cmVEdG9bXSwgZGlyOiBMb2NhbGVEaXJlY3Rpb24pIHtcbiAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0ke2RpciA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnfS5weGA7XG5cbiAgcmV0dXJuIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICBmZWF0dXJlLnZhbHVlVHlwZT8ubmFtZSA9PT0gVmFsdWVUeXBlcy5Ub2dnbGVTdHJpbmdWYWx1ZVR5cGVcbiAgICAgICAgPyAoZmVhdHVyZS52YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gICAgICAgIDogZmVhdHVyZS52YWx1ZTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgdmFsdWUsXG4gICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgc3R5bGU6IHsgW21hcmdpbl06IGZlYXR1cmUuZGVwdGggKiAyMCB9LFxuICAgIH07XG4gIH0pO1xufVxuIiwiPGFicC1tb2RhbCAqbmdJZj1cInZpc2libGVcIiBbKHZpc2libGUpXT1cInZpc2libGVcIiBbYnVzeV09XCJtb2RhbEJ1c3lcIiBbb3B0aW9uc109XCJ7IHNpemU6ICdsZycgfVwiPlxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICA8aDM+e3sgJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpGZWF0dXJlcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2gzPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgPHVsXG4gICAgICAgICAgbmdiTmF2XG4gICAgICAgICAgI25hdj1cIm5nYk5hdlwiXG4gICAgICAgICAgWyhhY3RpdmVJZCldPVwic2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lXCJcbiAgICAgICAgICBjbGFzcz1cIm5hdi1waWxsc1wiXG4gICAgICAgICAgb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHM7IHRyYWNrQnk6IHRyYWNrLmJ5KCduYW1lJylcIlxuICAgICAgICAgICAgW25nYk5hdkl0ZW1dPVwiZ3JvdXAuZGlzcGxheU5hbWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+e3sgZ3JvdXAuZGlzcGxheU5hbWUgfX08L2E+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cbiAgICAgICAgICAgICAgPGg0Pnt7IHNlbGVjdGVkR3JvdXBEaXNwbGF5TmFtZSB9fTwvaDQ+XG4gICAgICAgICAgICAgIDxociBjbGFzcz1cIm10LTIgbWItM1wiIC8+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMlwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZlYXR1cmUgb2YgZmVhdHVyZXNbZ3JvdXAubmFtZV07IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrLmJ5KCdpZCcpXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJmZWF0dXJlLnN0eWxlXCJcbiAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiZmVhdHVyZS52YWx1ZVR5cGU/Lm5hbWVcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidmFsdWVUeXBlcy5Ub2dnbGVTdHJpbmdWYWx1ZVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZmVhdHVyZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZlYXR1cmUudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDbGljaygkZXZlbnQsIGZlYXR1cmUpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2h0bWxGb3JdPVwiZmVhdHVyZS5uYW1lXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVzY1RtcDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZlYXR1cmUuZGVzY3JpcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInZhbHVlVHlwZXMuRnJlZVRleHRTdHJpbmdWYWx1ZVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtodG1sRm9yXT1cImZlYXR1cmUubmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5kaXNwbGF5TmFtZVxuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZlYXR1cmUubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmZWF0dXJlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYWJwRmVhdHVyZU1hbmFnZW1lbnRGcmVlVGV4dF09XCJmZWF0dXJlXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNjVG1wOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmVhdHVyZS5kZXNjcmlwdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidmFsdWVUeXBlcy5TZWxlY3Rpb25TdHJpbmdWYWx1ZVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZWF0dXJlLnZhbHVlVHlwZS5pdGVtU291cmNlPy5pdGVtcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2h0bWxGb3JdPVwiZmVhdHVyZS5uYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZGlzcGxheU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW2lkXT1cImZlYXR1cmUubmFtZVwiIFsobmdNb2RlbCldPVwiZmVhdHVyZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBmZWF0dXJlLnZhbHVlVHlwZS5pdGVtU291cmNlPy5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFjay5ieSgndmFsdWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc3BsYXlUZXh0Py5yZXNvdXJjZU5hbWUgKyAnOjonICsgaXRlbS5kaXNwbGF5VGV4dD8ubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYnBMb2NhbGl6YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVzY1RtcDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZlYXR1cmUuZGVzY3JpcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD57eyBmZWF0dXJlLmRpc3BsYXlOYW1lIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVzY1RtcCBsZXQtZGVzY3JpcHRpb24+XG4gICAgICAgIDxzbWFsbCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJkLWJsb2NrIGZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+e3sgZGVzY3JpcHRpb24gfX08L3NtYWxsPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+PGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PjwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXgtM1wiICpuZ0lmPVwiIWdyb3Vwcy5sZW5ndGhcIj5cbiAgICAgICAge3sgJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpOb0ZlYXR1cmVGb3VuZE1lc3NhZ2UnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cbiAgICA8YnV0dG9uIGFicENsb3NlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCI+XG4gICAgICB7eyAnQWJwRmVhdHVyZU1hbmFnZW1lbnQ6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YWJwLWJ1dHRvblxuICAgICAgKm5nSWY9XCJncm91cHMubGVuZ3RoXCJcbiAgICAgIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCJcbiAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEJ1c3lcIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgPlxuICAgICAge3sgJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxuICAgIDwvYWJwLWJ1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuIl19
@@ -1,2 +1,2 @@
1
- export * from './feature-management/feature-management.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50JztcclxuIl19
1
+ export * from './feature-management/feature-management.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50JztcbiJdfQ==
@@ -1,37 +1,37 @@
1
- import { Directive, HostBinding, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export const INPUT_TYPES = {
4
- numeric: 'number',
5
- default: 'text',
6
- };
7
- export class FreeTextInputDirective {
8
- // eslint-disable-next-line @angular-eslint/no-input-rename
9
- set feature(val) {
10
- this._feature = val;
11
- this.setInputType();
12
- }
13
- get feature() {
14
- return this._feature;
15
- }
16
- setInputType() {
17
- var _a, _b, _c, _d;
18
- const validatorType = (_c = (_b = (_a = this.feature) === null || _a === void 0 ? void 0 : _a.valueType) === null || _b === void 0 ? void 0 : _b.validator) === null || _c === void 0 ? void 0 : _c.name.toLowerCase();
19
- this.type = (_d = INPUT_TYPES[validatorType]) !== null && _d !== void 0 ? _d : INPUT_TYPES.default;
20
- }
21
- }
22
- FreeTextInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FreeTextInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
23
- FreeTextInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: FreeTextInputDirective, selector: "input[abpFeatureManagementFreeText]", inputs: { feature: ["abpFeatureManagementFreeText", "feature"] }, host: { properties: { "type": "this.type" } }, exportAs: ["inputAbpFeatureManagementFreeText"], ngImport: i0 });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FreeTextInputDirective, decorators: [{
25
- type: Directive,
26
- args: [{
27
- selector: 'input[abpFeatureManagementFreeText]',
28
- exportAs: 'inputAbpFeatureManagementFreeText',
29
- }]
30
- }], propDecorators: { feature: [{
31
- type: Input,
32
- args: ['abpFeatureManagementFreeText']
33
- }], type: [{
34
- type: HostBinding,
35
- args: ['type']
36
- }] } });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZS10ZXh0LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2RpcmVjdGl2ZXMvZnJlZS10ZXh0LWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVzlELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixPQUFPLEVBQUUsUUFBUTtJQUNqQixPQUFPLEVBQUUsTUFBTTtDQUNoQixDQUFDO0FBTUYsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQywyREFBMkQ7SUFDM0QsSUFBMkMsT0FBTyxDQUFDLEdBQWlCO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFJTyxZQUFZOztRQUNsQixNQUFNLGFBQWEsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxTQUFTLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBQSxXQUFXLENBQUMsYUFBYSxDQUFDLG1DQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDaEUsQ0FBQzs7b0hBakJVLHNCQUFzQjt3R0FBdEIsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFDQUFxQztvQkFDL0MsUUFBUSxFQUFFLG1DQUFtQztpQkFDOUM7OEJBSTRDLE9BQU87c0JBQWpELEtBQUs7dUJBQUMsOEJBQThCO2dCQVNoQixJQUFJO3NCQUF4QixXQUFXO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy8gVE9ETzogaW1wcm92ZSB0aGlzIHR5cGVcclxuZXhwb3J0IGludGVyZmFjZSBGcmVlVGV4dFR5cGUge1xyXG4gIHZhbHVlVHlwZToge1xyXG4gICAgdmFsaWRhdG9yOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZztcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IElOUFVUX1RZUEVTID0ge1xyXG4gIG51bWVyaWM6ICdudW1iZXInLFxyXG4gIGRlZmF1bHQ6ICd0ZXh0JyxcclxufTtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnaW5wdXRbYWJwRmVhdHVyZU1hbmFnZW1lbnRGcmVlVGV4dF0nLFxyXG4gIGV4cG9ydEFzOiAnaW5wdXRBYnBGZWF0dXJlTWFuYWdlbWVudEZyZWVUZXh0JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZyZWVUZXh0SW5wdXREaXJlY3RpdmUge1xyXG4gIF9mZWF0dXJlOiBGcmVlVGV4dFR5cGU7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcclxuICBASW5wdXQoJ2FicEZlYXR1cmVNYW5hZ2VtZW50RnJlZVRleHQnKSBzZXQgZmVhdHVyZSh2YWw6IEZyZWVUZXh0VHlwZSkge1xyXG4gICAgdGhpcy5fZmVhdHVyZSA9IHZhbDtcclxuICAgIHRoaXMuc2V0SW5wdXRUeXBlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmVhdHVyZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCd0eXBlJykgdHlwZTogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIHNldElucHV0VHlwZSgpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvclR5cGUgPSB0aGlzLmZlYXR1cmU/LnZhbHVlVHlwZT8udmFsaWRhdG9yPy5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnR5cGUgPSBJTlBVVF9UWVBFU1t2YWxpZGF0b3JUeXBlXSA/PyBJTlBVVF9UWVBFUy5kZWZhdWx0O1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Directive, HostBinding, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export const INPUT_TYPES = {
4
+ numeric: 'number',
5
+ default: 'text',
6
+ };
7
+ export class FreeTextInputDirective {
8
+ // eslint-disable-next-line @angular-eslint/no-input-rename
9
+ set feature(val) {
10
+ this._feature = val;
11
+ this.setInputType();
12
+ }
13
+ get feature() {
14
+ return this._feature;
15
+ }
16
+ setInputType() {
17
+ var _a, _b, _c, _d;
18
+ const validatorType = (_c = (_b = (_a = this.feature) === null || _a === void 0 ? void 0 : _a.valueType) === null || _b === void 0 ? void 0 : _b.validator) === null || _c === void 0 ? void 0 : _c.name.toLowerCase();
19
+ this.type = (_d = INPUT_TYPES[validatorType]) !== null && _d !== void 0 ? _d : INPUT_TYPES.default;
20
+ }
21
+ }
22
+ FreeTextInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FreeTextInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
23
+ FreeTextInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: FreeTextInputDirective, selector: "input[abpFeatureManagementFreeText]", inputs: { feature: ["abpFeatureManagementFreeText", "feature"] }, host: { properties: { "type": "this.type" } }, exportAs: ["inputAbpFeatureManagementFreeText"], ngImport: i0 });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: FreeTextInputDirective, decorators: [{
25
+ type: Directive,
26
+ args: [{
27
+ selector: 'input[abpFeatureManagementFreeText]',
28
+ exportAs: 'inputAbpFeatureManagementFreeText',
29
+ }]
30
+ }], propDecorators: { feature: [{
31
+ type: Input,
32
+ args: ['abpFeatureManagementFreeText']
33
+ }], type: [{
34
+ type: HostBinding,
35
+ args: ['type']
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZS10ZXh0LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2RpcmVjdGl2ZXMvZnJlZS10ZXh0LWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVzlELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixPQUFPLEVBQUUsUUFBUTtJQUNqQixPQUFPLEVBQUUsTUFBTTtDQUNoQixDQUFDO0FBTUYsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQywyREFBMkQ7SUFDM0QsSUFBMkMsT0FBTyxDQUFDLEdBQWlCO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFJTyxZQUFZOztRQUNsQixNQUFNLGFBQWEsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxTQUFTLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBQSxXQUFXLENBQUMsYUFBYSxDQUFDLG1DQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDaEUsQ0FBQzs7b0hBakJVLHNCQUFzQjt3R0FBdEIsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFDQUFxQztvQkFDL0MsUUFBUSxFQUFFLG1DQUFtQztpQkFDOUM7OEJBSTRDLE9BQU87c0JBQWpELEtBQUs7dUJBQUMsOEJBQThCO2dCQVNoQixJQUFJO3NCQUF4QixXQUFXO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBUT0RPOiBpbXByb3ZlIHRoaXMgdHlwZVxuZXhwb3J0IGludGVyZmFjZSBGcmVlVGV4dFR5cGUge1xuICB2YWx1ZVR5cGU6IHtcbiAgICB2YWxpZGF0b3I6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgSU5QVVRfVFlQRVMgPSB7XG4gIG51bWVyaWM6ICdudW1iZXInLFxuICBkZWZhdWx0OiAndGV4dCcsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dFthYnBGZWF0dXJlTWFuYWdlbWVudEZyZWVUZXh0XScsXG4gIGV4cG9ydEFzOiAnaW5wdXRBYnBGZWF0dXJlTWFuYWdlbWVudEZyZWVUZXh0Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnJlZVRleHRJbnB1dERpcmVjdGl2ZSB7XG4gIF9mZWF0dXJlOiBGcmVlVGV4dFR5cGU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnYWJwRmVhdHVyZU1hbmFnZW1lbnRGcmVlVGV4dCcpIHNldCBmZWF0dXJlKHZhbDogRnJlZVRleHRUeXBlKSB7XG4gICAgdGhpcy5fZmVhdHVyZSA9IHZhbDtcbiAgICB0aGlzLnNldElucHV0VHlwZSgpO1xuICB9XG5cbiAgZ2V0IGZlYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZlYXR1cmU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3R5cGUnKSB0eXBlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBzZXRJbnB1dFR5cGUoKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yVHlwZSA9IHRoaXMuZmVhdHVyZT8udmFsdWVUeXBlPy52YWxpZGF0b3I/Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnR5cGUgPSBJTlBVVF9UWVBFU1t2YWxpZGF0b3JUeXBlXSA/PyBJTlBVVF9UWVBFUy5kZWZhdWx0O1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
- export * from './free-text-input.directive';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZyZWUtdGV4dC1pbnB1dC5kaXJlY3RpdmUnO1xyXG4iXX0=
1
+ export * from './free-text-input.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZyZWUtdGV4dC1pbnB1dC5kaXJlY3RpdmUnO1xuIl19
@@ -1,2 +1,2 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2VudW1zL2NvbXBvbmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnVtIGVGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudHMge1xyXG4gIEZlYXR1cmVNYW5hZ2VtZW50ID0gJ0ZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVNYW5hZ2VtZW50Q29tcG9uZW50JyxcclxufVxyXG4iXX0=
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2VudW1zL2NvbXBvbmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnVtIGVGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudHMge1xuICBGZWF0dXJlTWFuYWdlbWVudCA9ICdGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudCcsXG59XG4iXX0=