@openmrs/ngx-formentry 3.0.1-pre.64 → 3.0.1-pre.68
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/bundles/openmrs-ngx-formentry.umd.js +62 -51
- package/bundles/openmrs-ngx-formentry.umd.js.map +1 -1
- package/components/radio-button/radio.component.d.ts +13 -9
- package/esm2015/components/radio-button/radio.component.js +44 -38
- package/esm2015/form-entry/form-factory/question.factory.js +6 -3
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/base-options.js +1 -1
- package/esm2015/form-entry/question-models/interfaces/radio-button-options.js +1 -1
- package/esm2015/form-entry/question-models/question-base.js +2 -2
- package/esm2015/form-entry/question-models/radio-button.model.js +2 -2
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +8 -8
- package/fesm2015/openmrs-ngx-formentry.js +58 -49
- package/fesm2015/openmrs-ngx-formentry.js.map +1 -1
- package/form-entry/question-models/interfaces/base-options.d.ts +1 -1
- package/form-entry/question-models/interfaces/radio-button-options.d.ts +1 -0
- package/form-entry/question-models/question-base.d.ts +1 -1
- package/form-entry/question-models/radio-button.model.d.ts +2 -4
- package/form-entry/value-adapters/obs-adapter-helper.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class RadioButtonControlComponent implements OnInit {
|
|
4
|
+
export declare class RadioButtonControlComponent implements ControlValueAccessor, OnInit {
|
|
4
5
|
id: String;
|
|
5
|
-
selected: any;
|
|
6
6
|
options: Array<any>;
|
|
7
|
-
|
|
7
|
+
selected: any;
|
|
8
|
+
allowUnselect: boolean;
|
|
9
|
+
private _value;
|
|
8
10
|
ngOnInit(): void;
|
|
9
11
|
writeValue(value: any): void;
|
|
10
|
-
registerOnChange(fn: (
|
|
12
|
+
registerOnChange(fn: (newValue?: any, emitModelEvent?: boolean) => void): void;
|
|
11
13
|
registerOnTouched(fn: () => void): void;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
get value(): any;
|
|
15
|
+
set value(value: any);
|
|
16
|
+
handleClick(option: any): void;
|
|
17
|
+
handleChange(option: any): void;
|
|
18
|
+
onChange: (args: any) => void;
|
|
19
|
+
onTouched: () => void;
|
|
16
20
|
static ɵfac: i0.ɵɵFactoryDeclaration<RadioButtonControlComponent, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonControlComponent, "ofe-radio-button", never, { "id": "id"; "
|
|
21
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonControlComponent, "ofe-radio-button", never, { "id": "id"; "options": "options"; "selected": "selected"; "allowUnselect": "allowUnselect"; }, {}, never, never>;
|
|
18
22
|
}
|
|
@@ -4,60 +4,66 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
export class RadioButtonControlComponent {
|
|
6
6
|
constructor() {
|
|
7
|
-
this.
|
|
7
|
+
this._value = undefined;
|
|
8
|
+
this.onChange = (args) => { };
|
|
8
9
|
this.onTouched = () => { };
|
|
9
10
|
}
|
|
10
11
|
ngOnInit() {
|
|
11
|
-
this.options = this.options.map((
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
this.options = this.options.map((opt) => (Object.assign(Object.assign({}, opt), { checked: false })));
|
|
13
|
+
if (Boolean(this.selected)) {
|
|
14
|
+
const maybeOpt = this.options.find((opt) => opt.value === this.selected);
|
|
15
|
+
if (maybeOpt) {
|
|
16
|
+
Object.assign(maybeOpt, { checked: true });
|
|
17
|
+
this.value = this.selected;
|
|
15
18
|
}
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
writeValue(value) {
|
|
22
|
+
this.value = value;
|
|
18
23
|
}
|
|
19
|
-
writeValue(value) { }
|
|
20
24
|
registerOnChange(fn) {
|
|
21
25
|
this.onChange = fn;
|
|
22
26
|
}
|
|
23
27
|
registerOnTouched(fn) {
|
|
24
28
|
this.onTouched = fn;
|
|
25
29
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.selected = o.value;
|
|
30
|
-
Object.assign(o, { checked: true });
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
this.selected = null;
|
|
34
|
-
Object.assign(o, { checked: false });
|
|
35
|
-
}
|
|
36
|
-
});
|
|
30
|
+
get value() {
|
|
31
|
+
var _a;
|
|
32
|
+
return (_a = this._value) !== null && _a !== void 0 ? _a : "";
|
|
37
33
|
}
|
|
38
|
-
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
34
|
+
set value(value) {
|
|
35
|
+
this._value = value;
|
|
36
|
+
}
|
|
37
|
+
handleClick(option) {
|
|
38
|
+
console.log("handleClick", option);
|
|
39
|
+
if (this.allowUnselect && option.checked) {
|
|
40
|
+
option.checked = false;
|
|
41
|
+
// doesn't fire by itself, so we create a synthetic change event
|
|
42
|
+
this.handleChange(option);
|
|
43
|
+
}
|
|
44
|
+
else if (!option.checked) {
|
|
45
|
+
option.checked = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
handleChange(option) {
|
|
49
|
+
console.log("handleChange", option);
|
|
50
|
+
if (!option.checked) {
|
|
51
|
+
this.value = undefined;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.value = option.value;
|
|
55
|
+
}
|
|
56
|
+
this.onChange(this.value);
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
59
|
RadioButtonControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RadioButtonControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
54
|
-
RadioButtonControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: RadioButtonControlComponent, selector: "ofe-radio-button", inputs: { id: "id",
|
|
60
|
+
RadioButtonControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: RadioButtonControlComponent, selector: "ofe-radio-button", inputs: { id: "id", options: "options", selected: "selected", allowUnselect: "allowUnselect" }, providers: [
|
|
55
61
|
{
|
|
56
62
|
provide: NG_VALUE_ACCESSOR,
|
|
57
63
|
useExisting: forwardRef(() => RadioButtonControlComponent),
|
|
58
64
|
multi: true
|
|
59
65
|
}
|
|
60
|
-
], ngImport: i0, template: "<fieldset class=\"
|
|
66
|
+
], ngImport: i0, template: "<fieldset class=\"cds--fieldset\">\n <div\n *ngFor=\"let option of options; let i = index\"\n class=\"cds--form-item cds--radio-wrapper\"\n >\n <label class=\"form-control no-border\">\n <input\n type=\"radio\"\n [id]=\"id + '_' + i\"\n [name]=\"id\"\n [checked]=\"option.checked\"\n [value]=\"option.value\"\n (click)=\"handleClick(option)\"\n (change)=\"handleChange(option)\"\n />\n {{ option.label }}\n </label>\n </div>\n</fieldset>\n", directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
61
67
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RadioButtonControlComponent, decorators: [{
|
|
62
68
|
type: Component,
|
|
63
69
|
args: [{
|
|
@@ -73,11 +79,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
73
79
|
}]
|
|
74
80
|
}], propDecorators: { id: [{
|
|
75
81
|
type: Input
|
|
76
|
-
}], selected: [{
|
|
77
|
-
type: Input
|
|
78
82
|
}], options: [{
|
|
79
83
|
type: Input
|
|
80
|
-
}],
|
|
84
|
+
}], selected: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], allowUnselect: [{
|
|
81
87
|
type: Input
|
|
82
88
|
}] } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9yYWRpby1idXR0b24vcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9yYWRpby1idXR0b24vcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBYXpFLE1BQU0sT0FBTywyQkFBMkI7SUFYeEM7UUFpQlUsV0FBTSxHQUFRLFNBQVMsQ0FBQztRQXdEekIsYUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDeEIsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztLQUM3QjtJQXhEUSxRQUFRO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsaUNBQU0sR0FBRyxLQUFFLE9BQU8sRUFBRSxLQUFLLElBQUcsQ0FBQyxDQUFDO1FBRXZFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekUsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVU7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQXNEO1FBQzVFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxFQUFjO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLEtBQUs7O1FBQ1AsT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQU07UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDeEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsZ0VBQWdFO1lBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7YUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFTSxZQUFZLENBQUMsTUFBTTtRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzNCO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7eUhBNURVLDJCQUEyQjs2R0FBM0IsMkJBQTJCLDJJQVIzQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkNaSCx3Z0JBbUJBOzRGRExhLDJCQUEyQjtrQkFYdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsd0JBQXdCO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUM7NEJBQzFELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGOzhCQUVpQixFQUFFO3NCQUFqQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29mZS1yYWRpby1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhZGlvQnV0dG9uQ29udHJvbENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbkNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGlkOiBTdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBBcnJheTxhbnk+O1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IGFueTtcbiAgQElucHV0KCkgcHVibGljIGFsbG93VW5zZWxlY3Q6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0KSA9PiAoeyAuLi5vcHQsIGNoZWNrZWQ6IGZhbHNlIH0pKTtcbiAgICBcbiAgICBpZiAoQm9vbGVhbih0aGlzLnNlbGVjdGVkKSkge1xuICAgICAgY29uc3QgbWF5YmVPcHQgPSB0aGlzLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgaWYgKG1heWJlT3B0KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obWF5YmVPcHQsIHsgY2hlY2tlZDogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAobmV3VmFsdWU/OiBhbnksIGVtaXRNb2RlbEV2ZW50PzogYm9vbGVhbikgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gXCJcIjtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbGljayhvcHRpb24pIHtcbiAgICBjb25zb2xlLmxvZyhcImhhbmRsZUNsaWNrXCIsIG9wdGlvbik7XG4gICAgaWYgKHRoaXMuYWxsb3dVbnNlbGVjdCAmJiBvcHRpb24uY2hlY2tlZCkge1xuICAgICAgb3B0aW9uLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIC8vIGRvZXNuJ3QgZmlyZSBieSBpdHNlbGYsIHNvIHdlIGNyZWF0ZSBhIHN5bnRoZXRpYyBjaGFuZ2UgZXZlbnRcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG9wdGlvbik7XG4gICAgfSBlbHNlIGlmICghb3B0aW9uLmNoZWNrZWQpIHtcbiAgICAgIG9wdGlvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2hhbmdlKG9wdGlvbikge1xuICAgIGNvbnNvbGUubG9nKFwiaGFuZGxlQ2hhbmdlXCIsIG9wdGlvbik7XG4gICAgaWYgKCFvcHRpb24uY2hlY2tlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlID0gKGFyZ3MpID0+IHt9O1xuICBwdWJsaWMgb25Ub3VjaGVkID0gKCkgPT4ge307XG59XG4iLCI8ZmllbGRzZXQgY2xhc3M9XCJjZHMtLWZpZWxkc2V0XCI+XG4gIDxkaXZcbiAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgIGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW0gY2RzLS1yYWRpby13cmFwcGVyXCJcbiAgPlxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbCBuby1ib3JkZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBbaWRdPVwiaWQgKyAnXycgKyBpXCJcbiAgICAgICAgW25hbWVdPVwiaWRcIlxuICAgICAgICBbY2hlY2tlZF09XCJvcHRpb24uY2hlY2tlZFwiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2sob3B0aW9uKVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKG9wdGlvbilcIlxuICAgICAgLz5cbiAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC9maWVsZHNldD5cbiJdfQ==
|