@provoly/dashboard 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +1 -0
  2. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +4 -3
  3. package/esm2022/lib/core/components/share/access-rights-share/access-rights-share.component.mjs +127 -0
  4. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +1 -1
  5. package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +83 -0
  6. package/esm2022/lib/core/components/share/share.module.mjs +9 -7
  7. package/esm2022/lib/core/components/share/share.utils.mjs +46 -1
  8. package/esm2022/lib/core/i18n/en.translations.mjs +15 -7
  9. package/esm2022/lib/core/i18n/fr.translations.mjs +16 -7
  10. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  11. package/esm2022/lib/core/public-api.mjs +3 -2
  12. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +2 -2
  13. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
  14. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +2 -2
  15. package/esm2022/lib/dashboard/store/manifest.service.mjs +3 -3
  16. package/esm2022/presentation/components/presentation.component.mjs +14 -26
  17. package/esm2022/toolbox/components/save-view/save-view.component.mjs +8 -8
  18. package/esm2022/toolbox/components/share/share.component.mjs +12 -16
  19. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +1 -5
  20. package/esm2022/widgets/widget-template/component/widget-template.component.mjs +3 -3
  21. package/fesm2022/provoly-dashboard-dataset.mjs +3 -2
  22. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  23. package/fesm2022/provoly-dashboard-presentation.mjs +13 -25
  24. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  25. package/fesm2022/provoly-dashboard-toolbox.mjs +18 -22
  26. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  27. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +0 -4
  28. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  29. package/fesm2022/provoly-dashboard-widgets-widget-template.mjs +2 -2
  30. package/fesm2022/provoly-dashboard-widgets-widget-template.mjs.map +1 -1
  31. package/fesm2022/provoly-dashboard.mjs +196 -22
  32. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  33. package/lib/core/components/share/access-rights-share/access-rights-share.component.d.ts +47 -0
  34. package/lib/core/components/share/{share.component.d.ts → legacy-share/share.component.d.ts} +1 -1
  35. package/lib/core/components/share/share.module.d.ts +10 -8
  36. package/lib/core/components/share/share.utils.d.ts +18 -0
  37. package/lib/core/i18n/en.translations.d.ts +12 -4
  38. package/lib/core/i18n/fr.translations.d.ts +13 -4
  39. package/lib/core/model/manifest.interface.d.ts +3 -1
  40. package/lib/core/public-api.d.ts +2 -1
  41. package/lib/dashboard/store/dashboard.actions.d.ts +6 -2
  42. package/lib/dashboard/store/manifest.service.d.ts +3 -1
  43. package/package.json +37 -37
  44. package/presentation/components/presentation.component.d.ts +7 -7
  45. package/styles/components/_o-access-rights-share.scss +73 -0
  46. package/styles/components/_o-pry-admin-classes-customize.scss +4 -4
  47. package/styles/main.scss +1 -0
  48. package/toolbox/components/save-view/save-view.component.d.ts +6 -2
  49. package/toolbox/components/share/share.component.d.ts +6 -4
  50. package/widgets/widget-template/component/widget-template.component.d.ts +1 -1
  51. package/esm2022/lib/core/components/share/share.component.mjs +0 -83
@@ -1,83 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, forwardRef, Input } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import equal from 'fast-deep-equal/es6';
4
- import { PryVisibilityType } from './share.model';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "../select/select.component";
9
- import * as i4 from "../../i18n/i18n.pipe";
10
- export class PryShareComponent {
11
- constructor(_cd) {
12
- this._cd = _cd;
13
- this._onChange = (_) => { };
14
- this._onTouched = () => { };
15
- this._disabled = false;
16
- this.PryVisibilityType = PryVisibilityType;
17
- this.labelProperty = 'label';
18
- this.valueProperty = 'value';
19
- this.users$ = null;
20
- this.visibilityTypes = [];
21
- }
22
- ngOnInit() {
23
- this.visibilityTypes = Object.keys(PryVisibilityType)
24
- .filter((x) => !(parseInt(x) >= 0))
25
- .filter((x) => (!this.users$ ? x !== PryVisibilityType.RESTRICTED : true))
26
- .map((label) => ({ label: label.toLowerCase(), value: label, icon: `${label.toLowerCase()}` }));
27
- }
28
- registerOnChange(fn) {
29
- this._onChange = fn;
30
- }
31
- registerOnTouched(fn) {
32
- this._onTouched = fn;
33
- }
34
- setDisabledState(isDisabled) {
35
- this._disabled = isDisabled;
36
- this._cd.markForCheck();
37
- }
38
- writeValueUsers(obj) {
39
- if (!equal(this.value?.users, obj)) {
40
- this.writeValue({ type: this.value?.type, users: obj });
41
- }
42
- }
43
- writeValueType(type) {
44
- if (this.value?.type !== type) {
45
- this.writeValue({ type, users: this.value?.users });
46
- }
47
- }
48
- writeValue(obj) {
49
- if (!equal(this.value, obj)) {
50
- this.value = obj;
51
- this._onChange(this.value);
52
- this._onTouched();
53
- this._cd.markForCheck();
54
- }
55
- }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryShareComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
57
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryShareComponent, selector: "pry-share", inputs: { value: "value", labelProperty: "labelProperty", valueProperty: "valueProperty", users$: "users$" }, providers: [
58
- {
59
- provide: NG_VALUE_ACCESSOR,
60
- useExisting: forwardRef(() => PryShareComponent),
61
- multi: true
62
- }
63
- ], ngImport: i0, template: "<div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"share_type\">{{ '@pry.share.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"writeValueType($event)\"\n [items]=\"visibilityTypes\"\n [ngModel]=\"value?.type\"\n [disabled]=\"_disabled\"\n i18nPrefix=\"@pry.share.\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"share_type\"\n bindIcon=\"icon\"\n [iconSize]=\"[21, 18]\"\n ></pry-select>\n</div>\n\n<ng-container *ngIf=\"value?.type === PryVisibilityType.RESTRICTED\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"users\">{{ '@pry.share.users' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"writeValueUsers($event)\"\n [items]=\"users$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"value?.users\"\n [disabled]=\"_disabled\"\n [bindLabel]=\"labelProperty\"\n [bindValue]=\"valueProperty\"\n [autocomplete]=\"true\"\n id=\"users\"\n ></pry-select>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryShareComponent, decorators: [{
66
- type: Component,
67
- args: [{ selector: 'pry-share', providers: [
68
- {
69
- provide: NG_VALUE_ACCESSOR,
70
- useExisting: forwardRef(() => PryShareComponent),
71
- multi: true
72
- }
73
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"share_type\">{{ '@pry.share.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"writeValueType($event)\"\n [items]=\"visibilityTypes\"\n [ngModel]=\"value?.type\"\n [disabled]=\"_disabled\"\n i18nPrefix=\"@pry.share.\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"share_type\"\n bindIcon=\"icon\"\n [iconSize]=\"[21, 18]\"\n ></pry-select>\n</div>\n\n<ng-container *ngIf=\"value?.type === PryVisibilityType.RESTRICTED\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"users\">{{ '@pry.share.users' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"writeValueUsers($event)\"\n [items]=\"users$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"value?.users\"\n [disabled]=\"_disabled\"\n [bindLabel]=\"labelProperty\"\n [bindValue]=\"valueProperty\"\n [autocomplete]=\"true\"\n id=\"users\"\n ></pry-select>\n </div>\n</ng-container>\n" }]
74
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { value: [{
75
- type: Input
76
- }], labelProperty: [{
77
- type: Input
78
- }], valueProperty: [{
79
- type: Input
80
- }], users$: [{
81
- type: Input
82
- }] } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2NvcmUvY29tcG9uZW50cy9zaGFyZS9zaGFyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9jb21wb25lbnRzL3NoYXJlL3NoYXJlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBRXhDLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWNqRSxNQUFNLE9BQU8saUJBQWlCO0lBVzVCLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBVmxDLGNBQVMsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzNCLGVBQVUsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDOUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUU3QixrQkFBYSxHQUFHLE9BQU8sQ0FBQztRQUN4QixrQkFBYSxHQUFHLE9BQU8sQ0FBQztRQUN4QixXQUFNLEdBQTZCLElBQUksQ0FBQztRQUNqRCxvQkFBZSxHQUFxRCxFQUFFLENBQUM7SUFFMUIsQ0FBQztJQUU5QyxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ2xE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dHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJ5VmlzaWJpbGl0eSwgUHJ5VmlzaWJpbGl0eVR5cGUgfSBmcm9tICcuL3NoYXJlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXNoYXJlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NoYXJlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQcnlTaGFyZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUHJ5U2hhcmVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBQcnlWaXNpYmlsaXR5VHlwZSA9IFByeVZpc2liaWxpdHlUeXBlO1xuICBASW5wdXQoKSB2YWx1ZT86IFByeVZpc2liaWxpdHk7XG4gIEBJbnB1dCgpIGxhYmVsUHJvcGVydHkgPSAnbGFiZWwnO1xuICBASW5wdXQoKSB2YWx1ZVByb3BlcnR5ID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgdXNlcnMkOiBPYnNlcnZhYmxlPGFueVtdPiB8IG51bGwgPSBudWxsO1xuICB2aXNpYmlsaXR5VHlwZXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgaWNvbjogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2liaWxpdHlUeXBlcyA9IE9iamVjdC5rZXlzKFByeVZpc2liaWxpdHlUeXBlKVxuICAgICAgLmZpbHRlcigoeCkgPT4gIShwYXJzZUludCh4KSA+PSAwKSlcbiAgICAgIC5maWx0ZXIoKHgpID0+ICghdGhpcy51c2VycyQgPyB4ICE9PSBQcnlWaXNpYmlsaXR5VHlwZS5SRVNUUklDVEVEIDogdHJ1ZSkpXG4gICAgICAubWFwKChsYWJlbCkgPT4gKHsgbGFiZWw6IGxhYmVsLnRvTG93ZXJDYXNlKCksIHZhbHVlOiBsYWJlbCwgaWNvbjogYCR7bGFiZWwudG9Mb3dlckNhc2UoKX1gIH0pKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlVXNlcnMob2JqOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghZXF1YWwodGhpcy52YWx1ZT8udXNlcnMsIG9iaikpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh7IHR5cGU6IHRoaXMudmFsdWU/LnR5cGUsIHVzZXJzOiBvYmogfSk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZVR5cGUodHlwZTogUHJ5VmlzaWJpbGl0eVR5cGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZT8udHlwZSAhPT0gdHlwZSkge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHsgdHlwZSwgdXNlcnM6IHRoaXMudmFsdWU/LnVzZXJzIH0pO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcbiAgICBpZiAoIWVxdWFsKHRoaXMudmFsdWUsIG9iaikpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBvYmo7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJzaGFyZV90eXBlXCI+e3sgJ0Bwcnkuc2hhcmUudHlwZScgfCBpMThuIH19PC9sYWJlbD5cbiAgPHByeS1zZWxlY3RcbiAgICAobmdNb2RlbENoYW5nZSk9XCJ3cml0ZVZhbHVlVHlwZSgkZXZlbnQpXCJcbiAgICBbaXRlbXNdPVwidmlzaWJpbGl0eVR5cGVzXCJcbiAgICBbbmdNb2RlbF09XCJ2YWx1ZT8udHlwZVwiXG4gICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXG4gICAgaTE4blByZWZpeD1cIkBwcnkuc2hhcmUuXCJcbiAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgIGlkPVwic2hhcmVfdHlwZVwiXG4gICAgYmluZEljb249XCJpY29uXCJcbiAgICBbaWNvblNpemVdPVwiWzIxLCAxOF1cIlxuICA+PC9wcnktc2VsZWN0PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWx1ZT8udHlwZSA9PT0gUHJ5VmlzaWJpbGl0eVR5cGUuUkVTVFJJQ1RFRFwiPlxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInVzZXJzXCI+e3sgJ0Bwcnkuc2hhcmUudXNlcnMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgPHByeS1zZWxlY3RcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIndyaXRlVmFsdWVVc2VycygkZXZlbnQpXCJcbiAgICAgIFtpdGVtc109XCJ1c2VycyQgfCBhc3luY1wiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiXG4gICAgICBbbmdNb2RlbF09XCJ2YWx1ZT8udXNlcnNcIlxuICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXG4gICAgICBbYmluZExhYmVsXT1cImxhYmVsUHJvcGVydHlcIlxuICAgICAgW2JpbmRWYWx1ZV09XCJ2YWx1ZVByb3BlcnR5XCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiXG4gICAgICBpZD1cInVzZXJzXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19