bpm-core 0.0.32 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app/app.component.mjs +2 -2
- package/esm2022/lib/components/app-component-sections/faq-sidenav/faq-sidenav.component.mjs +1 -5
- package/esm2022/lib/components/app-component-sections/faqs/faqs.component.mjs +4 -9
- package/esm2022/lib/components/app-component-sections/form-section/form-section.component.mjs +140 -72
- package/esm2022/lib/components/app-component-sections/index.mjs +1 -2
- package/esm2022/lib/components/app-component-sections/main-request-details/main-request-details.component.mjs +5 -7
- package/esm2022/lib/components/app-component-sections/previous-requests/previous-requests.component.mjs +67 -0
- package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +158 -68
- package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs +5 -6
- package/esm2022/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.mjs +3 -3
- package/esm2022/lib/components/shared-components/form-field/date-picker/date-picker.component.mjs +8 -46
- package/esm2022/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.mjs +161 -14
- package/esm2022/lib/components/shared-components/form-field/input/input.component.mjs +10 -12
- package/esm2022/lib/components/shared-components/form-field/input-currency/input-currency.component.mjs +11 -4
- package/esm2022/lib/components/shared-components/form-field/input-email/input-email.component.mjs +12 -4
- package/esm2022/lib/components/shared-components/form-field/input-mask/input-mask.component.mjs +3 -3
- package/esm2022/lib/components/shared-components/form-field/input-number/input-number.component.mjs +9 -5
- package/esm2022/lib/components/shared-components/form-field/validation-errors/validation-errors.component.mjs +5 -1
- package/esm2022/lib/{validators → directives}/ar.directive.mjs +4 -3
- package/esm2022/lib/{validators → directives}/currency.directive.mjs +4 -3
- package/esm2022/lib/{validators → directives}/en.directive.mjs +4 -3
- package/esm2022/lib/directives/number.directive.mjs +68 -0
- package/esm2022/lib/i18n/ar.mjs +4 -2
- package/esm2022/lib/i18n/en.mjs +3 -1
- package/esm2022/lib/pipes/status-style.pipe.mjs +57 -0
- package/esm2022/lib/regex/regex-patterns.mjs +4 -0
- package/esm2022/lib/services/core.service.ts.mjs +37 -9
- package/esm2022/lib/testComponent/general-approver-section/general-approver-section.component.mjs +2 -2
- package/esm2022/lib/testComponent/request-details-section/request-details-section.component.mjs +13 -6
- package/esm2022/lib/validators/index.mjs +4 -4
- package/fesm2022/bpm-core.mjs +1007 -592
- package/fesm2022/bpm-core.mjs.map +1 -1
- package/lib/components/app-component-sections/faq-sidenav/faq-sidenav.component.d.ts +2 -4
- package/lib/components/app-component-sections/faqs/faqs.component.d.ts +1 -3
- package/lib/components/app-component-sections/form-section/form-section.component.d.ts +92 -7
- package/lib/components/app-component-sections/index.d.ts +0 -1
- package/lib/components/app-component-sections/previous-requests/previous-requests.component.d.ts +22 -0
- package/lib/components/app-component-sections/service-header/service-header.component.d.ts +98 -7
- package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +2 -1
- package/lib/components/shared-components/form-field/date-picker/date-picker.component.d.ts +0 -4
- package/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.d.ts +22 -6
- package/lib/components/shared-components/form-field/input/input.component.d.ts +1 -3
- package/lib/components/shared-components/form-field/input-email/input-email.component.d.ts +1 -0
- package/lib/{validators → directives}/ar.directive.d.ts +1 -1
- package/lib/{validators → directives}/currency.directive.d.ts +1 -1
- package/lib/{validators → directives}/en.directive.d.ts +1 -1
- package/lib/directives/number.directive.d.ts +14 -0
- package/lib/i18n/ar.d.ts +2 -0
- package/lib/i18n/en.d.ts +2 -0
- package/lib/pipes/status-style.pipe.d.ts +7 -0
- package/lib/regex/regex-patterns.d.ts +3 -0
- package/lib/services/core.service.ts.d.ts +2 -0
- package/lib/validators/index.d.ts +0 -3
- package/package.json +1 -1
- package/src/lib/assets/scss/_custom-popover.scss +3 -0
- package/src/lib/assets/scss/_settings.scss +5 -2
- package/esm2022/lib/components/app-component-sections/comment-section/comment-section.component.mjs +0 -66
- package/lib/components/app-component-sections/comment-section/comment-section.component.d.ts +0 -19
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject } from "@angular/core";
|
|
2
|
+
import { CommonModule } from "@angular/common";
|
|
3
|
+
import { MatMenuModule } from "@angular/material/menu";
|
|
4
|
+
import { MatDialogModule } from "@angular/material/dialog";
|
|
5
|
+
import { ReactiveFormsModule } from "@angular/forms";
|
|
6
|
+
import { MatButtonToggleModule } from "@angular/material/button-toggle";
|
|
7
|
+
import { Router, RouterModule } from "@angular/router";
|
|
8
|
+
import { TranslateModule } from "@ngx-translate/core";
|
|
9
|
+
import { StatusStylePipe } from "../../../pipes/status-style.pipe";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/material/dialog";
|
|
12
|
+
import * as i2 from "../../../services";
|
|
13
|
+
import * as i3 from "@angular/common";
|
|
14
|
+
import * as i4 from "@angular/material/button-toggle";
|
|
15
|
+
export class PreviousRequestsComponent {
|
|
16
|
+
dialog;
|
|
17
|
+
sidenavService;
|
|
18
|
+
coreService;
|
|
19
|
+
i18n;
|
|
20
|
+
previousRequests = [];
|
|
21
|
+
loading;
|
|
22
|
+
router = inject(Router);
|
|
23
|
+
totalLength;
|
|
24
|
+
constructor(dialog, sidenavService, coreService, i18n) {
|
|
25
|
+
this.dialog = dialog;
|
|
26
|
+
this.sidenavService = sidenavService;
|
|
27
|
+
this.coreService = coreService;
|
|
28
|
+
this.i18n = i18n;
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
}
|
|
32
|
+
ngAfterViewInit() {
|
|
33
|
+
this.getRequests();
|
|
34
|
+
}
|
|
35
|
+
getRequests() {
|
|
36
|
+
let searchData = {
|
|
37
|
+
year: new Date().getFullYear(),
|
|
38
|
+
month: ""
|
|
39
|
+
};
|
|
40
|
+
this.coreService.myRequests(searchData).subscribe((response) => {
|
|
41
|
+
if (response) {
|
|
42
|
+
this.previousRequests = (response.history);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
viewForm(formId) {
|
|
47
|
+
if (formId) {
|
|
48
|
+
window.open('/group/i-gate/wm-bpm/forms?formId=' + formId);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: PreviousRequestsComponent, deps: [{ token: i1.MatDialog }, { token: i2.SidenavService }, { token: i2.CoreService }, { token: i2.CoreI18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: PreviousRequestsComponent, isStandalone: true, selector: "app-history", ngImport: i0, template: "<section class=\"main-sidenav history-sidenav\">\r\n <div class=\"sidenav-title\">\r\n <h3>{{ i18n.translate('PreviousRequests') }}</h3>\r\n <ds-button class=\"close-sidenav\" (click)=\"sidenavService.closeSidenav()\" icon>\r\n <ds-icon icon=\"close\" class=\"fs-20 fc-black\"></ds-icon>\r\n </ds-button>\r\n </div>\r\n\r\n <div\r\n class=\"sidenav-body bc-light-gray\"\r\n >\r\n <section class=\"p-3\">\r\n <!-- <app-request-statistics class=\"d-block mb-4\"></app-request-statistics>-->\r\n <header class=\"d-flex align-items-center justify-content-between gap-2 mb-3\">\r\n <h2 class=\"fs-20 fw-medium fc-black mb-0 d-flex align-items-center flex-grow-1 gap-3\">\r\n {{ i18n.translate('AllRequests') }}\r\n <span class=\"title-count fs-14 fw-normal\">{{ previousRequests?.length ? previousRequests?.length : '0' }}</span>\r\n </h2>\r\n <mat-button-toggle-group\r\n class=\"icon-toggle flex-nowrap\"\r\n #pageView=\"matButtonToggleGroup\"\r\n (click)=\"$event.stopImmediatePropagation()\"\r\n value=\"list\"\r\n >\r\n <mat-button-toggle value=\"card\">\r\n <span class=\"sfi sfi-card fs-20\"></span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"list\">\r\n <span class=\"sfi sfi-list-dots fs-20\"></span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </header>\r\n\r\n <div class=\"history-cards-container\" *ngIf=\"pageView.value === 'card'\">\r\n <div class=\"p-4 line-height-1 bc-white radius-6 box-shadow\" *ngFor=\"let row of previousRequests\">\r\n <div class=\"d-flex align-items-center gap-2 mb-3\">\r\n <h3\r\n class=\"fs-16 fw-medium flex-grow-1 mb-0 cursor-pointer underline fw-bold\"\r\n (click)=\"viewForm(row?.form?.['formId'])\">{{ row?.form?.['formId'] }}</h3>\r\n </div>\r\n <div class=\"row g-3\">\r\n <div class=\"d-flex flex-column col-6\">\r\n <span class=\"fs-11 fc-dark-gray mb-2\">{{ i18n.translate('formTableCreationDate') }}</span>\r\n <span class=\"fs-12 fw-medium fc-black\">{{ row?.form?.['creationDate'] | date: 'dd/MM/yyyy hh:mm a' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column col-6 justify-content-end align-items-end\">\r\n\r\n <ds-status [attr.status]=\"row?.form?.formStatus?.key | statusClass\">\r\n {{ row?.form?.formStatus?.value }}\r\n </ds-status>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-responsive\" *ngIf=\"pageView.value === 'list'\">\r\n <table *ngIf=\"previousRequests?.length\">\r\n <thead>\r\n <tr>\r\n <th>{{ i18n.translate('formTableFormId') }}</th>\r\n <th>{{ i18n.translate('formTableCreationDate') }}</th>\r\n <th>{{ i18n.translate('Status') }}</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody *ngFor=\"let row of previousRequests\">\r\n <tr>\r\n <td>\r\n <span class=\"fw-medium cursor-pointer underline fw-bold \" (click)=\"viewForm(row?.form?.['formId'])\">\r\n {{ row?.form?.['formId'] }}\r\n </span>\r\n </td>\r\n <td>{{ row?.form?.['creationDate'] | date: 'dd/MM/yyyy hh:mm a' }}</td>\r\n <td>\r\n <ds-status [attr.status]=\"row?.form?.formStatus?.key | statusClass\">\r\n {{ row?.form?.formStatus?.value }}\r\n </ds-status>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ds-loading-table *ngIf=\"loading\" [cols]=\"4\" [rows]=\"4\"></ds-loading-table>\r\n </div>\r\n <ds-message *ngIf=\"!previousRequests?.length && !loading\" type=\"emptyList\" [label]=\"i18n.translate('noData') \"></ds-message>\r\n </section>\r\n\r\n </div>\r\n</section>\r\n", styles: [".history-cards-container{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem;padding:1rem 0}.filter-section ::ng-deep .mat-form-field.mat-primary{margin-bottom:0}.filter-section ::ng-deep .select-form-field{--placeholder-fc: var(--dark-gray)}.filter-section ::ng-deep .select-datepicker{--input-width: 200px}table thead{display:none}:host .mat-button-toggle-group{--toggle-bg: var(--white);box-shadow:var(--box-shadow)}:host table{--th-bg: var(--gray);--td-bg: var(--white);--tr-even-bc: var(--white);--tr-odd-bc: var(--white)}ds-button[square]::part(base){--btn-padding: 0}@media (min-width: 768px){.history-sidenav{--sidenav-width: 800px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i4.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i4.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "pipe", type: StatusStylePipe, name: "statusClass" }] });
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: PreviousRequestsComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: 'app-history', standalone: true, imports: [
|
|
57
|
+
CommonModule,
|
|
58
|
+
MatMenuModule,
|
|
59
|
+
RouterModule,
|
|
60
|
+
TranslateModule,
|
|
61
|
+
MatDialogModule,
|
|
62
|
+
ReactiveFormsModule,
|
|
63
|
+
MatButtonToggleModule,
|
|
64
|
+
StatusStylePipe
|
|
65
|
+
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<section class=\"main-sidenav history-sidenav\">\r\n <div class=\"sidenav-title\">\r\n <h3>{{ i18n.translate('PreviousRequests') }}</h3>\r\n <ds-button class=\"close-sidenav\" (click)=\"sidenavService.closeSidenav()\" icon>\r\n <ds-icon icon=\"close\" class=\"fs-20 fc-black\"></ds-icon>\r\n </ds-button>\r\n </div>\r\n\r\n <div\r\n class=\"sidenav-body bc-light-gray\"\r\n >\r\n <section class=\"p-3\">\r\n <!-- <app-request-statistics class=\"d-block mb-4\"></app-request-statistics>-->\r\n <header class=\"d-flex align-items-center justify-content-between gap-2 mb-3\">\r\n <h2 class=\"fs-20 fw-medium fc-black mb-0 d-flex align-items-center flex-grow-1 gap-3\">\r\n {{ i18n.translate('AllRequests') }}\r\n <span class=\"title-count fs-14 fw-normal\">{{ previousRequests?.length ? previousRequests?.length : '0' }}</span>\r\n </h2>\r\n <mat-button-toggle-group\r\n class=\"icon-toggle flex-nowrap\"\r\n #pageView=\"matButtonToggleGroup\"\r\n (click)=\"$event.stopImmediatePropagation()\"\r\n value=\"list\"\r\n >\r\n <mat-button-toggle value=\"card\">\r\n <span class=\"sfi sfi-card fs-20\"></span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"list\">\r\n <span class=\"sfi sfi-list-dots fs-20\"></span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </header>\r\n\r\n <div class=\"history-cards-container\" *ngIf=\"pageView.value === 'card'\">\r\n <div class=\"p-4 line-height-1 bc-white radius-6 box-shadow\" *ngFor=\"let row of previousRequests\">\r\n <div class=\"d-flex align-items-center gap-2 mb-3\">\r\n <h3\r\n class=\"fs-16 fw-medium flex-grow-1 mb-0 cursor-pointer underline fw-bold\"\r\n (click)=\"viewForm(row?.form?.['formId'])\">{{ row?.form?.['formId'] }}</h3>\r\n </div>\r\n <div class=\"row g-3\">\r\n <div class=\"d-flex flex-column col-6\">\r\n <span class=\"fs-11 fc-dark-gray mb-2\">{{ i18n.translate('formTableCreationDate') }}</span>\r\n <span class=\"fs-12 fw-medium fc-black\">{{ row?.form?.['creationDate'] | date: 'dd/MM/yyyy hh:mm a' }}</span>\r\n </div>\r\n <div class=\"d-flex flex-column col-6 justify-content-end align-items-end\">\r\n\r\n <ds-status [attr.status]=\"row?.form?.formStatus?.key | statusClass\">\r\n {{ row?.form?.formStatus?.value }}\r\n </ds-status>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-responsive\" *ngIf=\"pageView.value === 'list'\">\r\n <table *ngIf=\"previousRequests?.length\">\r\n <thead>\r\n <tr>\r\n <th>{{ i18n.translate('formTableFormId') }}</th>\r\n <th>{{ i18n.translate('formTableCreationDate') }}</th>\r\n <th>{{ i18n.translate('Status') }}</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody *ngFor=\"let row of previousRequests\">\r\n <tr>\r\n <td>\r\n <span class=\"fw-medium cursor-pointer underline fw-bold \" (click)=\"viewForm(row?.form?.['formId'])\">\r\n {{ row?.form?.['formId'] }}\r\n </span>\r\n </td>\r\n <td>{{ row?.form?.['creationDate'] | date: 'dd/MM/yyyy hh:mm a' }}</td>\r\n <td>\r\n <ds-status [attr.status]=\"row?.form?.formStatus?.key | statusClass\">\r\n {{ row?.form?.formStatus?.value }}\r\n </ds-status>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ds-loading-table *ngIf=\"loading\" [cols]=\"4\" [rows]=\"4\"></ds-loading-table>\r\n </div>\r\n <ds-message *ngIf=\"!previousRequests?.length && !loading\" type=\"emptyList\" [label]=\"i18n.translate('noData') \"></ds-message>\r\n </section>\r\n\r\n </div>\r\n</section>\r\n", styles: [".history-cards-container{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem;padding:1rem 0}.filter-section ::ng-deep .mat-form-field.mat-primary{margin-bottom:0}.filter-section ::ng-deep .select-form-field{--placeholder-fc: var(--dark-gray)}.filter-section ::ng-deep .select-datepicker{--input-width: 200px}table thead{display:none}:host .mat-button-toggle-group{--toggle-bg: var(--white);box-shadow:var(--box-shadow)}:host table{--th-bg: var(--gray);--td-bg: var(--white);--tr-even-bc: var(--white);--tr-odd-bc: var(--white)}ds-button[square]::part(base){--btn-padding: 0}@media (min-width: 768px){.history-sidenav{--sidenav-width: 800px}}\n"] }]
|
|
66
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.SidenavService }, { type: i2.CoreService }, { type: i2.CoreI18nService }] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlvdXMtcmVxdWVzdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1jb21wb25lbnQtc2VjdGlvbnMvcHJldmlvdXMtcmVxdWVzdHMvcHJldmlvdXMtcmVxdWVzdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1jb21wb25lbnQtc2VjdGlvbnMvcHJldmlvdXMtcmVxdWVzdHMvcHJldmlvdXMtcmVxdWVzdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQVksZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFxQmpFLE1BQU0sT0FBTyx5QkFBeUI7SUFNakI7SUFDUztJQUNUO0lBQ0E7SUFSbkIsZ0JBQWdCLEdBQVUsRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBUztJQUNoQixNQUFNLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLFdBQVcsQ0FBUTtJQUVuQixZQUFtQixNQUFpQixFQUNSLGNBQThCLEVBQ3ZDLFdBQXdCLEVBQ3hCLElBQXFCO1FBSHJCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDUixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDdkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7SUFDckMsQ0FBQztJQUVKLFFBQVE7SUFFUixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksVUFBVSxHQUFHO1lBQ2YsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQzlCLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ2xFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQzt1R0FwQ1UseUJBQXlCOzJGQUF6Qix5QkFBeUIsdUVDOUJ0QywyOUhBd0ZBLHd0QkR4RUksWUFBWSxrVEFDWixhQUFhLDhCQUNiLFlBQVksOEJBQ1osZUFBZSw4QkFDZixlQUFlLDhCQUNmLG1CQUFtQiw4QkFDbkIscUJBQXFCLGtvQkFDckIsZUFBZTs7MkZBT04seUJBQXlCO2tCQW5CckMsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUVQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsZUFBZTtxQkFFaEIsV0FHUSxDQUFDLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgT25Jbml0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge01hdE1lbnVNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XHJcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtNYXRCdXR0b25Ub2dnbGVNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlXCI7XHJcbmltcG9ydCB7Um91dGVyLCBSb3V0ZXJNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7Q29yZUkxOG5TZXJ2aWNlLCBDb3JlU2VydmljZSwgU2lkZW5hdlNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQge1N0YXR1c1N0eWxlUGlwZX0gZnJvbSBcIi4uLy4uLy4uL3BpcGVzL3N0YXR1cy1zdHlsZS5waXBlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1oaXN0b3J5JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG5cclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcclxuICAgIFN0YXR1c1N0eWxlUGlwZVxyXG5cclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmV2aW91cy1yZXF1ZXN0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcHJldmlvdXMtcmVxdWVzdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcmV2aW91c1JlcXVlc3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcmV2aW91c1JlcXVlc3RzOiBhbnlbXSA9IFtdXHJcbiAgbG9hZGluZzogYm9vbGVhblxyXG4gIHJvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcilcclxuICB0b3RhbExlbmd0aDogbnVtYmVyXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2lkZW5hdlNlcnZpY2U6IFNpZGVuYXZTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBjb3JlU2VydmljZTogQ29yZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHVibGljIGkxOG46IENvcmVJMThuU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5nZXRSZXF1ZXN0cygpXHJcbiAgfVxyXG5cclxuICBnZXRSZXF1ZXN0cygpIHtcclxuICAgIGxldCBzZWFyY2hEYXRhID0ge1xyXG4gICAgICB5ZWFyOiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoOiBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLmNvcmVTZXJ2aWNlLm15UmVxdWVzdHMoc2VhcmNoRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNSZXF1ZXN0cyA9IChyZXNwb25zZS5oaXN0b3J5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3Rm9ybShmb3JtSWQ6IHN0cmluZykge1xyXG4gICAgaWYgKGZvcm1JZCkge1xyXG4gICAgICB3aW5kb3cub3BlbignL2dyb3VwL2ktZ2F0ZS93bS1icG0vZm9ybXM/Zm9ybUlkPScgKyBmb3JtSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJtYWluLXNpZGVuYXYgaGlzdG9yeS1zaWRlbmF2XCI+XHJcbiAgPGRpdiBjbGFzcz1cInNpZGVuYXYtdGl0bGVcIj5cclxuICAgIDxoMz57eyBpMThuLnRyYW5zbGF0ZSgnUHJldmlvdXNSZXF1ZXN0cycpICB9fTwvaDM+XHJcbiAgICA8ZHMtYnV0dG9uIGNsYXNzPVwiY2xvc2Utc2lkZW5hdlwiIChjbGljayk9XCJzaWRlbmF2U2VydmljZS5jbG9zZVNpZGVuYXYoKVwiIGljb24+XHJcbiAgICAgIDxkcy1pY29uIGljb249XCJjbG9zZVwiIGNsYXNzPVwiZnMtMjAgZmMtYmxhY2tcIj48L2RzLWljb24+XHJcbiAgICA8L2RzLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJzaWRlbmF2LWJvZHkgYmMtbGlnaHQtZ3JheVwiXHJcbiAgPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJwLTNcIj5cclxuICAgICAgPCEtLSAgPGFwcC1yZXF1ZXN0LXN0YXRpc3RpY3MgY2xhc3M9XCJkLWJsb2NrIG1iLTRcIj48L2FwcC1yZXF1ZXN0LXN0YXRpc3RpY3M+LS0+XHJcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yIG1iLTNcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJmcy0yMCBmdy1tZWRpdW0gZmMtYmxhY2sgbWItMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtZ3Jvdy0xIGdhcC0zXCI+XHJcbiAgICAgICAgICB7eyBpMThuLnRyYW5zbGF0ZSgnQWxsUmVxdWVzdHMnKSB9fVxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1jb3VudCBmcy0xNCBmdy1ub3JtYWxcIj57eyBwcmV2aW91c1JlcXVlc3RzPy5sZW5ndGggPyBwcmV2aW91c1JlcXVlc3RzPy5sZW5ndGggOiAnMCcgfX08L3NwYW4+XHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbi10b2dnbGUgZmxleC1ub3dyYXBcIlxyXG4gICAgICAgICAgI3BhZ2VWaWV3PVwibWF0QnV0dG9uVG9nZ2xlR3JvdXBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICB2YWx1ZT1cImxpc3RcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImNhcmRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZmkgc2ZpLWNhcmQgZnMtMjBcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwibGlzdFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktbGlzdC1kb3RzIGZzLTIwXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgICA8L2hlYWRlcj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoaXN0b3J5LWNhcmRzLWNvbnRhaW5lclwiICpuZ0lmPVwicGFnZVZpZXcudmFsdWUgPT09ICdjYXJkJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTQgbGluZS1oZWlnaHQtMSBiYy13aGl0ZSByYWRpdXMtNiBib3gtc2hhZG93XCIgKm5nRm9yPVwibGV0IHJvdyBvZiBwcmV2aW91c1JlcXVlc3RzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XHJcbiAgICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTYgZnctbWVkaXVtIGZsZXgtZ3Jvdy0xIG1iLTAgY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGZ3LWJvbGRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3Rm9ybShyb3c/LmZvcm0/LlsnZm9ybUlkJ10pXCI+e3sgcm93Py5mb3JtPy5bJ2Zvcm1JZCddIH19PC9oMz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTEgZmMtZGFyay1ncmF5IG1iLTJcIj57eyBpMThuLnRyYW5zbGF0ZSgnZm9ybVRhYmxlQ3JlYXRpb25EYXRlJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMiBmdy1tZWRpdW0gZmMtYmxhY2tcIj57eyByb3c/LmZvcm0/LlsnY3JlYXRpb25EYXRlJ10gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbSBhJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gY29sLTYganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1lbmRcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRzLXN0YXR1cyBbYXR0ci5zdGF0dXNdPVwicm93Py5mb3JtPy5mb3JtU3RhdHVzPy5rZXkgfCBzdGF0dXNDbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcm93Py5mb3JtPy5mb3JtU3RhdHVzPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvZHMtc3RhdHVzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgKm5nSWY9XCJwYWdlVmlldy52YWx1ZSA9PT0gJ2xpc3QnXCI+XHJcbiAgICAgICAgPHRhYmxlICpuZ0lmPVwicHJldmlvdXNSZXF1ZXN0cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aD57eyBpMThuLnRyYW5zbGF0ZSgnZm9ybVRhYmxlRm9ybUlkJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGg+e3sgaTE4bi50cmFuc2xhdGUoJ2Zvcm1UYWJsZUNyZWF0aW9uRGF0ZScpIH19PC90aD5cclxuICAgICAgICAgICAgPHRoPnt7IGkxOG4udHJhbnNsYXRlKCdTdGF0dXMnKSB9fTwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgICA8dGJvZHkgKm5nRm9yPVwibGV0IHJvdyBvZiBwcmV2aW91c1JlcXVlc3RzXCI+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctbWVkaXVtIGN1cnNvci1wb2ludGVyIHVuZGVybGluZSBmdy1ib2xkIFwiIChjbGljayk9XCJ2aWV3Rm9ybShyb3c/LmZvcm0/LlsnZm9ybUlkJ10pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvdz8uZm9ybT8uWydmb3JtSWQnXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgcm93Py5mb3JtPy5bJ2NyZWF0aW9uRGF0ZSddICB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tIGEnIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxkcy1zdGF0dXMgW2F0dHIuc3RhdHVzXT1cInJvdz8uZm9ybT8uZm9ybVN0YXR1cz8ua2V5IHwgc3RhdHVzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJvdz8uZm9ybT8uZm9ybVN0YXR1cz8udmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L2RzLXN0YXR1cz5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPGRzLWxvYWRpbmctdGFibGUgKm5nSWY9XCJsb2FkaW5nXCIgW2NvbHNdPVwiNFwiIFtyb3dzXT1cIjRcIj48L2RzLWxvYWRpbmctdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZHMtbWVzc2FnZSAqbmdJZj1cIiFwcmV2aW91c1JlcXVlc3RzPy5sZW5ndGggJiYgIWxvYWRpbmdcIiB0eXBlPVwiZW1wdHlMaXN0XCIgW2xhYmVsXT1cImkxOG4udHJhbnNsYXRlKCdub0RhdGEnKSBcIj48L2RzLW1lc3NhZ2U+XHJcbiAgICA8L3NlY3Rpb24+XHJcblxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
|