@qbs-origin/origin-form 0.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 +24 -0
- package/esm2022/lib/action-step-handler.mjs +163 -0
- package/esm2022/lib/auth-client.service.mjs +69 -0
- package/esm2022/lib/enums/label.keys.mjs +721 -0
- package/esm2022/lib/form-css.helper.mjs +367 -0
- package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
- package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
- package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
- package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
- package/esm2022/lib/formly/formly-action.mjs +56 -0
- package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
- package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
- package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
- package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
- package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
- package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
- package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
- package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
- package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
- package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
- package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
- package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
- package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
- package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
- package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
- package/esm2022/lib/model-population.helper.mjs +265 -0
- package/esm2022/lib/models/application-type.model.mjs +12 -0
- package/esm2022/lib/models/application.model.mjs +30 -0
- package/esm2022/lib/models/auth/users.model.mjs +2 -0
- package/esm2022/lib/models/dictionary.model.mjs +20 -0
- package/esm2022/lib/models/flux.model.mjs +105 -0
- package/esm2022/lib/models/forms.model.mjs +572 -0
- package/esm2022/lib/models/label-info.model.mjs +2 -0
- package/esm2022/lib/models/label.model.mjs +2 -0
- package/esm2022/lib/models/language.model.mjs +3 -0
- package/esm2022/lib/models/list.model.mjs +2 -0
- package/esm2022/lib/models/partner.model.mjs +3 -0
- package/esm2022/lib/models/treeview.model.mjs +15 -0
- package/esm2022/lib/origin-form-auth.service.mjs +40 -0
- package/esm2022/lib/origin-form-config.model.mjs +2 -0
- package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
- package/esm2022/lib/origin-form.component.mjs +2391 -0
- package/esm2022/lib/origin-form.module.mjs +479 -0
- package/esm2022/lib/origin-form.service.mjs +14 -0
- package/esm2022/lib/others/check-list.database.mjs +55 -0
- package/esm2022/lib/others/config-service.mjs +42 -0
- package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
- package/esm2022/lib/others/environment-type.mjs +21 -0
- package/esm2022/lib/others/external-link.directive.mjs +49 -0
- package/esm2022/lib/others/flux-helper.mjs +1397 -0
- package/esm2022/lib/others/picker.component.mjs +119 -0
- package/esm2022/lib/others/translation.pipe.mjs +21 -0
- package/esm2022/lib/others/translations-helper.mjs +258 -0
- package/esm2022/lib/others/utils.mjs +272 -0
- package/esm2022/lib/services/applicationData.service.mjs +145 -0
- package/esm2022/lib/services/auth-http.service.mjs +80 -0
- package/esm2022/lib/services/dialog.service.mjs +56 -0
- package/esm2022/lib/services/dictionary.service.mjs +198 -0
- package/esm2022/lib/services/forms.service.mjs +47 -0
- package/esm2022/lib/services/labels.service.mjs +29 -0
- package/esm2022/lib/services/language.service.mjs +24 -0
- package/esm2022/lib/services/open-banking.service.mjs +194 -0
- package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
- package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
- package/esm2022/lib/services/otp.service.mjs +28 -0
- package/esm2022/lib/services/proxy.service.mjs +79 -0
- package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
- package/esm2022/lib/services/translation.service.mjs +27 -0
- package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
- package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
- package/esm2022/lib/shared-components/grid.component.mjs +241 -0
- package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
- package/esm2022/lib/theme-css.mjs +2254 -0
- package/esm2022/lib/theme-injector.service.mjs +26 -0
- package/esm2022/public-api.mjs +4 -0
- package/esm2022/qbs-origin-origin-form.mjs +5 -0
- package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/action-step-handler.d.ts +49 -0
- package/lib/auth-client.service.d.ts +17 -0
- package/lib/enums/label.keys.d.ts +720 -0
- package/lib/form-css.helper.d.ts +28 -0
- package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
- package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
- package/lib/formly/custom-section-separator.component.d.ts +6 -0
- package/lib/formly/form-section-separator.component.d.ts +10 -0
- package/lib/formly/formly-action.d.ts +13 -0
- package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
- package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
- package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
- package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
- package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
- package/lib/formly/formly-identification.component.d.ts +19 -0
- package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
- package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
- package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
- package/lib/formly/formly-row-fille.d.ts +6 -0
- package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
- package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
- package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
- package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
- package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
- package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
- package/lib/model-population.helper.d.ts +8 -0
- package/lib/models/application-type.model.d.ts +27 -0
- package/lib/models/application.model.d.ts +107 -0
- package/lib/models/auth/users.model.d.ts +20 -0
- package/lib/models/dictionary.model.d.ts +77 -0
- package/lib/models/flux.model.d.ts +101 -0
- package/lib/models/forms.model.d.ts +504 -0
- package/lib/models/label-info.model.d.ts +10 -0
- package/lib/models/label.model.d.ts +4 -0
- package/lib/models/language.model.d.ts +5 -0
- package/lib/models/list.model.d.ts +8 -0
- package/lib/models/partner.model.d.ts +12 -0
- package/lib/models/treeview.model.d.ts +17 -0
- package/lib/origin-form-auth.service.d.ts +15 -0
- package/lib/origin-form-config.model.d.ts +12 -0
- package/lib/origin-form-token.interceptor.d.ts +12 -0
- package/lib/origin-form.component.d.ts +231 -0
- package/lib/origin-form.module.d.ts +84 -0
- package/lib/origin-form.service.d.ts +6 -0
- package/lib/others/check-list.database.d.ts +16 -0
- package/lib/others/config-service.d.ts +22 -0
- package/lib/others/dictionary-label-info.d.ts +6 -0
- package/lib/others/environment-type.d.ts +8 -0
- package/lib/others/external-link.directive.d.ts +12 -0
- package/lib/others/flux-helper.d.ts +115 -0
- package/lib/others/picker.component.d.ts +36 -0
- package/lib/others/translation.pipe.d.ts +10 -0
- package/lib/others/translations-helper.d.ts +31 -0
- package/lib/others/utils.d.ts +37 -0
- package/lib/services/applicationData.service.d.ts +35 -0
- package/lib/services/auth-http.service.d.ts +21 -0
- package/lib/services/dialog.service.d.ts +20 -0
- package/lib/services/dictionary.service.d.ts +89 -0
- package/lib/services/forms.service.d.ts +17 -0
- package/lib/services/labels.service.d.ts +13 -0
- package/lib/services/language.service.d.ts +14 -0
- package/lib/services/open-banking.service.d.ts +137 -0
- package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
- package/lib/services/origin-form-signalr.service.d.ts +24 -0
- package/lib/services/otp.service.d.ts +22 -0
- package/lib/services/proxy.service.d.ts +29 -0
- package/lib/services/scroll-to-error.service.d.ts +54 -0
- package/lib/services/translation.service.d.ts +10 -0
- package/lib/shared-components/confirmation.component.d.ts +77 -0
- package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
- package/lib/shared-components/grid.component.d.ts +138 -0
- package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
- package/lib/theme-css.d.ts +2 -0
- package/lib/theme-injector.service.d.ts +8 -0
- package/package.json +42 -0
- package/public-api.d.ts +3 -0
- package/schematics-compiled/collection.json +10 -0
- package/schematics-compiled/ng-add/index.d.ts +2 -0
- package/schematics-compiled/ng-add/index.js +67 -0
- package/schematics-compiled/ng-add/index.js.map +1 -0
- package/schematics-compiled/ng-add/schema.json +8 -0
- package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
- package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
- package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
- package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
- package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
- package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
- package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
- package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
- package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
- package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
- package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
- package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
- package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
- package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
- package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
- package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import { LabelKeys } from '../../enums/label.keys';
|
|
4
|
+
import { firstValueFrom } from 'rxjs';
|
|
5
|
+
import { Utils } from '../../others/utils';
|
|
6
|
+
import { BaseFormlyStepComponent } from '../baseFormlyStepComponent';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../services/applicationData.service";
|
|
9
|
+
import * as i2 from "@angular/router";
|
|
10
|
+
import * as i3 from "@angular/common";
|
|
11
|
+
import * as i4 from "@angular/material/button";
|
|
12
|
+
import * as i5 from "@angular/material/progress-spinner";
|
|
13
|
+
export class FormlyEnrolCardComponent extends BaseFormlyStepComponent {
|
|
14
|
+
constructor(appDataService, route, cdr, document) {
|
|
15
|
+
super(cdr);
|
|
16
|
+
this.appDataService = appDataService;
|
|
17
|
+
this.route = route;
|
|
18
|
+
this.document = document;
|
|
19
|
+
this.hasErrors = false;
|
|
20
|
+
this.isAlreadyEnroled = false;
|
|
21
|
+
this.paymentError = false;
|
|
22
|
+
this.cardenrolKeys = LabelKeys.cardEnrolKeys;
|
|
23
|
+
this.fluxKeys = LabelKeys.flux;
|
|
24
|
+
this.isEuPlatesc = false;
|
|
25
|
+
this.isNetopia = false;
|
|
26
|
+
}
|
|
27
|
+
onPageSelected() {
|
|
28
|
+
this.route.queryParams.subscribe(async (queryParams) => {
|
|
29
|
+
if (queryParams['originpaymenterror']) {
|
|
30
|
+
var finished = false;
|
|
31
|
+
while (!finished) {
|
|
32
|
+
this.isLoading = true;
|
|
33
|
+
var result = await firstValueFrom(this.appDataService.getEnrolmentStatus(this.dataUrlId));
|
|
34
|
+
if (result) {
|
|
35
|
+
if (result.status === 'Approved') {
|
|
36
|
+
finished = true;
|
|
37
|
+
this.paymentError = false;
|
|
38
|
+
this.isAlreadyEnroled = true;
|
|
39
|
+
this.isLoading = false;
|
|
40
|
+
this.cdr.detectChanges();
|
|
41
|
+
}
|
|
42
|
+
else if (result.status === 'Declined') {
|
|
43
|
+
finished = true;
|
|
44
|
+
this.paymentError = true;
|
|
45
|
+
this.isAlreadyEnroled = false;
|
|
46
|
+
this.isLoading = false;
|
|
47
|
+
this.cdr.detectChanges();
|
|
48
|
+
this.enrolCard(); //we can retry
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
await new Promise((f) => setTimeout(f, 200));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else
|
|
55
|
+
this.enrolCard();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
goToUrl() {
|
|
59
|
+
this.document.location.href = this.enrolUrl;
|
|
60
|
+
}
|
|
61
|
+
enrolCard() {
|
|
62
|
+
this.isLoading = true;
|
|
63
|
+
const command = {
|
|
64
|
+
appId: this.appId,
|
|
65
|
+
appDataId: this.appDataId,
|
|
66
|
+
stepId: this.stepData.identifier,
|
|
67
|
+
};
|
|
68
|
+
if (!this.isAlreadyEnroled) {
|
|
69
|
+
this.appDataService.enrolCard(command).subscribe({
|
|
70
|
+
next: (result) => {
|
|
71
|
+
this.hasErrors = false;
|
|
72
|
+
this.enrolUrl = result.submitUrl;
|
|
73
|
+
this.isLoading = false;
|
|
74
|
+
this.cdr.detectChanges();
|
|
75
|
+
},
|
|
76
|
+
error: (err) => {
|
|
77
|
+
this.hasErrors = true;
|
|
78
|
+
this.isLoading = false;
|
|
79
|
+
this.cdr.detectChanges();
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
this.cdr.detectChanges();
|
|
84
|
+
}
|
|
85
|
+
getTranslatedLabel(translations) {
|
|
86
|
+
const langIso = this.props?.['langIso'] || 'en';
|
|
87
|
+
return Utils.findTranslation(translations ?? [], langIso) || '';
|
|
88
|
+
}
|
|
89
|
+
getSeparatorStyles() {
|
|
90
|
+
const separatorConfig = this.props?.['appModel']?.['design']?.['components']?.find((c) => c?.['name'] === 'Separator Sectiune');
|
|
91
|
+
if (!separatorConfig) {
|
|
92
|
+
return {
|
|
93
|
+
'border-top': '1px solid #ccc',
|
|
94
|
+
margin: '10px 0',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
'border-top': `${separatorConfig?.['weight'] || '1px'} solid ${separatorConfig?.['color'] || '#ccc'}`,
|
|
99
|
+
'border-radius': separatorConfig?.['borderRadius'] || '0px',
|
|
100
|
+
'background-color': separatorConfig?.['backgroundColor'] || 'transparent',
|
|
101
|
+
margin: '10px 0',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
canAdvance() {
|
|
105
|
+
if (this.isLoading || this.hasErrors) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyEnrolCardComponent, deps: [{ token: i1.ApplicationDataService }, { token: i2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
111
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyEnrolCardComponent, selector: "app-enrol-card", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"this.isAlreadyEnroled\">\n {{ props[\"labels\"].cardenrolSuccessLabel }}\n</p>\n<p *ngIf=\"this.paymentError\">{{ props[\"labels\"].cardenrolFailureLabel }}</p>\n<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n\n<div>\n <div *ngFor=\"let section of stepData?.sections\">\n <div *ngFor=\"let control of section.presentationControls\">\n <p class=\"font-paragraph\">\n {{ getTranslatedLabel(control.translations) }}\n </p>\n <p class=\"font-paragraph\">\n {{\n getTranslatedLabel(\n control.specificControlData?.descriptionTranslations\n )\n }}\n </p>\n </div>\n </div>\n</div>\n\n<button\n mat-flat-button\n type=\"button\"\n (click)=\"goToUrl()\"\n [disabled]=\"isLoading || isAlreadyEnroled\"\n class=\"btn btn-primary m-t-20 m-b-20 w-100\"\n>\n {{ props[\"labels\"].cardenrolButtonLabel }}\n</button>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
112
|
+
}
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyEnrolCardComponent, decorators: [{
|
|
114
|
+
type: Component,
|
|
115
|
+
args: [{ selector: 'app-enrol-card', template: "<p *ngIf=\"this.isAlreadyEnroled\">\n {{ props[\"labels\"].cardenrolSuccessLabel }}\n</p>\n<p *ngIf=\"this.paymentError\">{{ props[\"labels\"].cardenrolFailureLabel }}</p>\n<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n\n<div>\n <div *ngFor=\"let section of stepData?.sections\">\n <div *ngFor=\"let control of section.presentationControls\">\n <p class=\"font-paragraph\">\n {{ getTranslatedLabel(control.translations) }}\n </p>\n <p class=\"font-paragraph\">\n {{\n getTranslatedLabel(\n control.specificControlData?.descriptionTranslations\n )\n }}\n </p>\n </div>\n </div>\n</div>\n\n<button\n mat-flat-button\n type=\"button\"\n (click)=\"goToUrl()\"\n [disabled]=\"isLoading || isAlreadyEnroled\"\n class=\"btn btn-primary m-t-20 m-b-20 w-100\"\n>\n {{ props[\"labels\"].cardenrolButtonLabel }}\n</button>\n" }]
|
|
116
|
+
}], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
117
|
+
type: Inject,
|
|
118
|
+
args: [DOCUMENT]
|
|
119
|
+
}] }] });
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWVucm9sLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWVucm9sLWNhcmQvZm9ybWx5LWVucm9sLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWVucm9sLWNhcmQvZm9ybWx5LWVucm9sLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFPckUsTUFBTSxPQUFPLHdCQUF5QixTQUFRLHVCQUF1QjtJQVVuRSxZQUNVLGNBQXNDLEVBQ3RDLEtBQXFCLEVBQzdCLEdBQXNCLEVBQ0ksUUFBa0I7UUFFNUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBTEgsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRUgsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWJ2QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUV6QyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixrQkFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENB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RSxRQUFRO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRVEsVUFBVTtRQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0E5R1Usd0JBQXdCLHVIQWN6QixRQUFRO21HQWRQLHdCQUF3Qiw2RUNqQnJDLHk2QkFnQ0E7OzRGRGZhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQWtCdkIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb25EYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25FbnJvbENhcmREdG8sXG59IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMYWJlbEtleXMgfSBmcm9tICcuLi8uLi9lbnVtcy9sYWJlbC5rZXlzJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL290aGVycy91dGlscyc7XG5pbXBvcnQgeyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2VGb3JtbHlTdGVwQ29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVucm9sLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWVucm9sLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybWx5LWVucm9sLWNhcmQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlFbnJvbENhcmRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudCB7XG4gIHB1YmxpYyBoYXNFcnJvcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzQWxyZWFkeUVucm9sZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZW5yb2xVcmw6IHN0cmluZztcbiAgcGF5bWVudEVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGNhcmRlbnJvbEtleXMgPSBMYWJlbEtleXMuY2FyZEVucm9sS2V5cztcbiAgZmx1eEtleXMgPSBMYWJlbEtleXMuZmx1eDtcbiAgaXNFdVBsYXRlc2M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXRvcGlhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBEYXRhU2VydmljZTogQXBwbGljYXRpb25EYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge1xuICAgIHN1cGVyKGNkcik7XG4gIH1cblxuICBvdmVycmlkZSBvblBhZ2VTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhc3luYyAocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgIGlmIChxdWVyeVBhcmFtc1snb3JpZ2lucGF5bWVudGVycm9yJ10pIHtcbiAgICAgICAgdmFyIGZpbmlzaGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICghZmluaXNoZWQpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5hcHBEYXRhU2VydmljZS5nZXRFbnJvbG1lbnRTdGF0dXModGhpcy5kYXRhVXJsSWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ0FwcHJvdmVkJykge1xuICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudEVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNBbHJlYWR5RW5yb2xlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ0RlY2xpbmVkJykge1xuICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5pc0FscmVhZHlFbnJvbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgdGhpcy5lbnJvbENhcmQoKTsgLy93ZSBjYW4gcmV0cnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKGYpID0+IHNldFRpbWVvdXQoZiwgMjAwKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB0aGlzLmVucm9sQ2FyZCgpO1xuICAgIH0pO1xuICB9XG4gIGdvVG9VcmwoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdGhpcy5lbnJvbFVybDtcbiAgfVxuICBlbnJvbENhcmQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbW1hbmQ6IEFwcGxpY2F0aW9uRW5yb2xDYXJkRHRvID0ge1xuICAgICAgYXBwSWQ6IHRoaXMuYXBwSWQsXG4gICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YUlkLFxuICAgICAgc3RlcElkOiB0aGlzLnN0ZXBEYXRhLmlkZW50aWZpZXIsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuaXNBbHJlYWR5RW5yb2xlZCkge1xuICAgICAgdGhpcy5hcHBEYXRhU2VydmljZS5lbnJvbENhcmQoY29tbWFuZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lbnJvbFVybCA9IHJlc3VsdC5zdWJtaXRVcmw7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0VHJhbnNsYXRlZExhYmVsKHRyYW5zbGF0aW9uczogYW55W10gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhbmdJc28gPSB0aGlzLnByb3BzPy5bJ2xhbmdJc28nXSB8fCAnZW4nO1xuICAgIHJldHVybiBVdGlscy5maW5kVHJhbnNsYXRpb24odHJhbnNsYXRpb25zID8/IFtdLCBsYW5nSXNvKSB8fCAnJztcbiAgfVxuXG4gIGdldFNlcGFyYXRvclN0eWxlcygpOiBhbnkge1xuICAgIGNvbnN0IHNlcGFyYXRvckNvbmZpZyA9IHRoaXMucHJvcHM/LlsnYXBwTW9kZWwnXT8uWydkZXNpZ24nXT8uW1xuICAgICAgJ2NvbXBvbmVudHMnXG4gICAgXT8uZmluZCgoYzogYW55KSA9PiBjPy5bJ25hbWUnXSA9PT0gJ1NlcGFyYXRvciBTZWN0aXVuZScpO1xuXG4gICAgaWYgKCFzZXBhcmF0b3JDb25maWcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdib3JkZXItdG9wJzogJzFweCBzb2xpZCAjY2NjJyxcbiAgICAgICAgbWFyZ2luOiAnMTBweCAwJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICdib3JkZXItdG9wJzogYCR7c2VwYXJhdG9yQ29uZmlnPy5bJ3dlaWdodCddIHx8ICcxcHgnfSBzb2xpZCAke1xuICAgICAgICBzZXBhcmF0b3JDb25maWc/LlsnY29sb3InXSB8fCAnI2NjYydcbiAgICAgIH1gLFxuICAgICAgJ2JvcmRlci1yYWRpdXMnOiBzZXBhcmF0b3JDb25maWc/LlsnYm9yZGVyUmFkaXVzJ10gfHwgJzBweCcsXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHNlcGFyYXRvckNvbmZpZz8uWydiYWNrZ3JvdW5kQ29sb3InXSB8fCAndHJhbnNwYXJlbnQnLFxuICAgICAgbWFyZ2luOiAnMTBweCAwJyxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgY2FuQWR2YW5jZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcgfHwgdGhpcy5oYXNFcnJvcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsIjxwICpuZ0lmPVwidGhpcy5pc0FscmVhZHlFbnJvbGVkXCI+XG4gIHt7IHByb3BzW1wibGFiZWxzXCJdLmNhcmRlbnJvbFN1Y2Nlc3NMYWJlbCB9fVxuPC9wPlxuPHAgKm5nSWY9XCJ0aGlzLnBheW1lbnRFcnJvclwiPnt7IHByb3BzW1wibGFiZWxzXCJdLmNhcmRlbnJvbEZhaWx1cmVMYWJlbCB9fTwvcD5cbjxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwibS14LWF1dG8gdXBsb2FkLXNwaW5uZXJcIj48L21hdC1zcGlubmVyPlxuXG48ZGl2PlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHN0ZXBEYXRhPy5zZWN0aW9uc1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2Ygc2VjdGlvbi5wcmVzZW50YXRpb25Db250cm9sc1wiPlxuICAgICAgPHAgY2xhc3M9XCJmb250LXBhcmFncmFwaFwiPlxuICAgICAgICB7eyBnZXRUcmFuc2xhdGVkTGFiZWwoY29udHJvbC50cmFuc2xhdGlvbnMpIH19XG4gICAgICA8L3A+XG4gICAgICA8cCBjbGFzcz1cImZvbnQtcGFyYWdyYXBoXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgZ2V0VHJhbnNsYXRlZExhYmVsKFxuICAgICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5kZXNjcmlwdGlvblRyYW5zbGF0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGJ1dHRvblxuICBtYXQtZmxhdC1idXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIChjbGljayk9XCJnb1RvVXJsKClcIlxuICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nIHx8IGlzQWxyZWFkeUVucm9sZWRcIlxuICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLXQtMjAgbS1iLTIwIHctMTAwXCJcbj5cbiAge3sgcHJvcHNbXCJsYWJlbHNcIl0uY2FyZGVucm9sQnV0dG9uTGFiZWwgfX1cbjwvYnV0dG9uPlxuIl19
|