ng-configcat-publicapi-ui 2.3.1 → 2.5.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/README.md +15 -15
- package/{esm2015/lib/_models/index.js → esm2020/lib/_models/index.mjs} +3 -3
- package/esm2020/lib/_models/settingValuesModel.mjs +2 -0
- package/{esm2015/lib/_models/updateSettingValuesModel.js → esm2020/lib/_models/updateSettingValuesModel.mjs} +2 -2
- package/esm2020/lib/_services/form-helper.mjs +21 -0
- package/{esm2015/lib/_services/index.js → esm2020/lib/_services/index.mjs} +2 -2
- package/esm2020/lib/_services/public-api.service.mjs +68 -0
- package/esm2020/lib/_services/setting-list-form-helper.mjs +152 -0
- package/esm2020/lib/authorization/authorization.component.mjs +50 -0
- package/esm2020/lib/base/base.component.mjs +45 -0
- package/esm2020/lib/configuration.mjs +13 -0
- package/esm2020/lib/dialogs/concurrent-dialog/concurrent-dialog.component.mjs +25 -0
- package/esm2020/lib/dialogs/expand-dialog/expand-dialog.component.mjs +77 -0
- package/esm2020/lib/dialogs/reason-dialog/reason-dialog.component.mjs +36 -0
- package/esm2020/lib/dialogs/save-snackbar/save-snackbar.component.mjs +14 -0
- package/esm2020/lib/ng-configcat-publicapi-ui.module.mjs +160 -0
- package/esm2020/lib/selects/config-select/config-select.component.mjs +56 -0
- package/esm2020/lib/selects/environment-select/environment-select.component.mjs +43 -0
- package/esm2020/lib/selects/product-select/product-select.component.mjs +36 -0
- package/esm2020/lib/selects/setting-select/setting-select.component.mjs +43 -0
- package/esm2020/lib/setting-item/setting-item.component.mjs +129 -0
- package/esm2020/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +81 -0
- package/esm2020/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +295 -0
- package/esm2020/lib/setting-list/setting/setting.component.mjs +137 -0
- package/esm2020/lib/setting-list/setting/value/value.component.mjs +32 -0
- package/esm2020/lib/setting-list/setting-list.component.mjs +200 -0
- package/esm2020/ng-configcat-publicapi-ui.mjs +5 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +12 -12
- package/fesm2015/ng-configcat-publicapi-ui.mjs +1588 -0
- package/fesm2015/ng-configcat-publicapi-ui.mjs.map +1 -0
- package/fesm2020/ng-configcat-publicapi-ui.mjs +1569 -0
- package/fesm2020/ng-configcat-publicapi-ui.mjs.map +1 -0
- package/lib/_models/index.d.ts +2 -2
- package/lib/_models/settingValuesModel.d.ts +11 -11
- package/lib/_models/updateSettingValuesModel.d.ts +7 -7
- package/lib/_services/form-helper.d.ts +4 -4
- package/lib/_services/index.d.ts +1 -1
- package/lib/_services/public-api.service.d.ts +19 -15
- package/lib/_services/setting-list-form-helper.d.ts +17 -14
- package/lib/authorization/authorization.component.d.ts +18 -15
- package/lib/base/base.component.d.ts +17 -13
- package/lib/configuration.d.ts +8 -5
- package/lib/dialogs/concurrent-dialog/concurrent-dialog.component.d.ts +12 -9
- package/lib/dialogs/expand-dialog/expand-dialog.component.d.ts +24 -20
- package/lib/dialogs/reason-dialog/reason-dialog.component.d.ts +15 -12
- package/lib/dialogs/save-snackbar/save-snackbar.component.d.ts +8 -5
- package/lib/ng-configcat-publicapi-ui.module.d.ts +44 -6
- package/lib/selects/config-select/config-select.component.d.ts +17 -14
- package/lib/selects/environment-select/environment-select.component.d.ts +17 -14
- package/lib/selects/product-select/product-select.component.d.ts +14 -11
- package/lib/selects/setting-select/setting-select.component.d.ts +17 -14
- package/lib/setting-item/setting-item.component.d.ts +37 -31
- package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +27 -22
- package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +60 -46
- package/lib/setting-list/setting/setting.component.d.ts +43 -37
- package/lib/setting-list/setting/value/value.component.d.ts +19 -16
- package/lib/setting-list/setting-list.component.d.ts +50 -42
- package/ng-configcat-publicapi-ui.d.ts +5 -18
- package/package.json +26 -21
- package/public-api.d.ts +8 -8
- package/bundles/ng-configcat-publicapi-ui.umd.js +0 -1826
- package/bundles/ng-configcat-publicapi-ui.umd.js.map +0 -1
- package/esm2015/lib/_models/settingValuesModel.js +0 -2
- package/esm2015/lib/_services/form-helper.js +0 -21
- package/esm2015/lib/_services/public-api.service.js +0 -71
- package/esm2015/lib/_services/setting-list-form-helper.js +0 -128
- package/esm2015/lib/authorization/authorization.component.js +0 -49
- package/esm2015/lib/base/base.component.js +0 -40
- package/esm2015/lib/configuration.js +0 -10
- package/esm2015/lib/dialogs/concurrent-dialog/concurrent-dialog.component.js +0 -26
- package/esm2015/lib/dialogs/expand-dialog/expand-dialog.component.js +0 -70
- package/esm2015/lib/dialogs/reason-dialog/reason-dialog.component.js +0 -35
- package/esm2015/lib/dialogs/save-snackbar/save-snackbar.component.js +0 -15
- package/esm2015/lib/ng-configcat-publicapi-ui.module.js +0 -100
- package/esm2015/lib/selects/config-select/config-select.component.js +0 -48
- package/esm2015/lib/selects/environment-select/environment-select.component.js +0 -40
- package/esm2015/lib/selects/product-select/product-select.component.js +0 -34
- package/esm2015/lib/selects/setting-select/setting-select.component.js +0 -40
- package/esm2015/lib/setting-item/setting-item.component.js +0 -106
- package/esm2015/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.js +0 -69
- package/esm2015/lib/setting-list/setting/rollout-rules/rollout-rules.component.js +0 -260
- package/esm2015/lib/setting-list/setting/setting.component.js +0 -112
- package/esm2015/lib/setting-list/setting/value/value.component.js +0 -31
- package/esm2015/lib/setting-list/setting-list.component.js +0 -179
- package/esm2015/ng-configcat-publicapi-ui.js +0 -19
- package/fesm2015/ng-configcat-publicapi-ui.js +0 -1415
- package/fesm2015/ng-configcat-publicapi-ui.js.map +0 -1
- package/ng-configcat-publicapi-ui.metadata.json +0 -1
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
3
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
4
|
-
import { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';
|
|
5
|
-
import { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';
|
|
6
|
-
import { ConcurrentDialogComponent } from '../dialogs/concurrent-dialog/concurrent-dialog.component';
|
|
7
|
-
import { SettingListFormHelper } from '../_services/setting-list-form-helper';
|
|
8
|
-
export class SettingListComponent {
|
|
9
|
-
constructor(formHelper, snackBar, dialog) {
|
|
10
|
-
this.formHelper = formHelper;
|
|
11
|
-
this.snackBar = snackBar;
|
|
12
|
-
this.dialog = dialog;
|
|
13
|
-
this.deleteSettingText = 'Delete setting';
|
|
14
|
-
this.showEnvironmentName = false;
|
|
15
|
-
this.editSettingRequested = new EventEmitter();
|
|
16
|
-
this.deleteSettingRequested = new EventEmitter();
|
|
17
|
-
this.formValuesChanged = new EventEmitter();
|
|
18
|
-
this.loading = true;
|
|
19
|
-
this.submitting = false;
|
|
20
|
-
this.showRevertQuestion = false;
|
|
21
|
-
this.showFeedBackMessage = false;
|
|
22
|
-
this.readOnly = false;
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
this.reloadSettingValues();
|
|
26
|
-
}
|
|
27
|
-
ngOnChanges() {
|
|
28
|
-
this.reloadSettingValues();
|
|
29
|
-
}
|
|
30
|
-
ngOnDestroy() {
|
|
31
|
-
if (this.formValuesChangedSubscription) {
|
|
32
|
-
this.formValuesChangedSubscription.unsubscribe();
|
|
33
|
-
this.formValuesChangedSubscription = null;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
reloadSettingValues() {
|
|
37
|
-
this.showFeedBackMessage = false;
|
|
38
|
-
this.loading = true;
|
|
39
|
-
this.loadSettingValues()
|
|
40
|
-
.subscribe(settingValues => {
|
|
41
|
-
this.readOnly = settingValues.readOnly;
|
|
42
|
-
this.settingValues = settingValues;
|
|
43
|
-
this.createFormGroup();
|
|
44
|
-
this.loading = false;
|
|
45
|
-
}, error => {
|
|
46
|
-
this.snackBar.open('Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.', 'Dismiss', { duration: 60000, panelClass: 'red-snackbar' });
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
createFormGroup() {
|
|
50
|
-
this.formGroup = this.formHelper.createSettingValuesFormGroup(this.settingValues);
|
|
51
|
-
this.formValuesChangedSubscription = this.formGroup.valueChanges.subscribe(() => {
|
|
52
|
-
this.formValuesChanged.emit();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
settingValuesFormArray() {
|
|
56
|
-
return this.formGroup.get('settingValues');
|
|
57
|
-
}
|
|
58
|
-
submit() {
|
|
59
|
-
if (!this.formGroup || !this.formGroup.valid) {
|
|
60
|
-
this.showFeedBackMessage = true;
|
|
61
|
-
this.formGroup.markAsTouched();
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
this.showFeedBackMessage = false;
|
|
65
|
-
this.submitting = true;
|
|
66
|
-
const updateSettingValuesModel = {
|
|
67
|
-
settingValues: this.formGroup.controls.settingValues.value,
|
|
68
|
-
knownLastUpdatedAt: this.settingValues.lastUpdatedAt,
|
|
69
|
-
forced: false
|
|
70
|
-
};
|
|
71
|
-
if (this.settingValues.reasonRequired) {
|
|
72
|
-
const dialogRef = this.dialog.open(ReasonDialogComponent, {
|
|
73
|
-
width: '450px'
|
|
74
|
-
});
|
|
75
|
-
dialogRef.afterClosed()
|
|
76
|
-
.subscribe(result => {
|
|
77
|
-
if (result && result.button === 'save' && result.reason) {
|
|
78
|
-
updateSettingValuesModel.reason = result.reason;
|
|
79
|
-
this.updateSettingValues(updateSettingValuesModel);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.submitting = false;
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
this.updateSettingValues(updateSettingValuesModel);
|
|
88
|
-
}
|
|
89
|
-
updateSettingValues(updateSettingValuesModel) {
|
|
90
|
-
this.onSave(updateSettingValuesModel).subscribe(settingValues => {
|
|
91
|
-
this.settingValues = settingValues;
|
|
92
|
-
this.createFormGroup();
|
|
93
|
-
this.submitting = false;
|
|
94
|
-
this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });
|
|
95
|
-
}, (error) => {
|
|
96
|
-
if (error.status === 400 && error.error
|
|
97
|
-
&& error.error.KnownLastUpdatedAt && error.error.KnownLastUpdatedAt[0] === 'Concurrent update') {
|
|
98
|
-
const dialogRef = this.dialog.open(ConcurrentDialogComponent, {
|
|
99
|
-
width: '560px'
|
|
100
|
-
});
|
|
101
|
-
dialogRef.afterClosed()
|
|
102
|
-
.subscribe(result => {
|
|
103
|
-
if (result && result.button === 'save') {
|
|
104
|
-
updateSettingValuesModel.forced = true;
|
|
105
|
-
this.updateSettingValues(updateSettingValuesModel);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
this.reloadSettingValues();
|
|
109
|
-
this.submitting = false;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required') {
|
|
115
|
-
const dialogRef = this.dialog.open(ReasonDialogComponent, {
|
|
116
|
-
width: '450px'
|
|
117
|
-
});
|
|
118
|
-
dialogRef.afterClosed()
|
|
119
|
-
.subscribe(result => {
|
|
120
|
-
if (result && result.button === 'save' && result.reason) {
|
|
121
|
-
updateSettingValuesModel.reason = result.reason;
|
|
122
|
-
this.updateSettingValues(updateSettingValuesModel);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.submitting = false;
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
this.formGroup.setErrors({ internalServerError: 'Internal server error' });
|
|
131
|
-
this.showFeedBackMessage = true;
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
handleRevertYes() {
|
|
135
|
-
this.showRevertQuestion = false;
|
|
136
|
-
this.reloadSettingValues();
|
|
137
|
-
}
|
|
138
|
-
handleRevertCancel() {
|
|
139
|
-
this.showRevertQuestion = false;
|
|
140
|
-
}
|
|
141
|
-
onEditSettingRequested(setting) {
|
|
142
|
-
this.editSettingRequested.emit({
|
|
143
|
-
setting: setting.setting,
|
|
144
|
-
environment: this.settingValues.environment,
|
|
145
|
-
config: this.settingValues.config
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
onDeleteSettingRequested(setting) {
|
|
149
|
-
this.deleteSettingRequested.emit({
|
|
150
|
-
setting: setting.setting,
|
|
151
|
-
environment: this.settingValues.environment,
|
|
152
|
-
config: this.settingValues.config
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
SettingListComponent.decorators = [
|
|
157
|
-
{ type: Component, args: [{
|
|
158
|
-
selector: 'configcat-setting-list',
|
|
159
|
-
template: "<form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" *ngIf=\"!loading\">\r\n <div class=\"wrapper\" *ngFor=\"let settingValueFromGroup of settingValuesFormArray().controls; let i = index\">\r\n <setting [formGroup]=\"settingValueFromGroup\" [readOnly]=\"readOnly\"\r\n [canEditSetting]=\"canEditSetting\" [canDeleteSetting]=\"canDeleteSetting\"\r\n (editSettingRequested)=\"onEditSettingRequested($event)\"\r\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\r\n [showEnvironmentName]=\"showEnvironmentName\">\r\n </setting>\r\n </div>\r\n\r\n <div class=\"save\" *ngIf=\"!readOnly && !submitting && formGroup.dirty\">\r\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\r\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\r\n <span>Something went wrong and we could not save your settings. You can try again or <a\r\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a></span>\r\n </div>\r\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\r\n <span>Oh no! A feature flag has invalid or missing data.</span>\r\n </div>\r\n </div>\r\n <button type=\"button\" mat-stroked-button *ngIf=\"!showRevertQuestion\" (click)=\"showRevertQuestion = true\">\r\n <mat-icon>history</mat-icon><span>Revert changes</span>\r\n </button>\r\n <div *ngIf=\"showRevertQuestion\">\r\n <span class=\"revert\">Revert to last saved state?</span>\r\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\r\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\r\n </div>\r\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\r\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\r\n </button>\r\n </div>\r\n</form>\r\n",
|
|
160
|
-
styles: [".wrapper{background-color:#f3f3f3;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin:1em 0}.show-hide a{cursor:pointer;font-size:.8rem}.save{position:-webkit-sticky;position:sticky;bottom:0;min-height:38px;padding:.5rem .5rem .5rem 0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-end;z-index:1000}.save .save-button{-webkit-animation:shadow-pulse 1s 3;animation:shadow-pulse 1s 3;margin-left:1rem}.save>*{margin:.3em}.save .revert{margin:0 16px;font-size:14px}.save .yes{margin:0 5px}.error{background-color:#a32b2d;color:#fff;padding:5px;font-size:.9em}.error a{color:#fff;text-decoration:underline}@media (max-width: 700px){.save{padding:.5rem 0}}\n"]
|
|
161
|
-
},] }
|
|
162
|
-
];
|
|
163
|
-
SettingListComponent.ctorParameters = () => [
|
|
164
|
-
{ type: SettingListFormHelper },
|
|
165
|
-
{ type: MatSnackBar },
|
|
166
|
-
{ type: MatDialog }
|
|
167
|
-
];
|
|
168
|
-
SettingListComponent.propDecorators = {
|
|
169
|
-
canEditSetting: [{ type: Input }],
|
|
170
|
-
canDeleteSetting: [{ type: Input }],
|
|
171
|
-
onSave: [{ type: Input }],
|
|
172
|
-
loadSettingValues: [{ type: Input }],
|
|
173
|
-
deleteSettingText: [{ type: Input }],
|
|
174
|
-
showEnvironmentName: [{ type: Input }],
|
|
175
|
-
editSettingRequested: [{ type: Output }],
|
|
176
|
-
deleteSettingRequested: [{ type: Output }],
|
|
177
|
-
formValuesChanged: [{ type: Output }]
|
|
178
|
-
};
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUF3QixNQUFNLGVBQWUsQ0FBQztBQUlyRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBTzlFLE1BQU0sT0FBTyxvQkFBb0I7SUEwQi9CLFlBQW9CLFVBQWlDLEVBQzNDLFFBQXFCLEVBQ3JCLE1BQWlCO1FBRlAsZUFBVSxHQUFWLFVBQVUsQ0FBdUI7UUFDM0MsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBckJsQixzQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUNyQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFM0IseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQywyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJakQsWUFBTyxHQUFHLElBQUksQ0FBQztRQUtmLGVBQVUsR0FBRyxLQUFLLENB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LENBQUM7WUFDM0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQU87UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUM3QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVztZQUMzQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFPO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDL0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDM0MsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUF0TEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLHVtRUFBNEM7O2FBRTdDOzs7WUFOUSxxQkFBcUI7WUFMckIsV0FBVztZQUNYLFNBQVM7Ozs2QkFhZixLQUFLOytCQUNMLEtBQUs7cUJBRUwsS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7a0NBQ0wsS0FBSzttQ0FFTCxNQUFNO3FDQUNOLE1BQU07Z0NBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNldHRpbmdWYWx1ZXNNb2RlbCwgVXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsIH0gZnJvbSAnLi4vX21vZGVscyc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBSZWFzb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2dzL3JlYXNvbi1kaWFsb2cvcmVhc29uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTYXZlU25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2dzL3NhdmUtc25hY2tiYXIvc2F2ZS1zbmFja2Jhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb25jdXJyZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9ncy9jb25jdXJyZW50LWRpYWxvZy9jb25jdXJyZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZXR0aW5nTGlzdEZvcm1IZWxwZXIgfSBmcm9tICcuLi9fc2VydmljZXMvc2V0dGluZy1saXN0LWZvcm0taGVscGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29uZmlnY2F0LXNldHRpbmctbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmctbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZy1saXN0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGNhbkVkaXRTZXR0aW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNhbkRlbGV0ZVNldHRpbmc6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG9uU2F2ZTogKHZhbHVlOiBVcGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwpID0+IE9ic2VydmFibGU8U2V0dGluZ1ZhbHVlc01vZGVsPjtcclxuICBASW5wdXQoKSBsb2FkU2V0dGluZ1ZhbHVlczogKCkgPT4gT2JzZXJ2YWJsZTxTZXR0aW5nVmFsdWVzTW9kZWw+O1xyXG4gIEBJbnB1dCgpIGRlbGV0ZVNldHRpbmdUZXh0ID0gJ0RlbGV0ZSBzZXR0aW5nJztcclxuICBASW5wdXQoKSBzaG93RW52aXJvbm1lbnROYW1lID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBlZGl0U2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlU2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9ybVZhbHVlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZvcm1WYWx1ZXNDaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICBzZXR0aW5nVmFsdWVzOiBTZXR0aW5nVmFsdWVzTW9kZWw7XHJcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XHJcblxyXG4gIHN1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICBzaG93UmV2ZXJ0UXVlc3Rpb24gPSBmYWxzZTtcclxuICBzaG93RmVlZEJhY2tNZXNzYWdlID0gZmFsc2U7XHJcbiAgcmVhZE9ubHkgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtSGVscGVyOiBTZXR0aW5nTGlzdEZvcm1IZWxwZXIsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVsb2FkU2V0dGluZ1ZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbG9hZFNldHRpbmdWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybVZhbHVlc0NoYW5nZWRTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbG9hZFNldHRpbmdWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRTZXR0aW5nVmFsdWVzKClcclxuICAgICAgLnN1YnNjcmliZShzZXR0aW5nVmFsdWVzID0+IHtcclxuICAgICAgICB0aGlzLnJlYWRPbmx5ID0gc2V0dGluZ1ZhbHVlcy5yZWFkT25seTtcclxuICAgICAgICB0aGlzLnNldHRpbmdWYWx1ZXMgPSBzZXR0aW5nVmFsdWVzO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdPb29wcy4gV2UgY291bGQgbm90IGxvYWQgeW91ciBGZWF0dXJlIEZsYWdzIGFuZCBTZXR0aW5ncy4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjb250YWN0IHVzLicsXHJcbiAgICAgICAgICAgICdEaXNtaXNzJywgeyBkdXJhdGlvbjogNjAwMDAsIHBhbmVsQ2xhc3M6ICdyZWQtc25hY2tiYXInIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1IZWxwZXIuY3JlYXRlU2V0dGluZ1ZhbHVlc0Zvcm1Hcm91cCh0aGlzLnNldHRpbmdWYWx1ZXMpO1xyXG4gICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0dGluZ1ZhbHVlc0Zvcm1BcnJheSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NldHRpbmdWYWx1ZXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwIHx8ICF0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMuc3VibWl0dGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsID0gPFVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbD57XHJcbiAgICAgIHNldHRpbmdWYWx1ZXM6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnNldHRpbmdWYWx1ZXMudmFsdWUsXHJcbiAgICAgIGtub3duTGFzdFVwZGF0ZWRBdDogdGhpcy5zZXR0aW5nVmFsdWVzLmxhc3RVcGRhdGVkQXQsXHJcbiAgICAgIGZvcmNlZDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc2V0dGluZ1ZhbHVlcy5yZWFzb25SZXF1aXJlZCkge1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlYXNvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnXHJcbiAgICAgIH0pO1xyXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJ1dHRvbiA9PT0gJ3NhdmUnICYmIHJlc3VsdC5yZWFzb24pIHtcclxuXHJcbiAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbC5yZWFzb24gPSByZXN1bHQucmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdWYWx1ZXModXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCkge1xyXG4gICAgdGhpcy5vblNhdmUodXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsKS5zdWJzY3JpYmUoc2V0dGluZ1ZhbHVlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ1ZhbHVlcyA9IHNldHRpbmdWYWx1ZXM7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KFNhdmVTbmFja2JhckNvbXBvbmVudCwgeyBkdXJhdGlvbjogNTAwMCwgcGFuZWxDbGFzczogJ2dyZWVuLXNuYWNrYmFyJyB9KTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDAgJiYgZXJyb3IuZXJyb3JcclxuICAgICAgICAmJiBlcnJvci5lcnJvci5Lbm93bkxhc3RVcGRhdGVkQXQgJiYgZXJyb3IuZXJyb3IuS25vd25MYXN0VXBkYXRlZEF0WzBdID09PSAnQ29uY3VycmVudCB1cGRhdGUnKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25jdXJyZW50RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICB3aWR0aDogJzU2MHB4J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJ1dHRvbiA9PT0gJ3NhdmUnKSB7XHJcbiAgICAgICAgICAgICAgdXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsLmZvcmNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWRTZXR0aW5nVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAwICYmIGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLlJlYXNvbiAmJiBlcnJvci5lcnJvci5SZWFzb25bMF0gPT09ICdSZWFzb24gcmVxdWlyZWQnKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWFzb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgIHdpZHRoOiAnNDUwcHgnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnV0dG9uID09PSAnc2F2ZScgJiYgcmVzdWx0LnJlYXNvbikge1xyXG4gICAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbC5yZWFzb24gPSByZXN1bHQucmVhc29uO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ1ZhbHVlcyh1cGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldEVycm9ycyh7IGludGVybmFsU2VydmVyRXJyb3I6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InIH0pO1xyXG4gICAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXZlcnRZZXMoKSB7XHJcbiAgICB0aGlzLnNob3dSZXZlcnRRdWVzdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWxvYWRTZXR0aW5nVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXZlcnRDYW5jZWwoKSB7XHJcbiAgICB0aGlzLnNob3dSZXZlcnRRdWVzdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0U2V0dGluZ1JlcXVlc3RlZChzZXR0aW5nKSB7XHJcbiAgICB0aGlzLmVkaXRTZXR0aW5nUmVxdWVzdGVkLmVtaXQoe1xyXG4gICAgICBzZXR0aW5nOiBzZXR0aW5nLnNldHRpbmcsXHJcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdWYWx1ZXMuZW52aXJvbm1lbnQsXHJcbiAgICAgIGNvbmZpZzogdGhpcy5zZXR0aW5nVmFsdWVzLmNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVNldHRpbmdSZXF1ZXN0ZWQoc2V0dGluZykge1xyXG4gICAgdGhpcy5kZWxldGVTZXR0aW5nUmVxdWVzdGVkLmVtaXQoe1xyXG4gICAgICBzZXR0aW5nOiBzZXR0aW5nLnNldHRpbmcsXHJcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdWYWx1ZXMuZW52aXJvbm1lbnQsXHJcbiAgICAgIGNvbmZpZzogdGhpcy5zZXR0aW5nVmFsdWVzLmNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
export { PublicApiService as ɵd } from './lib/_services';
|
|
6
|
-
export { PublicApiService as ɵb } from './lib/_services/public-api.service';
|
|
7
|
-
export { SettingListFormHelper as ɵf } from './lib/_services/setting-list-form-helper';
|
|
8
|
-
export { BaseComponent as ɵa } from './lib/base/base.component';
|
|
9
|
-
export { Configuration as ɵc } from './lib/configuration';
|
|
10
|
-
export { ConcurrentDialogComponent as ɵl } from './lib/dialogs/concurrent-dialog/concurrent-dialog.component';
|
|
11
|
-
export { ExpandDialogComponent as ɵn } from './lib/dialogs/expand-dialog/expand-dialog.component';
|
|
12
|
-
export { ReasonDialogComponent as ɵk } from './lib/dialogs/reason-dialog/reason-dialog.component';
|
|
13
|
-
export { SaveSnackbarComponent as ɵm } from './lib/dialogs/save-snackbar/save-snackbar.component';
|
|
14
|
-
export { SettingListComponent as ɵe } from './lib/setting-list/setting-list.component';
|
|
15
|
-
export { RolloutPercentageItemsComponent as ɵh } from './lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';
|
|
16
|
-
export { RolloutRulesComponent as ɵi } from './lib/setting-list/setting/rollout-rules/rollout-rules.component';
|
|
17
|
-
export { SettingComponent as ɵg } from './lib/setting-list/setting/setting.component';
|
|
18
|
-
export { ValueComponent as ɵj } from './lib/setting-list/setting/value/value.component';
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUMsYUFBYSxJQUFJLEVBQUUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLHlCQUF5QixJQUFJLEVBQUUsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBQzVHLE9BQU8sRUFBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUNoRyxPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRixPQUFPLEVBQUMsK0JBQStCLElBQUksRUFBRSxFQUFDLE1BQU0sd0ZBQXdGLENBQUM7QUFDN0ksT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQyxNQUFNLGtEQUFrRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge1B1YmxpY0FwaVNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9fc2VydmljZXMnO1xuZXhwb3J0IHtQdWJsaWNBcGlTZXJ2aWNlIGFzIMm1Yn0gZnJvbSAnLi9saWIvX3NlcnZpY2VzL3B1YmxpYy1hcGkuc2VydmljZSc7XG5leHBvcnQge1NldHRpbmdMaXN0Rm9ybUhlbHBlciBhcyDJtWZ9IGZyb20gJy4vbGliL19zZXJ2aWNlcy9zZXR0aW5nLWxpc3QtZm9ybS1oZWxwZXInO1xuZXhwb3J0IHtCYXNlQ29tcG9uZW50IGFzIMm1YX0gZnJvbSAnLi9saWIvYmFzZS9iYXNlLmNvbXBvbmVudCc7XG5leHBvcnQge0NvbmZpZ3VyYXRpb24gYXMgybVjfSBmcm9tICcuL2xpYi9jb25maWd1cmF0aW9uJztcbmV4cG9ydCB7Q29uY3VycmVudERpYWxvZ0NvbXBvbmVudCBhcyDJtWx9IGZyb20gJy4vbGliL2RpYWxvZ3MvY29uY3VycmVudC1kaWFsb2cvY29uY3VycmVudC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7RXhwYW5kRGlhbG9nQ29tcG9uZW50IGFzIMm1bn0gZnJvbSAnLi9saWIvZGlhbG9ncy9leHBhbmQtZGlhbG9nL2V4cGFuZC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7UmVhc29uRGlhbG9nQ29tcG9uZW50IGFzIMm1a30gZnJvbSAnLi9saWIvZGlhbG9ncy9yZWFzb24tZGlhbG9nL3JlYXNvbi1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7U2F2ZVNuYWNrYmFyQ29tcG9uZW50IGFzIMm1bX0gZnJvbSAnLi9saWIvZGlhbG9ncy9zYXZlLXNuYWNrYmFyL3NhdmUtc25hY2tiYXIuY29tcG9uZW50JztcbmV4cG9ydCB7U2V0dGluZ0xpc3RDb21wb25lbnQgYXMgybVlfSBmcm9tICcuL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQge1JvbGxvdXRQZXJjZW50YWdlSXRlbXNDb21wb25lbnQgYXMgybVofSBmcm9tICcuL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudCc7XG5leHBvcnQge1JvbGxvdXRSdWxlc0NvbXBvbmVudCBhcyDJtWl9IGZyb20gJy4vbGliL3NldHRpbmctbGlzdC9zZXR0aW5nL3JvbGxvdXQtcnVsZXMvcm9sbG91dC1ydWxlcy5jb21wb25lbnQnO1xuZXhwb3J0IHtTZXR0aW5nQ29tcG9uZW50IGFzIMm1Z30gZnJvbSAnLi9saWIvc2V0dGluZy1saXN0L3NldHRpbmcvc2V0dGluZy5jb21wb25lbnQnO1xuZXhwb3J0IHtWYWx1ZUNvbXBvbmVudCBhcyDJtWp9IGZyb20gJy4vbGliL3NldHRpbmctbGlzdC9zZXR0aW5nL3ZhbHVlL3ZhbHVlLmNvbXBvbmVudCc7Il19
|