@provoly/hypervisor 0.0.118 → 0.0.119
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/src/lib/event/detail/add-event/add-event.component.mjs +59 -0
- package/esm2022/src/lib/event/detail/event-detail.component.mjs +94 -42
- package/esm2022/src/lib/event/procedure-association-modal/procedure-association-modal.component.mjs +2 -2
- package/esm2022/src/lib/event/public-api.mjs +2 -1
- package/esm2022/src/lib/general/i18n/fr.translations.mjs +10 -1
- package/esm2022/src/lib/hypervisor.module.mjs +8 -4
- package/esm2022/src/lib/model/event/hyp-event-detail.interface.mjs +3 -2
- package/esm2022/src/lib/model/event/hyp-event.interface.mjs +1 -1
- package/esm2022/src/lib/store/event/event.actions.mjs +2 -1
- package/esm2022/src/lib/store/event/event.effects.mjs +2 -1
- package/esm2022/src/lib/store/event/event.service.mjs +15 -1
- package/fesm2022/provoly-hypervisor.mjs +274 -146
- package/fesm2022/provoly-hypervisor.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/event/detail/add-event/add-event.component.d.ts +21 -0
- package/src/lib/event/detail/event-detail.component.d.ts +14 -2
- package/src/lib/event/procedure-association-modal/procedure-association-modal.component.d.ts +1 -1
- package/src/lib/event/public-api.d.ts +1 -0
- package/src/lib/general/i18n/fr.translations.d.ts +9 -0
- package/src/lib/hypervisor.module.d.ts +10 -9
- package/src/lib/model/event/hyp-event-detail.interface.d.ts +1 -0
- package/src/lib/model/event/hyp-event.interface.d.ts +4 -0
- package/src/lib/model/procedure/hyp-procedure.interface.d.ts +1 -0
- package/src/lib/store/event/event.actions.d.ts +7 -0
- package/src/lib/store/event/event.effects.d.ts +7 -0
- package/src/lib/store/event/event.service.d.ts +2 -0
- package/styles/components/_index.scss +1 -0
- package/styles/components/_o-hvy-event-detail-add.scss +34 -0
- package/styles/components/_o-hvy-event-detail.scss +14 -0
- package/styles/components/_o-hvy-event-summary-list.scss +4 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { PRY_DIALOG_DATA } from '@provoly/dashboard';
|
|
2
|
+
import { Component, Inject } from '@angular/core';
|
|
3
|
+
import { debounceTime, shareReplay, Subject, switchMap } from 'rxjs';
|
|
4
|
+
import { catchError, map, startWith } from 'rxjs/operators';
|
|
5
|
+
import { padId } from '../../../general/pad-id.function';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@provoly/dashboard";
|
|
8
|
+
import * as i2 from "../../../store/event/event.service";
|
|
9
|
+
import * as i3 from "@angular/forms";
|
|
10
|
+
import * as i4 from "@angular/common";
|
|
11
|
+
export class HvyEventAddEventComponent {
|
|
12
|
+
constructor(dialog, data, eventService) {
|
|
13
|
+
this.dialog = dialog;
|
|
14
|
+
this.data = data;
|
|
15
|
+
this.eventService = eventService;
|
|
16
|
+
this.onEventSearch$ = new Subject();
|
|
17
|
+
this.eventSelectValue = undefined;
|
|
18
|
+
this.events$ = this.onEventSearch$.pipe(startWith(), debounceTime(500)).pipe(switchMap(() => {
|
|
19
|
+
const search = typeof this.eventSelectValue === 'string' && this.eventSelectValue.length > 2
|
|
20
|
+
? this.eventSelectValue
|
|
21
|
+
: undefined;
|
|
22
|
+
return this.eventService.search(search).pipe(map((events) => events.map((event) => {
|
|
23
|
+
const regex = RegExp(`(${search})` ?? '(/-/-/)', 'gid');
|
|
24
|
+
const html = `${padId.fn(event.id)} - ${event.name}`;
|
|
25
|
+
return {
|
|
26
|
+
...event,
|
|
27
|
+
html: html.replaceAll(regex, (matched, capture1) => `<b>${capture1}</b>`)
|
|
28
|
+
};
|
|
29
|
+
})));
|
|
30
|
+
}), catchError(() => {
|
|
31
|
+
throw new Error('Search Equipment problem');
|
|
32
|
+
}), shareReplay());
|
|
33
|
+
}
|
|
34
|
+
selectedEventChange($event) {
|
|
35
|
+
this.onEventSearch$.next();
|
|
36
|
+
if (typeof $event === 'object') {
|
|
37
|
+
this.eventToAdd = $event;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.eventToAdd = undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
closeModal() {
|
|
44
|
+
this.dialog.close({ value: 'cancel' });
|
|
45
|
+
}
|
|
46
|
+
add() {
|
|
47
|
+
this.dialog.close({ value: 'add', event: this.eventToAdd });
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HvyEventAddEventComponent, deps: [{ token: i1.PryDialogRef }, { token: PRY_DIALOG_DATA }, { token: i2.EventService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: HvyEventAddEventComponent, selector: "hvy-add-event", ngImport: i0, template: "<div class=\"o-hvy-event-detail-add\">\n <h3>{{ '@hvy.event.add.title' | i18n }}</h3>\n <p>{{ '@hvy.event.add.description' | i18n }}</p>\n\n <div class=\"o-hvy-event-detail-add__container\">\n <label for=\"event\">{{ '@hvy.event.add.search' | i18n }}<span class=\"required\">*</span> :</label>\n <pry-select\n [items]=\"events$ | async\"\n bindLabel=\"name\"\n [(ngModel)]=\"eventSelectValue\"\n (ngModelChange)=\"selectedEventChange($event)\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n [placeholder]=\"'@hvy.event.parentEvent.placeholder' | i18n\"\n id=\"event\"\n [template]=\"templateOption\"\n class=\"o-hvy-event-detail-add__event\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"u-display-flex -column\">\n <span [innerHTML]=\"item.html\"></span>\n </div>\n </ng-template>\n </div>\n\n <div class=\"o-hvy-event-detail-add__buttons\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"!eventToAdd\" (click)=\"add()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeModal()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HvyEventAddEventComponent, decorators: [{
|
|
53
|
+
type: Component,
|
|
54
|
+
args: [{ selector: 'hvy-add-event', template: "<div class=\"o-hvy-event-detail-add\">\n <h3>{{ '@hvy.event.add.title' | i18n }}</h3>\n <p>{{ '@hvy.event.add.description' | i18n }}</p>\n\n <div class=\"o-hvy-event-detail-add__container\">\n <label for=\"event\">{{ '@hvy.event.add.search' | i18n }}<span class=\"required\">*</span> :</label>\n <pry-select\n [items]=\"events$ | async\"\n bindLabel=\"name\"\n [(ngModel)]=\"eventSelectValue\"\n (ngModelChange)=\"selectedEventChange($event)\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n [placeholder]=\"'@hvy.event.parentEvent.placeholder' | i18n\"\n id=\"event\"\n [template]=\"templateOption\"\n class=\"o-hvy-event-detail-add__event\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"u-display-flex -column\">\n <span [innerHTML]=\"item.html\"></span>\n </div>\n </ng-template>\n </div>\n\n <div class=\"o-hvy-event-detail-add__buttons\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"!eventToAdd\" (click)=\"add()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeModal()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n</div>\n" }]
|
|
55
|
+
}], ctorParameters: () => [{ type: i1.PryDialogRef }, { type: undefined, decorators: [{
|
|
56
|
+
type: Inject,
|
|
57
|
+
args: [PRY_DIALOG_DATA]
|
|
58
|
+
}] }, { type: i2.EventService }] });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWV2ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvaHlwZXJ2aXNvci9zcmMvbGliL2V2ZW50L2RldGFpbC9hZGQtZXZlbnQvYWRkLWV2ZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvaHlwZXJ2aXNvci9zcmMvbGliL2V2ZW50L2RldGFpbC9hZGQtZXZlbnQvYWRkLWV2ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBYyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdqRixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU16RCxNQUFNLE9BQU8seUJBQXlCO0lBTXBDLFlBQ1UsTUFBK0MsRUFFaEQsSUFBUSxFQUNQLFlBQTBCO1FBSDFCLFdBQU0sR0FBTixNQUFNLENBQXlDO1FBRWhELFNBQUksR0FBSixJQUFJLENBQUk7UUFDUCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVRwQyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMscUJBQWdCLEdBQXlDLFNBQVMsQ0FBQztRQVVqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUNWLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFLLFFBQVEsSUFBSyxJQUFJLENBQUMsZ0JBQTJCLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3ZGLENBQUMsQ0FBRSxJQUFJLENBQUMsZ0JBQTJCO2dCQUNuQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUMxQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckQsT0FBTztvQkFDTCxHQUFHLEtBQUs7b0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sUUFBUSxNQUFNLENBQUM7aUJBQzNELENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQVc7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs4R0FyRFUseUJBQXlCLDhDQVExQixlQUFlO2tHQVJkLHlCQUF5QixxRENidEMsdXZDQWdDQTs7MkZEbkJhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSxlQUFlOzswQkFXdEIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFJZX0RJQUxPR19EQVRBLCBQcnlEaWFsb2dSZWYgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHlwRXZlbnREZXRhaWxzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvZXZlbnQvaHlwLWV2ZW50LWRldGFpbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nIH0gZnJvbSAnLi4vZXZlbnQtZGV0YWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50L2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFkSWQgfSBmcm9tICcuLi8uLi8uLi9nZW5lcmFsL3BhZC1pZC5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2h2eS1hZGQtZXZlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLWV2ZW50LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBIdnlFdmVudEFkZEV2ZW50Q29tcG9uZW50IHtcbiAgb25FdmVudFNlYXJjaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBldmVudFNlbGVjdFZhbHVlOiBzdHJpbmcgfCBIeXBFdmVudERldGFpbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGV2ZW50cyQ6IE9ic2VydmFibGU8SHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nW10+O1xuICBldmVudFRvQWRkPzogSHlwRXZlbnREZXRhaWxzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nOiBQcnlEaWFsb2dSZWY8SHZ5RXZlbnRBZGRFdmVudENvbXBvbmVudD4sXG4gICAgQEluamVjdChQUllfRElBTE9HX0RBVEEpXG4gICAgcHVibGljIGRhdGE6IHt9LFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5ldmVudHMkID0gdGhpcy5vbkV2ZW50U2VhcmNoJC5waXBlKHN0YXJ0V2l0aCgpLCBkZWJvdW5jZVRpbWUoNTAwKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSA9PT0gJ3N0cmluZycgJiYgKHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSBhcyBzdHJpbmcpLmxlbmd0aCA+IDJcbiAgICAgICAgICAgID8gKHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNlYXJjaChzZWFyY2gpLnBpcGUoXG4gICAgICAgICAgbWFwKChldmVudHMpID0+XG4gICAgICAgICAgICBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZWdleCA9IFJlZ0V4cChgKCR7c2VhcmNofSlgID8/ICcoLy0vLS8pJywgJ2dpZCcpO1xuICAgICAgICAgICAgICBjb25zdCBodG1sID0gYCR7cGFkSWQuZm4oZXZlbnQuaWQpfSAtICR7ZXZlbnQubmFtZX1gO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICAgIGh0bWw6IGh0bWwucmVwbGFjZUFsbChyZWdleCwgKG1hdGNoZWQ6IHN0cmluZywgY2FwdHVyZTE6IHN0cmluZykgPT4gYDxiPiR7Y2FwdHVyZTF9PC9iPmApXG4gICAgICAgICAgICAgIH0gYXMgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlYXJjaCBFcXVpcG1lbnQgcHJvYmxlbScpO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdGVkRXZlbnRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uRXZlbnRTZWFyY2gkLm5leHQoKTtcbiAgICBpZiAodHlwZW9mICRldmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuZXZlbnRUb0FkZCA9ICRldmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ldmVudFRvQWRkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5kaWFsb2cuY2xvc2UoeyB2YWx1ZTogJ2NhbmNlbCcgfSk7XG4gIH1cblxuICBhZGQoKSB7XG4gICAgdGhpcy5kaWFsb2cuY2xvc2UoeyB2YWx1ZTogJ2FkZCcsIGV2ZW50OiB0aGlzLmV2ZW50VG9BZGQgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudC1kZXRhaWwtYWRkXCI+XG4gIDxoMz57eyAnQGh2eS5ldmVudC5hZGQudGl0bGUnIHwgaTE4biB9fTwvaDM+XG4gIDxwPnt7ICdAaHZ5LmV2ZW50LmFkZC5kZXNjcmlwdGlvbicgfCBpMThuIH19PC9wPlxuXG4gIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudC1kZXRhaWwtYWRkX19jb250YWluZXJcIj5cbiAgICA8bGFiZWwgZm9yPVwiZXZlbnRcIj57eyAnQGh2eS5ldmVudC5hZGQuc2VhcmNoJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvbGFiZWw+XG4gICAgPHByeS1zZWxlY3RcbiAgICAgIFtpdGVtc109XCJldmVudHMkIHwgYXN5bmNcIlxuICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICBbKG5nTW9kZWwpXT1cImV2ZW50U2VsZWN0VmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRFdmVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiXG4gICAgICBbZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlXT1cInRydWVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidAaHZ5LmV2ZW50LnBhcmVudEV2ZW50LnBsYWNlaG9sZGVyJyB8IGkxOG5cIlxuICAgICAgaWQ9XCJldmVudFwiXG4gICAgICBbdGVtcGxhdGVdPVwidGVtcGxhdGVPcHRpb25cIlxuICAgICAgY2xhc3M9XCJvLWh2eS1ldmVudC1kZXRhaWwtYWRkX19ldmVudFwiXG4gICAgPjwvcHJ5LXNlbGVjdD5cbiAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlT3B0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1jb2x1bW5cIj5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLmh0bWxcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnQtZGV0YWlsLWFkZF9fYnV0dG9uc1wiPlxuICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCIhZXZlbnRUb0FkZFwiIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAge3sgJ0BodnkuYWN0aW9uLnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIj57eyAnQGh2eS5hY3Rpb24uY2FuY2VsJyB8IGkxOG4gfX08L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|