@eqproject/eqp-dynamic-module 2.10.66 → 2.10.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/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +33 -16
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +658 -32
- package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +2 -2
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +809 -15
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +98 -20
- package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +132 -69
- package/esm2020/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +159 -24
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +152 -7
- package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +180 -39
- package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +100 -78
- package/esm2020/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.mjs +103 -88
- package/esm2020/lib/components/private/field-templates/label-field-template/label-field-template.component.mjs +90 -17
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +217 -54
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +220 -37
- package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +263 -29
- package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +210 -18
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +35 -13
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +1 -1
- package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +4 -3
- package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +2 -2
- package/esm2020/lib/models/endPointConfiguration.model.mjs +7 -2
- package/esm2020/lib/models/fields/actionButton.model.mjs +3 -1
- package/esm2020/lib/models/fields/attachmentField.model.mjs +3 -1
- package/esm2020/lib/models/fields/booleanField.model.mjs +3 -1
- package/esm2020/lib/models/fields/dateField.model.mjs +3 -1
- package/esm2020/lib/models/fields/imageField.model.mjs +3 -1
- package/esm2020/lib/models/fields/imageSelectorField.model.mjs +3 -1
- package/esm2020/lib/models/fields/imageWithMarkersField.model.mjs +3 -1
- package/esm2020/lib/models/fields/labelField.model.mjs +3 -1
- package/esm2020/lib/models/fields/listValueField.model.mjs +3 -1
- package/esm2020/lib/models/fields/numericField.model.mjs +8 -1
- package/esm2020/lib/models/fields/textField.model.mjs +3 -1
- package/esm2020/lib/models/fields/textareaField.model.mjs +8 -1
- package/esm2020/lib/models/form.model.mjs +1 -1
- package/esm2020/lib/utils/google-fonts-injector.mjs +78 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +3621 -535
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +3530 -538
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +5 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +74 -6
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +208 -1
- package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +16 -10
- package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +17 -33
- package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +24 -11
- package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +21 -4
- package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +20 -16
- package/lib/components/private/field-templates/image-field-template/image-field-template.component.d.ts +15 -36
- package/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.d.ts +16 -37
- package/lib/components/private/field-templates/label-field-template/label-field-template.component.d.ts +16 -12
- package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +21 -28
- package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +25 -18
- package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +38 -10
- package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +26 -12
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +12 -2
- package/lib/models/endPointConfiguration.model.d.ts +1 -0
- package/lib/models/fields/actionButton.model.d.ts +12 -0
- package/lib/models/fields/attachmentField.model.d.ts +31 -3
- package/lib/models/fields/booleanField.model.d.ts +15 -0
- package/lib/models/fields/dateField.model.d.ts +46 -0
- package/lib/models/fields/imageField.model.d.ts +9 -0
- package/lib/models/fields/imageSelectorField.model.d.ts +23 -0
- package/lib/models/fields/imageWithMarkersField.model.d.ts +9 -0
- package/lib/models/fields/labelField.model.d.ts +5 -0
- package/lib/models/fields/listValueField.model.d.ts +38 -0
- package/lib/models/fields/numericField.model.d.ts +34 -0
- package/lib/models/fields/textField.model.d.ts +33 -0
- package/lib/models/fields/textareaField.model.d.ts +39 -0
- package/lib/models/form.model.d.ts +6 -0
- package/lib/utils/google-fonts-injector.d.ts +7 -0
- package/package.json +3 -3
|
@@ -9,14 +9,56 @@ import * as i3 from "@angular/material/radio";
|
|
|
9
9
|
import * as i4 from "@angular/material/slide-toggle";
|
|
10
10
|
import * as i5 from "@angular/forms";
|
|
11
11
|
import * as i6 from "@angular/common";
|
|
12
|
+
// Selettori CSS per BooleanField.
|
|
13
|
+
//
|
|
14
|
+
// Container → div wrapper esterno (#fieldUid stesso, selettore vuoto).
|
|
15
|
+
//
|
|
16
|
+
// Scelta → visual fill degli elementi di controllo, suddivisi per tipo:
|
|
17
|
+
// Toggle : host mat-slide-toggle (per CSS custom properties come --mdc-switch-selected-track-color)
|
|
18
|
+
// + .mdc-switch__track e .mdc-switch__handle (per background-color diretto)
|
|
19
|
+
// Checkbox: host mat-checkbox + .mdc-checkbox__background (fill del riquadro)
|
|
20
|
+
// Radio : host mat-radio-button + .mdc-radio__outer-circle (anello esterno)
|
|
21
|
+
// Per cambiare il COLORE del controllo usare background-color sui sub-elementi oppure
|
|
22
|
+
// CSS custom properties sul host: --mdc-switch-selected-track-color, --mdc-checkbox-selected-icon-color, ecc.
|
|
23
|
+
//
|
|
24
|
+
// Descrizione → il testo label del campo:
|
|
25
|
+
// Toggle/Checkbox: <label> figlio diretto del componente (senza classe fissa in AM15)
|
|
26
|
+
// Radio button : <mat-label> separato prima del mat-radio-group
|
|
27
|
+
const ELEMENT_SELECTORS = {
|
|
28
|
+
Container: '',
|
|
29
|
+
Scelta: [
|
|
30
|
+
' mat-slide-toggle',
|
|
31
|
+
' mat-slide-toggle .mdc-switch__track',
|
|
32
|
+
' mat-slide-toggle .mdc-switch__handle',
|
|
33
|
+
' mat-checkbox',
|
|
34
|
+
' .mdc-checkbox__background',
|
|
35
|
+
' mat-radio-button',
|
|
36
|
+
' .mdc-radio__outer-circle',
|
|
37
|
+
],
|
|
38
|
+
Descrizione: [
|
|
39
|
+
' mat-slide-toggle label',
|
|
40
|
+
' mat-checkbox label',
|
|
41
|
+
' mat-label',
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
const ELEMENTS = Object.keys(ELEMENT_SELECTORS);
|
|
45
|
+
const STATES = ['Normale', 'Mouseover', 'Focused', 'Readonly'];
|
|
46
|
+
const DEFAULT_FIELD_STYLES = {};
|
|
12
47
|
export class BooleanFieldTemplateComponent {
|
|
13
|
-
constructor() {
|
|
48
|
+
constructor(renderer) {
|
|
49
|
+
this.renderer = renderer;
|
|
14
50
|
this.formulaObject = {};
|
|
51
|
+
this.inConfig = false;
|
|
52
|
+
/** Incrementa dall'esterno per forzare il ricalcolo degli stili CSS (es. dal configuratore) */
|
|
53
|
+
this.styleVersion = 0;
|
|
54
|
+
/** Forza visivamente uno stato specifico nell'anteprima del configuratore */
|
|
55
|
+
this.forceState = null;
|
|
15
56
|
this.recordChange = new EventEmitter();
|
|
16
57
|
this.BoolPresentantioEnum = BoolPresentantioEnum;
|
|
58
|
+
this.styleEl = null;
|
|
59
|
+
this.statusSub = null;
|
|
17
60
|
}
|
|
18
61
|
initStyles() {
|
|
19
|
-
//Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html
|
|
20
62
|
if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)
|
|
21
63
|
this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);
|
|
22
64
|
}
|
|
@@ -24,8 +66,111 @@ export class BooleanFieldTemplateComponent {
|
|
|
24
66
|
if (this.record[this.field.Name] == undefined || this.record[this.field.Name] == null) {
|
|
25
67
|
this.record[this.field.Name] = this.field.IsTristate ? null : false;
|
|
26
68
|
}
|
|
69
|
+
this.fieldUid = 'bf-' + Math.random().toString(36).slice(2, 10);
|
|
27
70
|
this.updateField();
|
|
28
71
|
this.initStyles();
|
|
72
|
+
this.injectBooleanFieldStyles();
|
|
73
|
+
this.subscribeToFormStatus();
|
|
74
|
+
}
|
|
75
|
+
ngOnChanges(changes) {
|
|
76
|
+
if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {
|
|
77
|
+
this.injectBooleanFieldStyles();
|
|
78
|
+
this.updateStateClasses();
|
|
79
|
+
}
|
|
80
|
+
if (changes['forceState']) {
|
|
81
|
+
this.updateStateClasses();
|
|
82
|
+
}
|
|
83
|
+
if (changes['record'] != undefined && changes['record'].firstChange == false
|
|
84
|
+
&& JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
|
|
85
|
+
this.record = changes['record'].currentValue;
|
|
86
|
+
this.updateField();
|
|
87
|
+
this.updateStateClasses();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
ngOnDestroy() {
|
|
91
|
+
if (this.styleEl?.parentNode) {
|
|
92
|
+
this.styleEl.parentNode.removeChild(this.styleEl);
|
|
93
|
+
}
|
|
94
|
+
this.statusSub?.unsubscribe();
|
|
95
|
+
}
|
|
96
|
+
/** Rigenera il tag <style> con defaults + regole utente, entrambi scoped per #uid */
|
|
97
|
+
injectBooleanFieldStyles() {
|
|
98
|
+
if (!this.fieldUid)
|
|
99
|
+
return;
|
|
100
|
+
const css = this.field?.BooleanFieldStyleCSS ?? {};
|
|
101
|
+
let rules = this.buildCssRules(this.fieldUid, css);
|
|
102
|
+
if (!this.styleEl) {
|
|
103
|
+
this.styleEl = this.renderer.createElement('style');
|
|
104
|
+
this.styleEl.id = 'style-' + this.fieldUid;
|
|
105
|
+
this.renderer.appendChild(document.head, this.styleEl);
|
|
106
|
+
}
|
|
107
|
+
this.styleEl.textContent = rules;
|
|
108
|
+
}
|
|
109
|
+
/** Costruisce il selettore CSS per un dato elemento e stato */
|
|
110
|
+
getSelector(uid, state, s) {
|
|
111
|
+
switch (state) {
|
|
112
|
+
case 'Normale': return `#${uid}${s}`;
|
|
113
|
+
case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;
|
|
114
|
+
case 'Focused': return `#${uid}:focus-within${s}, #${uid}.eqp-state-focused${s}`;
|
|
115
|
+
case 'Readonly': return `#${uid}.eqp-readonly${s}`;
|
|
116
|
+
default: return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
buildCssRules(uid, css) {
|
|
120
|
+
const lines = [];
|
|
121
|
+
for (const el of ELEMENTS) {
|
|
122
|
+
const sEntry = ELEMENT_SELECTORS[el];
|
|
123
|
+
const selList = Array.isArray(sEntry) ? sEntry : [sEntry];
|
|
124
|
+
for (const state of STATES) {
|
|
125
|
+
const key = el + state;
|
|
126
|
+
const defaultVal = DEFAULT_FIELD_STYLES[key];
|
|
127
|
+
const userVal = css[key];
|
|
128
|
+
if (!defaultVal?.trim() && !userVal?.trim())
|
|
129
|
+
continue;
|
|
130
|
+
for (const s of selList) {
|
|
131
|
+
const selector = this.getSelector(uid, state, s);
|
|
132
|
+
if (!selector)
|
|
133
|
+
continue;
|
|
134
|
+
if (defaultVal?.trim())
|
|
135
|
+
lines.push(`${selector} { ${defaultVal} }`);
|
|
136
|
+
if (userVal?.trim())
|
|
137
|
+
lines.push(`${selector} { ${userVal} }`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return lines.join('\n');
|
|
142
|
+
}
|
|
143
|
+
/** Aggiorna le classi di stato sul wrapper (eqp-readonly, eqp-state-*) */
|
|
144
|
+
updateStateClasses() {
|
|
145
|
+
if (!this.fieldUid)
|
|
146
|
+
return;
|
|
147
|
+
const wrapper = document.getElementById(this.fieldUid);
|
|
148
|
+
if (!wrapper)
|
|
149
|
+
return;
|
|
150
|
+
this.toggleClass(wrapper, 'eqp-state-hover', this.forceState === 'Mouseover');
|
|
151
|
+
this.toggleClass(wrapper, 'eqp-state-focused', this.forceState === 'Focused');
|
|
152
|
+
if (this.forceState === 'Readonly') {
|
|
153
|
+
this.toggleClass(wrapper, 'eqp-readonly', true);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (this.forceState === 'Normale' || this.forceState === 'Mouseover' || this.forceState === 'Focused') {
|
|
157
|
+
this.toggleClass(wrapper, 'eqp-readonly', false);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');
|
|
161
|
+
this.toggleClass(wrapper, 'eqp-readonly', isReadonly);
|
|
162
|
+
}
|
|
163
|
+
toggleClass(el, cls, condition) {
|
|
164
|
+
if (condition)
|
|
165
|
+
this.renderer.addClass(el, cls);
|
|
166
|
+
else
|
|
167
|
+
this.renderer.removeClass(el, cls);
|
|
168
|
+
}
|
|
169
|
+
subscribeToFormStatus() {
|
|
170
|
+
this.statusSub?.unsubscribe();
|
|
171
|
+
if (this.field?.FormFormGroup) {
|
|
172
|
+
this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());
|
|
173
|
+
}
|
|
29
174
|
}
|
|
30
175
|
checkReadonly() {
|
|
31
176
|
if (this.field.ReadonlyIf) {
|
|
@@ -46,51 +191,41 @@ export class BooleanFieldTemplateComponent {
|
|
|
46
191
|
}
|
|
47
192
|
}
|
|
48
193
|
}
|
|
49
|
-
ngOnChanges(changes) {
|
|
50
|
-
// Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
|
|
51
|
-
if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
|
|
52
|
-
this.record = changes['record'].currentValue;
|
|
53
|
-
this.updateField();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
|
|
58
|
-
*/
|
|
59
194
|
updateField() {
|
|
60
|
-
// Gestione del readonly
|
|
61
195
|
this.checkReadonly();
|
|
62
|
-
// Gestione del valore legato alla visibilità
|
|
63
196
|
this.checkVisibility(false);
|
|
64
|
-
// Gestione del valore calcolato da formula
|
|
65
197
|
if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {
|
|
66
198
|
this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);
|
|
67
199
|
}
|
|
68
|
-
// Gestione del valore di default
|
|
69
200
|
if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {
|
|
70
201
|
this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;
|
|
71
202
|
}
|
|
72
203
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Metodo per emettere l'evento che il valore del record è cambiato.
|
|
75
|
-
*/
|
|
76
204
|
onRecordValueChange() {
|
|
205
|
+
this.updateStateClasses();
|
|
77
206
|
if (!this.field.Formula) {
|
|
78
207
|
this.recordChange.emit(this.record);
|
|
79
208
|
}
|
|
80
209
|
}
|
|
81
210
|
}
|
|
82
|
-
BooleanFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BooleanFieldTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
BooleanFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"field.FormFormGroup\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>", styles: ["::ng-deep mat-label.mr-3.ng-star-inserted{font-size:larger}::ng-deep mat-radio-group.mat-radio-group.ng-valid.ng-star-inserted{padding-left:10px}\n"], dependencies: [{ kind: "component", type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.MatCheckboxRequiredValidator, selector: "mat-checkbox[required][formControlName], mat-checkbox[required][formControl], mat-checkbox[required][ngModel]" }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i3.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i4.MatSlideToggleRequiredValidator, selector: "mat-slide-toggle[required][formControlName], mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]" }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
211
|
+
BooleanFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BooleanFieldTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
212
|
+
BooleanFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"field.FormFormGroup\" id=\"{{fieldUid}}\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>", styles: ["::ng-deep mat-label.mr-3.ng-star-inserted{font-size:larger}::ng-deep mat-radio-group.mat-radio-group.ng-valid.ng-star-inserted{padding-left:10px}\n"], dependencies: [{ kind: "component", type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.MatCheckboxRequiredValidator, selector: "mat-checkbox[required][formControlName], mat-checkbox[required][formControl], mat-checkbox[required][ngModel]" }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i3.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i4.MatSlideToggleRequiredValidator, selector: "mat-slide-toggle[required][formControlName], mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]" }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
84
213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BooleanFieldTemplateComponent, decorators: [{
|
|
85
214
|
type: Component,
|
|
86
|
-
args: [{ selector: 'boolean-field-template', template: "<div [formGroup]=\"field.FormFormGroup\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>", styles: ["::ng-deep mat-label.mr-3.ng-star-inserted{font-size:larger}::ng-deep mat-radio-group.mat-radio-group.ng-valid.ng-star-inserted{padding-left:10px}\n"] }]
|
|
87
|
-
}], ctorParameters: function () { return []; }, propDecorators: { field: [{
|
|
215
|
+
args: [{ selector: 'boolean-field-template', template: "<div [formGroup]=\"field.FormFormGroup\" id=\"{{fieldUid}}\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>", styles: ["::ng-deep mat-label.mr-3.ng-star-inserted{font-size:larger}::ng-deep mat-radio-group.mat-radio-group.ng-valid.ng-star-inserted{padding-left:10px}\n"] }]
|
|
216
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { field: [{
|
|
88
217
|
type: Input
|
|
89
218
|
}], record: [{
|
|
90
219
|
type: Input
|
|
91
220
|
}], formulaObject: [{
|
|
92
221
|
type: Input
|
|
222
|
+
}], inConfig: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], styleVersion: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], forceState: [{
|
|
227
|
+
type: Input
|
|
93
228
|
}], recordChange: [{
|
|
94
229
|
type: Output
|
|
95
230
|
}] } });
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRWxHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQU94RSxNQUFNLE9BQU8sNkJBQTZCO0lBWXhDO1FBUlMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDdkIsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsxRSx5QkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUU1QixDQUFDO0lBRWpCLFVBQVU7UUFDUixrRkFBa0Y7UUFDbEYsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksU0FBUztZQUM1RSxJQUFJLENBQUMsYUFB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bmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgQm9vbGVhbkZpZWxkLCBCb29sUHJlc2VudGFudGlvRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvYm9vbGVhbkZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYm9vbGVhbi1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9vbGVhbkZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBCb29sZWFuRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuLy92YXJpYWJpbGkgcGVyIGdlc3RpcmUgaWwgY3NzIGRlbGxhIGxhYmVsIGUgZGVsIGZpZWxkXHJcbkZpZWxkc3R5bGVPYmo6IGFueTtcclxuTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBCb29sUHJlc2VudGFudGlvRW51bSA9IEJvb2xQcmVzZW50YW50aW9FbnVtO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgLy9GdW56aW9uZSBwZXIgcGFyc2FyZSBpbCBjYW1wbyBzdHlsZWNzcyBkZWxsJ29nZ2V0dG8gZmllbGQgZWQgYXBwbGljYXJsbyBhbGwnaHRtbFxyXG4gICAgaWYodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZCkgICBcclxuICAgIHRoaXMuRmllbGRzdHlsZU9iaj0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gIH1cclxuICBcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IHVuZGVmaW5lZCB8fCB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuSXNUcmlzdGF0ZSA/IG51bGwgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKXtcclxuICAgIGlmICh0aGlzLmZpZWxkLlJlYWRvbmx5SWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuUmVhZG9ubHlJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmZpZWxkLlJlYWRvbmx5KXtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoZWNrVmlzaWJpbGl0eShkZWZhdWx0VmFsdWU6IGFueSl7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIGlmKCF0aGlzLmZpZWxkLkluTGlzdFZpZXcgJiYgIXRoaXMuZmllbGQuTWFpbnRhaW5fVmFsdWUpe1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV09ZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9ICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgLy8gR2VzdGlvbmUgZGVsIHJlYWRvbmx5XHJcbiAgICB0aGlzLmNoZWNrUmVhZG9ubHkoKTtcclxuICAgIC8vIEdlc3Rpb25lIGRlbCB2YWxvcmUgbGVnYXRvIGFsbGEgdmlzaWJpbGl0w6BcclxuICAgIHRoaXMuY2hlY2tWaXNpYmlsaXR5KGZhbHNlKTtcclxuICAgIC8vIEdlc3Rpb25lIGRlbCB2YWxvcmUgY2FsY29sYXRvIGRhIGZvcm11bGFcclxuICAgIGlmICgodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIHx8IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkgJiYgdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgLy8gR2VzdGlvbmUgZGVsIHZhbG9yZSBkaSBkZWZhdWx0XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUT0dHTEUgLS0+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bS5Ub2dnbGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBSQURJT0JVVFRPTiAtLT5cclxuICAgIDxtYXQtbGFiZWwgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiIGNsYXNzPVwibXItM1wiICpuZ0lmPVwiZmllbGQuUHJlc2V0YXRpb25UeXBlID09IEJvb2xQcmVzZW50YW50aW9FbnVtWydSYWRpbyBidXR0b24nXVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1sYWJlbD5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgKm5nSWY9XCJmaWVsZC5QcmVzZXRhdGlvblR5cGUgPT0gQm9vbFByZXNlbnRhbnRpb0VudW1bJ1JhZGlvIGJ1dHRvbiddXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbdmFsdWVdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPiBTaSA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtci0yIHBzLTJcIiBbdmFsdWVdPVwiZmFsc2VcIiBjb2xvcj1cInByaW1hcnlcIj4gTm8gPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXItMiBwcy0yXCIgW3ZhbHVlXT1cIm51bGxcIiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkLklzVHJpc3RhdGVcIj4gTkRcclxuICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICA8L21hdC1yYWRpby1ncm91cD5cclxuXHJcbiAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIC0tPlxyXG4gICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm1yLTJcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bS5DaGVja2JveFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIiA6IFwiXCIpfX1cclxuICAgIDwvbWF0LWNoZWNrYm94PlxyXG5cclxuICAgIDwhLS0gVE9ETzogVmlzdWFsaXp6YXppb25lIFwiU3RyaW5nYSB0cnVlIG8gZmFsc2VcIiBlIFwiTnVtZXJpY28gMCBvIDFcIiA/PyAtLT5cclxuPC9kaXY+Il19
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFzQyxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXhILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQUd4RSxrQ0FBa0M7QUFDbEMsRUFBRTtBQUNGLHVFQUF1RTtBQUN2RSxFQUFFO0FBQ0Ysd0VBQXdFO0FBQ3hFLHVHQUF1RztBQUN2Ryx3RkFBd0Y7QUFDeEYsZ0ZBQWdGO0FBQ2hGLGdGQUFnRjtBQUNoRix3RkFBd0Y7QUFDeEYsZ0hBQWdIO0FBQ2hILEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsd0ZBQXdGO0FBQ3hGLG9FQUFvRTtBQUNwRSxNQUFNLGlCQUFpQixHQUF5QztJQUM5RCxTQUFTLEVBQUksRUFBRTtJQUNmLE1BQU0sRUFBRTtRQUNOLG1CQUFtQjtRQUNu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cG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgQm9vbGVhbkZpZWxkLCBCb29sZWFuRmllbGRTdHlsZUNTUywgQm9vbFByZXNlbnRhbnRpb0VudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IElCYXNlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2lCYXNlRmllbGRDb21wb25lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgRGF0YUdldHRlclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuLy8gU2VsZXR0b3JpIENTUyBwZXIgQm9vbGVhbkZpZWxkLlxyXG4vL1xyXG4vLyBDb250YWluZXIg4oaSIGRpdiB3cmFwcGVyIGVzdGVybm8gKCNmaWVsZFVpZCBzdGVzc28sIHNlbGV0dG9yZSB2dW90bykuXHJcbi8vXHJcbi8vIFNjZWx0YSDihpIgdmlzdWFsIGZpbGwgZGVnbGkgZWxlbWVudGkgZGkgY29udHJvbGxvLCBzdWRkaXZpc2kgcGVyIHRpcG86XHJcbi8vICAgVG9nZ2xlICA6IGhvc3QgbWF0LXNsaWRlLXRvZ2dsZSAocGVyIENTUyBjdXN0b20gcHJvcGVydGllcyBjb21lIC0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcilcclxuLy8gICAgICAgICAgICAgKyAubWRjLXN3aXRjaF9fdHJhY2sgZSAubWRjLXN3aXRjaF9faGFuZGxlIChwZXIgYmFja2dyb3VuZC1jb2xvciBkaXJldHRvKVxyXG4vLyAgIENoZWNrYm94OiBob3N0IG1hdC1jaGVja2JveCArIC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgKGZpbGwgZGVsIHJpcXVhZHJvKVxyXG4vLyAgIFJhZGlvICAgOiBob3N0IG1hdC1yYWRpby1idXR0b24gKyAubWRjLXJhZGlvX19vdXRlci1jaXJjbGUgKGFuZWxsbyBlc3Rlcm5vKVxyXG4vLyAgIFBlciBjYW1iaWFyZSBpbCBDT0xPUkUgZGVsIGNvbnRyb2xsbyB1c2FyZSBiYWNrZ3JvdW5kLWNvbG9yIHN1aSBzdWItZWxlbWVudGkgb3BwdXJlXHJcbi8vICAgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzIHN1bCBob3N0OiAtLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3IsIC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIGVjYy5cclxuLy9cclxuLy8gRGVzY3JpemlvbmUg4oaSIGlsIHRlc3RvIGxhYmVsIGRlbCBjYW1wbzpcclxuLy8gICBUb2dnbGUvQ2hlY2tib3g6IDxsYWJlbD4gZmlnbGlvIGRpcmV0dG8gZGVsIGNvbXBvbmVudGUgKHNlbnphIGNsYXNzZSBmaXNzYSBpbiBBTTE1KVxyXG4vLyAgIFJhZGlvIGJ1dHRvbiAgIDogPG1hdC1sYWJlbD4gc2VwYXJhdG8gcHJpbWEgZGVsIG1hdC1yYWRpby1ncm91cFxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9ID0ge1xyXG4gIENvbnRhaW5lcjogICAnJyxcclxuICBTY2VsdGE6IFtcclxuICAgICcgbWF0LXNsaWRlLXRvZ2dsZScsXHJcbiAgICAnIG1hdC1zbGlkZS10b2dnbGUgLm1kYy1zd2l0Y2hfX3RyYWNrJyxcclxuICAgICcgbWF0LXNsaWRlLXRvZ2dsZSAubWRjLXN3aXRjaF9faGFuZGxlJyxcclxuICAgICcgbWF0LWNoZWNrYm94JyxcclxuICAgICcgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCcsXHJcbiAgICAnIG1hdC1yYWRpby1idXR0b24nLFxyXG4gICAgJyAubWRjLXJhZGlvX19vdXRlci1jaXJjbGUnLFxyXG4gIF0sXHJcbiAgRGVzY3JpemlvbmU6IFtcclxuICAgICcgbWF0LXNsaWRlLXRvZ2dsZSBsYWJlbCcsXHJcbiAgICAnIG1hdC1jaGVja2JveCBsYWJlbCcsXHJcbiAgICAnIG1hdC1sYWJlbCcsXHJcbiAgXSxcclxufTtcclxuY29uc3QgRUxFTUVOVFMgPSBPYmplY3Qua2V5cyhFTEVNRU5UX1NFTEVDVE9SUyk7XHJcbmNvbnN0IFNUQVRFUyA9IFsnTm9ybWFsZScsICdNb3VzZW92ZXInLCAnRm9jdXNlZCcsICdSZWFkb25seSddO1xyXG5cclxuY29uc3QgREVGQVVMVF9GSUVMRF9TVFlMRVM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYm9vbGVhbi1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9vbGVhbkZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IEJvb2xlYW5GaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKiBJbmNyZW1lbnRhIGRhbGwnZXN0ZXJubyBwZXIgZm9yemFyZSBpbCByaWNhbGNvbG8gZGVnbGkgc3RpbGkgQ1NTIChlcy4gZGFsIGNvbmZpZ3VyYXRvcmUpICovXHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIC8qKiBGb3J6YSB2aXNpdmFtZW50ZSB1bm8gc3RhdG8gc3BlY2lmaWNvIG5lbGwnYW50ZXByaW1hIGRlbCBjb25maWd1cmF0b3JlICovXHJcbiAgQElucHV0KCkgZm9yY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtID0gQm9vbFByZXNlbnRhbnRpb0VudW07XHJcblxyXG4gIGZpZWxkVWlkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdHlsZUVsOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0dXNTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XHJcblxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PSB1bmRlZmluZWQgfHwgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB0aGlzLmZpZWxkLklzVHJpc3RhdGUgPyBudWxsIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZFVpZCA9ICdiZi0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgICB0aGlzLmluamVjdEJvb2xlYW5GaWVsZFN0eWxlcygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pbmplY3RCb29sZWFuRmllbGRTdHlsZXMoKTtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICAgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXR1c1N1Yj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKiBSaWdlbmVyYSBpbCB0YWcgPHN0eWxlPiBjb24gZGVmYXVsdHMgKyByZWdvbGUgdXRlbnRlLCBlbnRyYW1iaSBzY29wZWQgcGVyICN1aWQgKi9cclxuICBpbmplY3RCb29sZWFuRmllbGRTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIEJvb2xlYW5GaWVsZCk/LkJvb2xlYW5GaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBCb29sZWFuRmllbGRTdHlsZUNTUyk7XHJcbiAgICBsZXQgcnVsZXMgPSB0aGlzLmJ1aWxkQ3NzUnVsZXModGhpcy5maWVsZFVpZCwgY3NzKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc3R5bGVFbCkge1xyXG4gICAgICB0aGlzLnN0eWxlRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJykgYXMgSFRNTFN0eWxlRWxlbWVudDtcclxuICAgICAgdGhpcy5zdHlsZUVsLmlkID0gJ3N0eWxlLScgKyB0aGlzLmZpZWxkVWlkO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmhlYWQsIHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0eWxlRWwudGV4dENvbnRlbnQgPSBydWxlcztcclxuICB9XHJcblxyXG4gIC8qKiBDb3N0cnVpc2NlIGlsIHNlbGV0dG9yZSBDU1MgcGVyIHVuIGRhdG8gZWxlbWVudG8gZSBzdGF0byAqL1xyXG4gIHByaXZhdGUgZ2V0U2VsZWN0b3IodWlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIHM6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdOb3JtYWxlJzogICByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzogcmV0dXJuIGAjJHt1aWR9OmhvdmVyJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgY2FzZSAnRm9jdXNlZCc6ICAgcmV0dXJuIGAjJHt1aWR9OmZvY3VzLXdpdGhpbiR7c30sICMke3VpZH0uZXFwLXN0YXRlLWZvY3VzZWQke3N9YDtcclxuICAgICAgY2FzZSAnUmVhZG9ubHknOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1yZWFkb25seSR7c31gO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRDc3NSdWxlcyh1aWQ6IHN0cmluZywgY3NzOiBCb29sZWFuRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIEVMRU1FTlRTKSB7XHJcbiAgICAgIGNvbnN0IHNFbnRyeSA9IEVMRU1FTlRfU0VMRUNUT1JTW2VsXTtcclxuICAgICAgY29uc3Qgc2VsTGlzdCA9IEFycmF5LmlzQXJyYXkoc0VudHJ5KSA/IHNFbnRyeSA6IFtzRW50cnldO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiBTVEFURVMpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBlbCArIHN0YXRlO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IERFRkFVTFRfRklFTERfU1RZTEVTW2tleV07XHJcbiAgICAgICAgY29uc3QgdXNlclZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gKGNzcyBhcyBhbnkpW2tleV07XHJcblxyXG4gICAgICAgIGlmICghZGVmYXVsdFZhbD8udHJpbSgpICYmICF1c2VyVmFsPy50cmltKCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc2VsTGlzdCkge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIHMpO1xyXG4gICAgICAgICAgaWYgKCFzZWxlY3RvcikgY29udGludWU7XHJcblxyXG4gICAgICAgICAgaWYgKGRlZmF1bHRWYWw/LnRyaW0oKSkgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke2RlZmF1bHRWYWx9IH1gKTtcclxuICAgICAgICAgIGlmICh1c2VyVmFsPy50cmltKCkpICAgIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHt1c2VyVmFsfSB9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFnZ2lvcm5hIGxlIGNsYXNzaSBkaSBzdGF0byBzdWwgd3JhcHBlciAoZXFwLXJlYWRvbmx5LCBlcXAtc3RhdGUtKikgKi9cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXN0YXRlLWhvdmVyJywgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1mb2N1c2VkJywgdGhpcy5mb3JjZVN0YXRlID09PSAnRm9jdXNlZCcpO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpIHtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXJlYWRvbmx5JywgdHJ1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcmNlU3RhdGUgPT09ICdOb3JtYWxlJyB8fCB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInIHx8IHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ0ZvY3VzZWQnKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlzUmVhZG9ubHkgPSB0aGlzLmZpZWxkLlJlYWRvbmx5IHx8ICh0aGlzLmZpZWxkLkZvcm11bGEgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkZvcm11bGEgIT09ICcnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIGlzUmVhZG9ubHkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXNTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLnN0YXR1c1N1YiA9IHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuUmVhZG9ubHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlJlYWRvbmx5SWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1Zpc2liaWxpdHkoZGVmYXVsdFZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIGlmICghdGhpcy5maWVsZC5Jbkxpc3RWaWV3ICYmICF0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICB0aGlzLmNoZWNrUmVhZG9ubHkoKTtcclxuICAgIHRoaXMuY2hlY2tWaXNpYmlsaXR5KGZhbHNlKTtcclxuICAgIGlmICgodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIHx8IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkgJiYgdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUT0dHTEUgLS0+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bS5Ub2dnbGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBSQURJT0JVVFRPTiAtLT5cclxuICAgIDxtYXQtbGFiZWwgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiIGNsYXNzPVwibXItM1wiICpuZ0lmPVwiZmllbGQuUHJlc2V0YXRpb25UeXBlID09IEJvb2xQcmVzZW50YW50aW9FbnVtWydSYWRpbyBidXR0b24nXVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1sYWJlbD5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgKm5nSWY9XCJmaWVsZC5QcmVzZXRhdGlvblR5cGUgPT0gQm9vbFByZXNlbnRhbnRpb0VudW1bJ1JhZGlvIGJ1dHRvbiddXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbdmFsdWVdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPiBTaSA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtci0yIHBzLTJcIiBbdmFsdWVdPVwiZmFsc2VcIiBjb2xvcj1cInByaW1hcnlcIj4gTm8gPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXItMiBwcy0yXCIgW3ZhbHVlXT1cIm51bGxcIiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkLklzVHJpc3RhdGVcIj4gTkRcclxuICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICA8L21hdC1yYWRpby1ncm91cD5cclxuXHJcbiAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIC0tPlxyXG4gICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm1yLTJcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bS5DaGVja2JveFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIiA6IFwiXCIpfX1cclxuICAgIDwvbWF0LWNoZWNrYm94PlxyXG5cclxuICAgIDwhLS0gVE9ETzogVmlzdWFsaXp6YXppb25lIFwiU3RyaW5nYSB0cnVlIG8gZmFsc2VcIiBlIFwiTnVtZXJpY28gMCBvIDFcIiA/PyAtLT5cclxuPC9kaXY+Il19
|