@eqproject/eqp-dynamic-module 2.11.4 → 2.11.5
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/USERGUIDE.md +437 -437
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +143 -13
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +76 -3
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +74 -13
- package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +14 -2
- package/esm2020/lib/components/private/field-graphics-editor/field-graphics-editor.component.mjs +735 -0
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +1 -1
- 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-statistics/filter-form-statistic/filter-form-statistic.component.mjs +1 -1
- package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
- package/esm2020/lib/eqp-dynamic-module.module.mjs +4 -1
- package/esm2020/lib/utils/css-color.mjs +101 -0
- package/esm2020/lib/utils/css-declarations.mjs +119 -0
- package/esm2020/lib/utils/css-property-catalog.mjs +134 -0
- package/esm2020/lib/utils/field-style-catalog.mjs +491 -0
- package/esm2020/public-api.mjs +6 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +2062 -195
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +2020 -195
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +39 -0
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +19 -0
- package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +5 -1
- package/lib/components/private/field-graphics-editor/field-graphics-editor.component.d.ts +192 -0
- package/lib/eqp-dynamic-module.module.d.ts +66 -65
- package/lib/utils/css-color.d.ts +15 -0
- package/lib/utils/css-declarations.d.ts +23 -0
- package/lib/utils/css-property-catalog.d.ts +36 -0
- package/lib/utils/field-style-catalog.d.ts +130 -0
- package/package.json +1 -1
- package/public-api.d.ts +5 -0
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
import { FieldTypeEnum } from '../models/baseField.model';
|
|
2
|
+
import { ListPresentationEnum } from '../models/fields/listValueField.model';
|
|
3
|
+
import { getCssDeclaration, parseCssDeclarations, setCssDeclaration } from './css-declarations';
|
|
4
|
+
const STATE_NORMALE = { key: 'Normale', label: 'Normale' };
|
|
5
|
+
const STATE_MOUSEOVER = { key: 'Mouseover', label: 'Mouse sopra' };
|
|
6
|
+
const STATE_FOCUSED = { key: 'Focused', label: 'Selezionato' };
|
|
7
|
+
const STATE_SELEZIONATO = { key: 'Selezionato', label: 'Selezionato' };
|
|
8
|
+
const STATE_NOTVALID = { key: 'NotValid', label: 'Non valido' };
|
|
9
|
+
const STATE_READONLY = { key: 'Readonly', label: 'Sola lettura' };
|
|
10
|
+
const FULL_STATES = [STATE_NORMALE, STATE_MOUSEOVER, STATE_FOCUSED, STATE_NOTVALID, STATE_READONLY];
|
|
11
|
+
/** Elementi del campo "Elenco generico", che cambiano in base alla modalità di presentazione */
|
|
12
|
+
const LIST_VALUE_COMBO_ELEMENTS = [
|
|
13
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
14
|
+
{ key: 'Label', label: 'Etichetta' },
|
|
15
|
+
{ key: 'CasellaTrigger', label: 'Casella Select' },
|
|
16
|
+
{ key: 'BottoneCancella', label: 'Bottone Cancella' },
|
|
17
|
+
];
|
|
18
|
+
const LIST_VALUE_RADIO_ELEMENTS = [
|
|
19
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
20
|
+
{ key: 'Label', label: 'Etichetta' },
|
|
21
|
+
{ key: 'Opzione', label: 'Opzione' },
|
|
22
|
+
{ key: 'Selezione', label: 'Selezione (radio)' },
|
|
23
|
+
];
|
|
24
|
+
const LIST_VALUE_BUTTON_ELEMENTS = [
|
|
25
|
+
{ key: 'Label', label: 'Etichetta' },
|
|
26
|
+
{ key: 'Bottone', label: 'Bottone' },
|
|
27
|
+
];
|
|
28
|
+
export const FIELD_STYLE_CATALOG = [
|
|
29
|
+
{
|
|
30
|
+
fieldType: FieldTypeEnum['Campo di testo'],
|
|
31
|
+
label: 'Campo di testo',
|
|
32
|
+
styleProp: 'TextFieldStyleCSS',
|
|
33
|
+
elements: [
|
|
34
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
35
|
+
{ key: 'Input', label: 'Casella di testo' },
|
|
36
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
37
|
+
{ key: 'Icona', label: 'Icona' },
|
|
38
|
+
{ key: 'Microfono', label: 'Microfono' },
|
|
39
|
+
{ key: 'Errore', label: 'Testo errore' },
|
|
40
|
+
],
|
|
41
|
+
states: FULL_STATES,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
fieldType: FieldTypeEnum['Area di testo'],
|
|
45
|
+
label: 'Area di testo',
|
|
46
|
+
styleProp: 'TextareaFieldStyleCSS',
|
|
47
|
+
elements: [
|
|
48
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
49
|
+
{ key: 'Input', label: 'Area di testo' },
|
|
50
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
51
|
+
{ key: 'Icona', label: 'Icona' },
|
|
52
|
+
{ key: 'Microfono', label: 'Microfono' },
|
|
53
|
+
{ key: 'Errore', label: 'Testo errore' },
|
|
54
|
+
],
|
|
55
|
+
states: FULL_STATES,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
fieldType: FieldTypeEnum['Campo numerico'],
|
|
59
|
+
label: 'Campo numerico',
|
|
60
|
+
styleProp: 'NumericFieldStyleCSS',
|
|
61
|
+
elements: [
|
|
62
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
63
|
+
{ key: 'Input', label: 'Casella numerica' },
|
|
64
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
65
|
+
{ key: 'Icona', label: 'Icona' },
|
|
66
|
+
{ key: 'Errore', label: 'Testo errore' },
|
|
67
|
+
],
|
|
68
|
+
states: FULL_STATES,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
fieldType: FieldTypeEnum['Booleano'],
|
|
72
|
+
label: 'Booleano',
|
|
73
|
+
styleProp: 'BooleanFieldStyleCSS',
|
|
74
|
+
elements: [
|
|
75
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
76
|
+
{ key: 'Scelta', label: 'Controllo (toggle / checkbox / radio)' },
|
|
77
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
78
|
+
],
|
|
79
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_FOCUSED, STATE_READONLY],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
fieldType: FieldTypeEnum['Data e/o ora'],
|
|
83
|
+
label: 'Data e/o ora',
|
|
84
|
+
styleProp: 'DateFieldStyleCSS',
|
|
85
|
+
elements: [
|
|
86
|
+
{ key: 'Container', label: 'Contenitore esterno' },
|
|
87
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
88
|
+
{ key: 'ContenitoreInterno', label: 'Contenitore interno' },
|
|
89
|
+
{ key: 'CampoData', label: 'Casella di testo' },
|
|
90
|
+
{ key: 'IconaCalendario', label: 'Bottone calendario' },
|
|
91
|
+
{ key: 'IconaOrologio', label: 'Bottone orologio' },
|
|
92
|
+
{ key: 'IconaCancellazione', label: 'Bottone cancellazione' },
|
|
93
|
+
{ key: 'Tooltip', label: 'Tooltip' },
|
|
94
|
+
],
|
|
95
|
+
states: FULL_STATES,
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
fieldType: FieldTypeEnum['Allegato'],
|
|
99
|
+
label: 'Allegato',
|
|
100
|
+
styleProp: 'AttachmentFieldStyleCSS',
|
|
101
|
+
elements: [
|
|
102
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
103
|
+
{ key: 'Label', label: 'Label / intestazione' },
|
|
104
|
+
{ key: 'BottoneAggiungi', label: 'Bottone Aggiungi' },
|
|
105
|
+
{ key: 'BottoneDownload', label: 'Bottone Download' },
|
|
106
|
+
{ key: 'BottoneElimina', label: 'Bottone Elimina' },
|
|
107
|
+
{ key: 'BottoneAnteprima', label: 'Bottone Anteprima' },
|
|
108
|
+
{ key: 'CampoNomeFile', label: 'Campo nome file' },
|
|
109
|
+
],
|
|
110
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_NOTVALID, STATE_READONLY],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
fieldType: FieldTypeEnum['Immagine'],
|
|
114
|
+
label: 'Immagine',
|
|
115
|
+
styleProp: 'ImageFieldStyleCSS',
|
|
116
|
+
elements: [
|
|
117
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
118
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
119
|
+
{ key: 'BottoneDisegna', label: 'Bottone Disegna' },
|
|
120
|
+
],
|
|
121
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
fieldType: FieldTypeEnum['Elenco generico'],
|
|
125
|
+
label: 'Elenco generico',
|
|
126
|
+
styleProp: 'ListValueFieldStyleCSS',
|
|
127
|
+
elements: LIST_VALUE_COMBO_ELEMENTS,
|
|
128
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_SELEZIONATO, STATE_NOTVALID, STATE_READONLY],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
fieldType: FieldTypeEnum['Elenco immagini'],
|
|
132
|
+
label: 'Elenco immagini',
|
|
133
|
+
styleProp: 'ImageSelectorFieldStyleCSS',
|
|
134
|
+
elements: [
|
|
135
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
136
|
+
{ key: 'CasellaSelezione', label: 'Casella di selezione' },
|
|
137
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
138
|
+
{ key: 'Selezioni', label: 'Selezioni (checkbox)' },
|
|
139
|
+
],
|
|
140
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_SELEZIONATO, STATE_NOTVALID, STATE_READONLY],
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
fieldType: FieldTypeEnum['Etichetta'],
|
|
144
|
+
label: 'Etichetta',
|
|
145
|
+
styleProp: 'LabelFieldStyleCSS',
|
|
146
|
+
elements: [
|
|
147
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
148
|
+
],
|
|
149
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
fieldType: FieldTypeEnum['Immagine con markers'],
|
|
153
|
+
label: 'Immagine con markers',
|
|
154
|
+
styleProp: 'ImageWithMarkersFieldStyleCSS',
|
|
155
|
+
elements: [
|
|
156
|
+
{ key: 'Container', label: 'Contenitore' },
|
|
157
|
+
{ key: 'Descrizione', label: 'Descrizione (label)' },
|
|
158
|
+
{ key: 'BottoneMarca', label: 'Bottone Marca' },
|
|
159
|
+
],
|
|
160
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER],
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
fieldType: FieldTypeEnum['Bottone'],
|
|
164
|
+
label: 'Bottone',
|
|
165
|
+
styleProp: 'ActionButtonFieldStyleCSS',
|
|
166
|
+
elements: [
|
|
167
|
+
{ key: 'Container', label: 'Bottone' },
|
|
168
|
+
{ key: 'Icona', label: 'Icona' },
|
|
169
|
+
{ key: 'Descrizione', label: 'Etichetta (label)' },
|
|
170
|
+
],
|
|
171
|
+
states: [STATE_NORMALE, STATE_MOUSEOVER, { key: 'Selezionato', label: 'Selezionato (click)' }],
|
|
172
|
+
},
|
|
173
|
+
];
|
|
174
|
+
/**
|
|
175
|
+
* Nome di un campo da mostrare a video. Description può valere " " (uno spazio: truthy ma
|
|
176
|
+
* invisibile), quindi va ripulita prima di usarla; poi il testo dell'Etichetta, il codice, il Name.
|
|
177
|
+
*/
|
|
178
|
+
export function getFieldDisplayName(field) {
|
|
179
|
+
if (!field) {
|
|
180
|
+
return '';
|
|
181
|
+
}
|
|
182
|
+
const candidates = [
|
|
183
|
+
field.Description,
|
|
184
|
+
field.Etichetta,
|
|
185
|
+
field.Label,
|
|
186
|
+
field.Name,
|
|
187
|
+
];
|
|
188
|
+
for (const c of candidates) {
|
|
189
|
+
const t = (c ?? '').toString().trim();
|
|
190
|
+
if (t) {
|
|
191
|
+
return t;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return '';
|
|
195
|
+
}
|
|
196
|
+
/** Definizione del catalogo per una tipologia; null se la tipologia non ha grafica configurabile */
|
|
197
|
+
export function getFieldStyleTypeDef(fieldType) {
|
|
198
|
+
return FIELD_STYLE_CATALOG.find((d) => Number(d.fieldType) === Number(fieldType)) ?? null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Elementi grafici di un campo. Coincidono con quelli del catalogo, salvo l'Elenco generico
|
|
202
|
+
* dove dipendono dalla modalità di presentazione scelta sul campo.
|
|
203
|
+
*/
|
|
204
|
+
export function getFieldStyleElements(field) {
|
|
205
|
+
const def = getFieldStyleTypeDef(field?.FieldType);
|
|
206
|
+
if (!def) {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
if (Number(def.fieldType) === Number(FieldTypeEnum['Elenco generico'])) {
|
|
210
|
+
const mode = Number(field?.PresentationMode);
|
|
211
|
+
if (mode === ListPresentationEnum['Pulsante con testo']) {
|
|
212
|
+
return LIST_VALUE_BUTTON_ELEMENTS;
|
|
213
|
+
}
|
|
214
|
+
if (mode === ListPresentationEnum['Radio button']) {
|
|
215
|
+
return LIST_VALUE_RADIO_ELEMENTS;
|
|
216
|
+
}
|
|
217
|
+
return LIST_VALUE_COMBO_ELEMENTS;
|
|
218
|
+
}
|
|
219
|
+
return def.elements;
|
|
220
|
+
}
|
|
221
|
+
/** Mappa degli stili del campo (può essere undefined se non è mai stata valorizzata) */
|
|
222
|
+
export function getFieldStyleMap(field) {
|
|
223
|
+
const def = getFieldStyleTypeDef(field?.FieldType);
|
|
224
|
+
if (!def) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return field[def.styleProp] ?? null;
|
|
228
|
+
}
|
|
229
|
+
/** Come getFieldStyleMap, ma crea la mappa se manca */
|
|
230
|
+
export function ensureFieldStyleMap(field) {
|
|
231
|
+
const def = getFieldStyleTypeDef(field?.FieldType);
|
|
232
|
+
if (!def) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
if (!field[def.styleProp]) {
|
|
236
|
+
field[def.styleProp] = {};
|
|
237
|
+
}
|
|
238
|
+
return field[def.styleProp];
|
|
239
|
+
}
|
|
240
|
+
/** Legge il CSS di un "Elemento + Stato" (es. "InputFocused") */
|
|
241
|
+
export function getFieldStyleValue(field, key) {
|
|
242
|
+
return getFieldStyleMap(field)?.[key] ?? '';
|
|
243
|
+
}
|
|
244
|
+
/** Scrive il CSS di un "Elemento + Stato"; il valore vuoto rimuove la chiave dal JSON */
|
|
245
|
+
export function setFieldStyleValue(field, key, value) {
|
|
246
|
+
const map = ensureFieldStyleMap(field);
|
|
247
|
+
if (!map) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
// undefined viene escluso da JSON.stringify -> il JSON salvato rimane compatto
|
|
251
|
+
map[key] = value || undefined;
|
|
252
|
+
}
|
|
253
|
+
/** True se il campo non ha ancora nessuna regola grafica impostata */
|
|
254
|
+
export function isFieldStyleMapEmpty(field) {
|
|
255
|
+
const map = getFieldStyleMap(field);
|
|
256
|
+
if (!map) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
return !Object.keys(map).some((k) => !!map[k]);
|
|
260
|
+
}
|
|
261
|
+
/** Copia profonda della mappa stili di un campo (solo le chiavi valorizzate) */
|
|
262
|
+
export function cloneFieldStyleMap(field) {
|
|
263
|
+
const map = getFieldStyleMap(field);
|
|
264
|
+
const clone = {};
|
|
265
|
+
if (!map) {
|
|
266
|
+
return clone;
|
|
267
|
+
}
|
|
268
|
+
Object.keys(map).forEach((k) => { if (map[k]) {
|
|
269
|
+
clone[k] = map[k];
|
|
270
|
+
} });
|
|
271
|
+
return clone;
|
|
272
|
+
}
|
|
273
|
+
const FT = FieldTypeEnum;
|
|
274
|
+
export const GLOBAL_STYLE_ELEMENTS = [
|
|
275
|
+
{
|
|
276
|
+
key: 'Contenitore',
|
|
277
|
+
label: 'Contenitore',
|
|
278
|
+
perType: {
|
|
279
|
+
[FT['Campo di testo']]: ['Container'],
|
|
280
|
+
[FT['Area di testo']]: ['Container'],
|
|
281
|
+
[FT['Campo numerico']]: ['Container'],
|
|
282
|
+
[FT['Booleano']]: ['Container'],
|
|
283
|
+
[FT['Data e/o ora']]: ['Container'],
|
|
284
|
+
[FT['Allegato']]: ['Container'],
|
|
285
|
+
[FT['Immagine']]: ['Container'],
|
|
286
|
+
[FT['Elenco generico']]: ['Container'],
|
|
287
|
+
[FT['Elenco immagini']]: ['Container'],
|
|
288
|
+
[FT['Etichetta']]: ['Container'],
|
|
289
|
+
[FT['Immagine con markers']]: ['Container'],
|
|
290
|
+
[FT['Bottone']]: ['Container'],
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
key: 'Etichetta',
|
|
295
|
+
label: 'Etichetta / descrizione',
|
|
296
|
+
perType: {
|
|
297
|
+
[FT['Campo di testo']]: ['Descrizione'],
|
|
298
|
+
[FT['Area di testo']]: ['Descrizione'],
|
|
299
|
+
[FT['Campo numerico']]: ['Descrizione'],
|
|
300
|
+
[FT['Booleano']]: ['Descrizione'],
|
|
301
|
+
[FT['Data e/o ora']]: ['Descrizione'],
|
|
302
|
+
[FT['Allegato']]: ['Label'],
|
|
303
|
+
[FT['Immagine']]: ['Descrizione'],
|
|
304
|
+
[FT['Elenco generico']]: ['Label'],
|
|
305
|
+
[FT['Elenco immagini']]: ['Descrizione'],
|
|
306
|
+
[FT['Immagine con markers']]: ['Descrizione'],
|
|
307
|
+
[FT['Bottone']]: ['Descrizione'],
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
key: 'Valore',
|
|
312
|
+
label: 'Area del valore',
|
|
313
|
+
perType: {
|
|
314
|
+
[FT['Campo di testo']]: ['Input'],
|
|
315
|
+
[FT['Area di testo']]: ['Input'],
|
|
316
|
+
[FT['Campo numerico']]: ['Input'],
|
|
317
|
+
[FT['Booleano']]: ['Scelta'],
|
|
318
|
+
[FT['Data e/o ora']]: ['CampoData'],
|
|
319
|
+
[FT['Allegato']]: ['CampoNomeFile'],
|
|
320
|
+
[FT['Elenco generico']]: ['CasellaTrigger', 'Opzione', 'Bottone'],
|
|
321
|
+
[FT['Elenco immagini']]: ['CasellaSelezione'],
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
];
|
|
325
|
+
/**
|
|
326
|
+
* Elementi reali di un campo corrispondenti a un elemento logico globale.
|
|
327
|
+
* Interseca la mappatura per tipologia con gli elementi che il campo ha davvero
|
|
328
|
+
* (l'Elenco generico, per esempio, cambia elementi in base alla modalità di presentazione).
|
|
329
|
+
*/
|
|
330
|
+
export function resolveGlobalElementKeys(field, globalKey) {
|
|
331
|
+
const def = GLOBAL_STYLE_ELEMENTS.find((g) => g.key === globalKey);
|
|
332
|
+
if (!def) {
|
|
333
|
+
return [];
|
|
334
|
+
}
|
|
335
|
+
const candidates = def.perType[Number(field?.FieldType)] ?? [];
|
|
336
|
+
if (candidates.length === 0) {
|
|
337
|
+
return [];
|
|
338
|
+
}
|
|
339
|
+
const available = new Set(getFieldStyleElements(field).map((e) => e.key));
|
|
340
|
+
return candidates.filter((k) => available.has(k));
|
|
341
|
+
}
|
|
342
|
+
/** Stati comuni a tutte le tipologie passate: sono gli unici applicabili globalmente */
|
|
343
|
+
export function getCommonStates(fieldTypes) {
|
|
344
|
+
const defs = fieldTypes
|
|
345
|
+
.map((t) => getFieldStyleTypeDef(t))
|
|
346
|
+
.filter((d) => d != null);
|
|
347
|
+
if (defs.length === 0) {
|
|
348
|
+
return [];
|
|
349
|
+
}
|
|
350
|
+
return defs[0].states.filter((state) => defs.every((d) => d.states.some((s) => s.key === state.key)));
|
|
351
|
+
}
|
|
352
|
+
//#endregion Grafica globale
|
|
353
|
+
//#region CSS legacy (FieldstyleCSS / LabelstyleCSS)
|
|
354
|
+
/**
|
|
355
|
+
* I campi hanno due proprietà storiche, LabelstyleCSS e FieldstyleCSS, che i template
|
|
356
|
+
* applicano ancora con [ngStyle], quindi come stili INLINE. Essendo inline battono le regole
|
|
357
|
+
* "#uid { ... }" iniettate dalla grafica per elemento e stato: un colore impostato dall'editor
|
|
358
|
+
* grafico non si vedeva sui campi che avevano il CSS legacy valorizzato.
|
|
359
|
+
*
|
|
360
|
+
* Questa tabella dice, per ogni tipologia, su quale elemento della grafica nuova finisce
|
|
361
|
+
* ciascuna delle due proprietà legacy, in modo da poterle assorbire e avere una sola fonte
|
|
362
|
+
* di verità. Le tipologie assenti non usano [ngStyle] in nessun template.
|
|
363
|
+
*/
|
|
364
|
+
export const LEGACY_STYLE_TARGETS = {
|
|
365
|
+
[FT['Campo di testo']]: { label: 'Descrizione', field: 'Input' },
|
|
366
|
+
[FT['Area di testo']]: { label: 'Descrizione', field: 'Input' },
|
|
367
|
+
[FT['Campo numerico']]: { label: 'Descrizione', field: 'Input' },
|
|
368
|
+
[FT['Booleano']]: { label: 'Descrizione' },
|
|
369
|
+
[FT['Elenco immagini']]: { label: 'Descrizione' },
|
|
370
|
+
[FT['Etichetta']]: { label: 'Container' },
|
|
371
|
+
[FT['Elenco generico']]: { label: 'Label', field: 'Container' },
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Riversa il CSS legacy del campo dentro una mappa "Elemento+Stato" -> CSS, sullo stato Normale.
|
|
375
|
+
* Non sovrascrive le proprietà già presenti nella mappa: la grafica nuova ha la precedenza.
|
|
376
|
+
*/
|
|
377
|
+
export function mergeLegacyStylesIntoMap(field, map, only) {
|
|
378
|
+
const result = { consumed: [], keys: [] };
|
|
379
|
+
const target = LEGACY_STYLE_TARGETS[Number(field?.FieldType)];
|
|
380
|
+
if (!target) {
|
|
381
|
+
return result;
|
|
382
|
+
}
|
|
383
|
+
const available = new Set(getFieldStyleElements(field).map((e) => e.key));
|
|
384
|
+
const absorb = (css, elementKey, name) => {
|
|
385
|
+
if (only && only !== name) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (!css || !css.trim() || !elementKey || !available.has(elementKey)) {
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
const key = elementKey + 'Normale';
|
|
392
|
+
let current = map[key] ?? '';
|
|
393
|
+
parseCssDeclarations(css).forEach((d) => {
|
|
394
|
+
if (!getCssDeclaration(current, d.prop)) {
|
|
395
|
+
current = setCssDeclaration(current, d.prop, d.value);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
if (current) {
|
|
399
|
+
map[key] = current;
|
|
400
|
+
}
|
|
401
|
+
result.consumed.push(name);
|
|
402
|
+
if (!result.keys.includes(key)) {
|
|
403
|
+
result.keys.push(key);
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
absorb(field.LabelstyleCSS, target.label, 'LabelstyleCSS');
|
|
407
|
+
absorb(field.FieldstyleCSS, target.field, 'FieldstyleCSS');
|
|
408
|
+
return result;
|
|
409
|
+
}
|
|
410
|
+
/** Chiave "ElementoNormale" su cui finirebbe una proprietà legacy, o null se non applicabile */
|
|
411
|
+
export function legacyTargetKey(field, name) {
|
|
412
|
+
const target = LEGACY_STYLE_TARGETS[Number(field?.FieldType)];
|
|
413
|
+
if (!target) {
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
const elementKey = name === 'LabelstyleCSS' ? target.label : target.field;
|
|
417
|
+
if (!elementKey) {
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
const available = new Set(getFieldStyleElements(field).map((e) => e.key));
|
|
421
|
+
return available.has(elementKey) ? elementKey + 'Normale' : null;
|
|
422
|
+
}
|
|
423
|
+
/** Mappa stili "effettiva" di un campo: quella per elemento più il CSS legacy assorbito */
|
|
424
|
+
export function getEffectiveStyleMap(field) {
|
|
425
|
+
const map = cloneFieldStyleMap(field);
|
|
426
|
+
mergeLegacyStylesIntoMap(field, map);
|
|
427
|
+
return map;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* True se il campo ha una grafica da qualche parte: nella mappa per elemento oppure nel CSS
|
|
431
|
+
* legacy. È il test giusto per "questo campo può fare da sorgente" (eredità, Copia Grafica):
|
|
432
|
+
* isFieldStyleMapEmpty guarda solo la mappa nuova e ignorerebbe i campi stilizzati solo col legacy.
|
|
433
|
+
*/
|
|
434
|
+
export function hasEffectiveStyles(field) {
|
|
435
|
+
return Object.keys(getEffectiveStyleMap(field)).length > 0;
|
|
436
|
+
}
|
|
437
|
+
//#endregion CSS legacy (FieldstyleCSS / LabelstyleCSS)
|
|
438
|
+
//#region Grafica di default ereditata
|
|
439
|
+
/**
|
|
440
|
+
* Grafica di default costruita a partire da campi di tipologia DIVERSA.
|
|
441
|
+
*
|
|
442
|
+
* L'eredità naturale è fra campi della stessa tipologia, che condividono i nomi degli elementi.
|
|
443
|
+
* Quando però una tipologia viene usata per la prima volta non c'è nessun campo simile da cui
|
|
444
|
+
* copiare: in quel caso si passa per gli elementi logici della grafica globale (contenitore,
|
|
445
|
+
* etichetta, area del valore), che ogni tipologia sa tradurre nei propri elementi.
|
|
446
|
+
*
|
|
447
|
+
* @param field campo nuovo che deve ricevere la grafica
|
|
448
|
+
* @param sources campi già presenti nella form, in ordine
|
|
449
|
+
*/
|
|
450
|
+
export function buildGlobalInheritedMap(field, sources) {
|
|
451
|
+
const result = {};
|
|
452
|
+
const typeDef = getFieldStyleTypeDef(field?.FieldType);
|
|
453
|
+
if (!typeDef) {
|
|
454
|
+
return result;
|
|
455
|
+
}
|
|
456
|
+
GLOBAL_STYLE_ELEMENTS.forEach((globalElement) => {
|
|
457
|
+
const targetKeys = resolveGlobalElementKeys(field, globalElement.key);
|
|
458
|
+
if (targetKeys.length === 0) {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
for (const source of sources ?? []) {
|
|
462
|
+
if (source === field) {
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
if (Number(source?.FieldType) === Number(typeDef.fieldType)) {
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
const sourceKeys = resolveGlobalElementKeys(source, globalElement.key);
|
|
469
|
+
if (sourceKeys.length === 0) {
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
472
|
+
const sourceMap = getEffectiveStyleMap(source);
|
|
473
|
+
let copied = false;
|
|
474
|
+
// Solo gli stati che la tipologia di destinazione conosce davvero
|
|
475
|
+
typeDef.states.forEach((state) => {
|
|
476
|
+
const css = sourceMap[sourceKeys[0] + state.key];
|
|
477
|
+
if (!css || !css.trim()) {
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
targetKeys.forEach((tk) => { result[tk + state.key] = css; });
|
|
481
|
+
copied = true;
|
|
482
|
+
});
|
|
483
|
+
if (copied) {
|
|
484
|
+
break;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
});
|
|
488
|
+
return result;
|
|
489
|
+
}
|
|
490
|
+
//#endregion Grafica di default ereditata
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtc3R5bGUtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3V0aWxzL2ZpZWxkLXN0eWxlLWNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTBCaEcsTUFBTSxhQUFhLEdBQXVCLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDL0UsTUFBTSxlQUFlLEdBQXVCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDdkYsTUFBTSxhQUFhLEdBQXVCLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbkYsTUFBTSxpQkFBaUIsR0FBdUIsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUMzRixNQUFNLGNBQWMsR0FBdUIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUNwRixNQUFNLGNBQWMsR0FBdUIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUV0RixNQUFNLFdBQVcsR0FBRyxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVwRyxnR0FBZ0c7QUFDaEcsTUFBTSx5QkFBeUIsR0FBOEI7SUFDekQsRUFBRSxH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LEVBQUU7Z0JBQUUsU0FBUzthQUFFO1lBQ25DLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUFFLFNBQVM7YUFBRTtZQUUxRSxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQUUsU0FBUzthQUFFO1lBRTFDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztZQUVuQixrRUFBa0U7WUFDbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQUUsT0FBTztpQkFBRTtnQkFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLE1BQU0sRUFBRTtnQkFBRSxNQUFNO2FBQUU7U0FDekI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFByZXNlbnRhdGlvbkVudW0sIExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IGdldENzc0RlY2xhcmF0aW9uLCBwYXJzZUNzc0RlY2xhcmF0aW9ucywgc2V0Q3NzRGVjbGFyYXRpb24gfSBmcm9tICcuL2Nzcy1kZWNsYXJhdGlvbnMnO1xyXG5cclxuLyoqXHJcbiAqIENhdGFsb2dvIGNlbnRyYWxpenphdG8gZGVsbGEgZ3JhZmljYSBkZWkgY2FtcGkuXHJcbiAqXHJcbiAqIE9nbmkgdGlwb2xvZ2lhIGRpIGNhbXBvIGVzcG9uZSB1bmEgbWFwcGEgcGlhdHRhIFwiRWxlbWVudG8gKyBTdGF0b1wiIC0+IHN0cmluZ2EgQ1NTXHJcbiAqIChlcy4gVGV4dEZpZWxkU3R5bGVDU1MuSW5wdXRGb2N1c2VkID0gXCJjb2xvcjogcmVkO1wiKS4gUXVpIHN0YW5ubywgaW4gdW4gdW5pY28gcG9zdG8sXHJcbiAqIGkgbWV0YWRhdGkgZGkgcXVhbGkgZWxlbWVudGkgZSBxdWFsaSBzdGF0aSBlc2lzdG9ubyBwZXIgb2duaSB0aXBvbG9naWEsIGluc2llbWUgYWdsaVxyXG4gKiBhY2Nlc3NvciBnZW5lcmljaSBwZXIgbGVnZ2VyZS9zY3JpdmVyZSBxdWVsbGUgbWFwcGUgc2VuemEgZHVwbGljYXJlIGNvZGljZSBwZXIgdGlwby5cclxuICovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkU3R5bGVFbnRyeURlZiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRTdHlsZVR5cGVEZWYge1xyXG4gICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtO1xyXG4gICAgLyoqIEV0aWNoZXR0YSBkZWxsYSB0aXBvbG9naWEgbW9zdHJhdGEgYSB2aWRlbyAqL1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIC8qKiBOb21lIGRlbGxhIHByb3ByaWV0w6AgY2hlIGNvbnRpZW5lIGxhIG1hcHBhIGRlZ2xpIHN0aWxpIHN1bCBmaWVsZCAqL1xyXG4gICAgc3R5bGVQcm9wOiBzdHJpbmc7XHJcbiAgICBlbGVtZW50czogQXJyYXk8RmllbGRTdHlsZUVudHJ5RGVmPjtcclxuICAgIHN0YXRlczogQXJyYXk8RmllbGRTdHlsZUVudHJ5RGVmPjtcclxufVxyXG5cclxuY29uc3QgU1RBVEVfTk9STUFMRTogRmllbGRTdHlsZUVudHJ5RGVmID0geyBrZXk6ICdOb3JtYWxlJywgbGFiZWw6ICdOb3JtYWxlJyB9O1xyXG5jb25zdCBTVEFURV9NT1VTRU9WRVI6IEZpZWxkU3R5bGVFbnRyeURlZiA9IHsga2V5OiAnTW91c2VvdmVyJywgbGFiZWw6ICdNb3VzZSBzb3ByYScgfTtcclxuY29uc3QgU1RBVEVfRk9DVVNFRDogRmllbGRTdHlsZUVudHJ5RGVmID0geyBrZXk6ICdGb2N1c2VkJywgbGFiZWw6ICdTZWxlemlvbmF0bycgfTtcclxuY29uc3QgU1RBVEVfU0VMRVpJT05BVE86IEZpZWxkU3R5bGVFbnRyeURlZiA9IHsga2V5OiAnU2VsZXppb25hdG8nLCBsYWJlbDogJ1NlbGV6aW9uYXRvJyB9O1xyXG5jb25zdCBTVEFURV9OT1RWQUxJRDogRmllbGRTdHlsZUVudHJ5RGVmID0geyBrZXk6ICdOb3RWYWxpZCcsIGxhYmVsOiAnTm9uIHZhbGlkbycgfTtcclxuY29uc3QgU1RBVEVfUkVBRE9OTFk6IEZpZWxkU3R5bGVFbnRyeURlZiA9IHsga2V5OiAnUmVhZG9ubHknLCBsYWJlbDogJ1NvbGEgbGV0dHVyYScgfTtcclxuXHJcbmNvbnN0IEZVTExfU1RBVEVTID0gW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUiwgU1RBVEVfRk9DVVNFRCwgU1RBVEVfTk9UVkFMSUQsIFNUQVRFX1JFQURPTkxZXTtcclxuXHJcbi8qKiBFbGVtZW50aSBkZWwgY2FtcG8gXCJFbGVuY28gZ2VuZXJpY29cIiwgY2hlIGNhbWJpYW5vIGluIGJhc2UgYWxsYSBtb2RhbGl0w6AgZGkgcHJlc2VudGF6aW9uZSAqL1xyXG5jb25zdCBMSVNUX1ZBTFVFX0NPTUJPX0VMRU1FTlRTOiBBcnJheTxGaWVsZFN0eWxlRW50cnlEZWY+ID0gW1xyXG4gICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgeyBrZXk6ICdMYWJlbCcsIGxhYmVsOiAnRXRpY2hldHRhJyB9LFxyXG4gICAgeyBrZXk6ICdDYXNlbGxhVHJpZ2dlcicsIGxhYmVsOiAnQ2FzZWxsYSBTZWxlY3QnIH0sXHJcbiAgICB7IGtleTogJ0JvdHRvbmVDYW5jZWxsYScsIGxhYmVsOiAnQm90dG9uZSBDYW5jZWxsYScgfSxcclxuXTtcclxuY29uc3QgTElTVF9WQUxVRV9SQURJT19FTEVNRU5UUzogQXJyYXk8RmllbGRTdHlsZUVudHJ5RGVmPiA9IFtcclxuICAgIHsga2V5OiAnQ29udGFpbmVyJywgbGFiZWw6ICdDb250ZW5pdG9yZScgfSxcclxuICAgIHsga2V5OiAnTGFiZWwnLCBsYWJlbDogJ0V0aWNoZXR0YScgfSxcclxuICAgIHsga2V5OiAnT3B6aW9uZScsIGxhYmVsOiAnT3B6aW9uZScgfSxcclxuICAgIHsga2V5OiAnU2VsZXppb25lJywgbGFiZWw6ICdTZWxlemlvbmUgKHJhZGlvKScgfSxcclxuXTtcclxuY29uc3QgTElTVF9WQUxVRV9CVVRUT05fRUxFTUVOVFM6IEFycmF5PEZpZWxkU3R5bGVFbnRyeURlZj4gPSBbXHJcbiAgICB7IGtleTogJ0xhYmVsJywgbGFiZWw6ICdFdGljaGV0dGEnIH0sXHJcbiAgICB7IGtleTogJ0JvdHRvbmUnLCBsYWJlbDogJ0JvdHRvbmUnIH0sXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgRklFTERfU1RZTEVfQ0FUQUxPRzogQXJyYXk8RmllbGRTdHlsZVR5cGVEZWY+ID0gW1xyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXSxcclxuICAgICAgICBsYWJlbDogJ0NhbXBvIGRpIHRlc3RvJyxcclxuICAgICAgICBzdHlsZVByb3A6ICdUZXh0RmllbGRTdHlsZUNTUycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0lucHV0JywgbGFiZWw6ICdDYXNlbGxhIGRpIHRlc3RvJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Rlc2NyaXppb25lJywgbGFiZWw6ICdEZXNjcml6aW9uZSAobGFiZWwpJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0ljb25hJywgbGFiZWw6ICdJY29uYScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdNaWNyb2Zvbm8nLCBsYWJlbDogJ01pY3JvZm9ubycgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdFcnJvcmUnLCBsYWJlbDogJ1Rlc3RvIGVycm9yZScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogRlVMTF9TVEFURVMsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnQXJlYSBkaSB0ZXN0byddLFxyXG4gICAgICAgIGxhYmVsOiAnQXJlYSBkaSB0ZXN0bycsXHJcbiAgICAgICAgc3R5bGVQcm9wOiAnVGV4dGFyZWFGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSW5wdXQnLCBsYWJlbDogJ0FyZWEgZGkgdGVzdG8nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSWNvbmEnLCBsYWJlbDogJ0ljb25hJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ01pY3JvZm9ubycsIGxhYmVsOiAnTWljcm9mb25vJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Vycm9yZScsIGxhYmVsOiAnVGVzdG8gZXJyb3JlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBGVUxMX1NUQVRFUyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydDYW1wbyBudW1lcmljbyddLFxyXG4gICAgICAgIGxhYmVsOiAnQ2FtcG8gbnVtZXJpY28nLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ051bWVyaWNGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSW5wdXQnLCBsYWJlbDogJ0Nhc2VsbGEgbnVtZXJpY2EnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSWNvbmEnLCBsYWJlbDogJ0ljb25hJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Vycm9yZScsIGxhYmVsOiAnVGVzdG8gZXJyb3JlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBGVUxMX1NUQVRFUyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddLFxyXG4gICAgICAgIGxhYmVsOiAnQm9vbGVhbm8nLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0Jvb2xlYW5GaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnU2NlbHRhJywgbGFiZWw6ICdDb250cm9sbG8gKHRvZ2dsZSAvIGNoZWNrYm94IC8gcmFkaW8pJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Rlc2NyaXppb25lJywgbGFiZWw6ICdEZXNjcml6aW9uZSAobGFiZWwpJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSLCBTVEFURV9GT0NVU0VELCBTVEFURV9SRUFET05MWV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRGF0YSBlL28gb3JhJ10sXHJcbiAgICAgICAgbGFiZWw6ICdEYXRhIGUvbyBvcmEnLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0RhdGVGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUgZXN0ZXJubycgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdEZXNjcml6aW9uZScsIGxhYmVsOiAnRGVzY3JpemlvbmUgKGxhYmVsKScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250ZW5pdG9yZUludGVybm8nLCBsYWJlbDogJ0NvbnRlbml0b3JlIGludGVybm8nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQ2FtcG9EYXRhJywgbGFiZWw6ICdDYXNlbGxhIGRpIHRlc3RvJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0ljb25hQ2FsZW5kYXJpbycsIGxhYmVsOiAnQm90dG9uZSBjYWxlbmRhcmlvJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0ljb25hT3JvbG9naW8nLCBsYWJlbDogJ0JvdHRvbmUgb3JvbG9naW8nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSWNvbmFDYW5jZWxsYXppb25lJywgbGFiZWw6ICdCb3R0b25lIGNhbmNlbGxhemlvbmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnVG9vbHRpcCcsIGxhYmVsOiAnVG9vbHRpcCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogRlVMTF9TVEFURVMsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnQWxsZWdhdG8nXSxcclxuICAgICAgICBsYWJlbDogJ0FsbGVnYXRvJyxcclxuICAgICAgICBzdHlsZVByb3A6ICdBdHRhY2htZW50RmllbGRTdHlsZUNTUycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0xhYmVsJywgbGFiZWw6ICdMYWJlbCAvIGludGVzdGF6aW9uZScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdCb3R0b25lQWdnaXVuZ2knLCBsYWJlbDogJ0JvdHRvbmUgQWdnaXVuZ2knIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZURvd25sb2FkJywgbGFiZWw6ICdCb3R0b25lIERvd25sb2FkJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0JvdHRvbmVFbGltaW5hJywgbGFiZWw6ICdCb3R0b25lIEVsaW1pbmEnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZUFudGVwcmltYScsIGxhYmVsOiAnQm90dG9uZSBBbnRlcHJpbWEnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQ2FtcG9Ob21lRmlsZScsIGxhYmVsOiAnQ2FtcG8gbm9tZSBmaWxlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSLCBTVEFURV9OT1RWQUxJRCwgU1RBVEVfUkVBRE9OTFldLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lJ10sXHJcbiAgICAgICAgbGFiZWw6ICdJbW1hZ2luZScsXHJcbiAgICAgICAgc3R5bGVQcm9wOiAnSW1hZ2VGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZURpc2VnbmEnLCBsYWJlbDogJ0JvdHRvbmUgRGlzZWduYScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10sXHJcbiAgICAgICAgbGFiZWw6ICdFbGVuY28gZ2VuZXJpY28nLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0xpc3RWYWx1ZUZpZWxkU3R5bGVDU1MnLFxyXG4gICAgICAgIGVsZW1lbnRzOiBMSVNUX1ZBTFVFX0NPTUJPX0VMRU1FTlRTLFxyXG4gICAgICAgIHN0YXRlczogW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUiwgU1RBVEVfU0VMRVpJT05BVE8sIFNUQVRFX05PVFZBTElELCBTVEFURV9SRUFET05MWV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ10sXHJcbiAgICAgICAgbGFiZWw6ICdFbGVuY28gaW1tYWdpbmknLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0ltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQ2FzZWxsYVNlbGV6aW9uZScsIGxhYmVsOiAnQ2FzZWxsYSBkaSBzZWxlemlvbmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnU2VsZXppb25pJywgbGFiZWw6ICdTZWxlemlvbmkgKGNoZWNrYm94KScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUiwgU1RBVEVfU0VMRVpJT05BVE8sIFNUQVRFX05PVFZBTElELCBTVEFURV9SRUFET05MWV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRXRpY2hldHRhJ10sXHJcbiAgICAgICAgbGFiZWw6ICdFdGljaGV0dGEnLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0xhYmVsRmllbGRTdHlsZUNTUycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddLFxyXG4gICAgICAgIGxhYmVsOiAnSW1tYWdpbmUgY29uIG1hcmtlcnMnLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0ltYWdlV2l0aE1hcmtlcnNGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZU1hcmNhJywgbGFiZWw6ICdCb3R0b25lIE1hcmNhJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydCb3R0b25lJ10sXHJcbiAgICAgICAgbGFiZWw6ICdCb3R0b25lJyxcclxuICAgICAgICBzdHlsZVByb3A6ICdBY3Rpb25CdXR0b25GaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQm90dG9uZScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdJY29uYScsIGxhYmVsOiAnSWNvbmEnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0V0aWNoZXR0YSAobGFiZWwpJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSLCB7IGtleTogJ1NlbGV6aW9uYXRvJywgbGFiZWw6ICdTZWxlemlvbmF0byAoY2xpY2spJyB9XSxcclxuICAgIH0sXHJcbl07XHJcblxyXG4vKipcclxuICogTm9tZSBkaSB1biBjYW1wbyBkYSBtb3N0cmFyZSBhIHZpZGVvLiBEZXNjcmlwdGlvbiBwdcOyIHZhbGVyZSBcIiBcIiAodW5vIHNwYXppbzogdHJ1dGh5IG1hXHJcbiAqIGludmlzaWJpbGUpLCBxdWluZGkgdmEgcmlwdWxpdGEgcHJpbWEgZGkgdXNhcmxhOyBwb2kgaWwgdGVzdG8gZGVsbCdFdGljaGV0dGEsIGlsIGNvZGljZSwgaWwgTmFtZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERpc3BsYXlOYW1lKGZpZWxkOiBCYXNlRmllbGQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFmaWVsZCkgeyByZXR1cm4gJyc7IH1cclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgZmllbGQuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgKGZpZWxkIGFzIGFueSkuRXRpY2hldHRhLFxyXG4gICAgICAgIGZpZWxkLkxhYmVsLFxyXG4gICAgICAgIGZpZWxkLk5hbWUsXHJcbiAgICBdO1xyXG4gICAgZm9yIChjb25zdCBjIG9mIGNhbmRpZGF0ZXMpIHtcclxuICAgICAgICBjb25zdCB0ID0gKGMgPz8gJycpLnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgIGlmICh0KSB7IHJldHVybiB0OyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbn1cclxuXHJcbi8qKiBEZWZpbml6aW9uZSBkZWwgY2F0YWxvZ28gcGVyIHVuYSB0aXBvbG9naWE7IG51bGwgc2UgbGEgdGlwb2xvZ2lhIG5vbiBoYSBncmFmaWNhIGNvbmZpZ3VyYWJpbGUgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkU3R5bGVUeXBlRGVmKGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSB8IG51bWJlcik6IEZpZWxkU3R5bGVUeXBlRGVmIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gRklFTERfU1RZTEVfQ0FUQUxPRy5maW5kKChkKSA9PiBOdW1iZXIoZC5maWVsZFR5cGUpID09PSBOdW1iZXIoZmllbGRUeXBlKSkgPz8gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVsZW1lbnRpIGdyYWZpY2kgZGkgdW4gY2FtcG8uIENvaW5jaWRvbm8gY29uIHF1ZWxsaSBkZWwgY2F0YWxvZ28sIHNhbHZvIGwnRWxlbmNvIGdlbmVyaWNvXHJcbiAqIGRvdmUgZGlwZW5kb25vIGRhbGxhIG1vZGFsaXTDoCBkaSBwcmVzZW50YXppb25lIHNjZWx0YSBzdWwgY2FtcG8uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRTdHlsZUVsZW1lbnRzKGZpZWxkOiBCYXNlRmllbGQpOiBBcnJheTxGaWVsZFN0eWxlRW50cnlEZWY+IHtcclxuICAgIGNvbnN0IGRlZiA9IGdldEZpZWxkU3R5bGVUeXBlRGVmKGZpZWxkPy5GaWVsZFR5cGUpO1xyXG4gICAgaWYgKCFkZWYpIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgaWYgKE51bWJlcihkZWYuZmllbGRUeXBlKSA9PT0gTnVtYmVyKEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddKSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGUgPSBOdW1iZXIoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKT8uUHJlc2VudGF0aW9uTW9kZSk7XHJcbiAgICAgICAgaWYgKG1vZGUgPT09IExpc3RQcmVzZW50YXRpb25FbnVtWydQdWxzYW50ZSBjb24gdGVzdG8nXSkgeyByZXR1cm4gTElTVF9WQUxVRV9CVVRUT05fRUxFTUVOVFM7IH1cclxuICAgICAgICBpZiAobW9kZSA9PT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddKSB7IHJldHVybiBMSVNUX1ZBTFVFX1JBRElPX0VMRU1FTlRTOyB9XHJcbiAgICAgICAgcmV0dXJuIExJU1RfVkFMVUVfQ09NQk9fRUxFTUVOVFM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlZi5lbGVtZW50cztcclxufVxyXG5cclxuLyoqIE1hcHBhIGRlZ2xpIHN0aWxpIGRlbCBjYW1wbyAocHXDsiBlc3NlcmUgdW5kZWZpbmVkIHNlIG5vbiDDqCBtYWkgc3RhdGEgdmFsb3JpenphdGEpICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZFN0eWxlTWFwKGZpZWxkOiBCYXNlRmllbGQpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBkZWYgPSBnZXRGaWVsZFN0eWxlVHlwZURlZihmaWVsZD8uRmllbGRUeXBlKTtcclxuICAgIGlmICghZGVmKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICByZXR1cm4gKGZpZWxkIGFzIGFueSlbZGVmLnN0eWxlUHJvcF0gPz8gbnVsbDtcclxufVxyXG5cclxuLyoqIENvbWUgZ2V0RmllbGRTdHlsZU1hcCwgbWEgY3JlYSBsYSBtYXBwYSBzZSBtYW5jYSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRmllbGRTdHlsZU1hcChmaWVsZDogQmFzZUZpZWxkKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwge1xyXG4gICAgY29uc3QgZGVmID0gZ2V0RmllbGRTdHlsZVR5cGVEZWYoZmllbGQ/LkZpZWxkVHlwZSk7XHJcbiAgICBpZiAoIWRlZikgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgaWYgKCEoZmllbGQgYXMgYW55KVtkZWYuc3R5bGVQcm9wXSkgeyAoZmllbGQgYXMgYW55KVtkZWYuc3R5bGVQcm9wXSA9IHt9OyB9XHJcbiAgICByZXR1cm4gKGZpZWxkIGFzIGFueSlbZGVmLnN0eWxlUHJvcF07XHJcbn1cclxuXHJcbi8qKiBMZWdnZSBpbCBDU1MgZGkgdW4gXCJFbGVtZW50byArIFN0YXRvXCIgKGVzLiBcIklucHV0Rm9jdXNlZFwiKSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRTdHlsZVZhbHVlKGZpZWxkOiBCYXNlRmllbGQsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXRGaWVsZFN0eWxlTWFwKGZpZWxkKT8uW2tleV0gPz8gJyc7XHJcbn1cclxuXHJcbi8qKiBTY3JpdmUgaWwgQ1NTIGRpIHVuIFwiRWxlbWVudG8gKyBTdGF0b1wiOyBpbCB2YWxvcmUgdnVvdG8gcmltdW92ZSBsYSBjaGlhdmUgZGFsIEpTT04gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpZWxkU3R5bGVWYWx1ZShmaWVsZDogQmFzZUZpZWxkLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWFwID0gZW5zdXJlRmllbGRTdHlsZU1hcChmaWVsZCk7XHJcbiAgICBpZiAoIW1hcCkgeyByZXR1cm47IH1cclxuICAgIC8vIHVuZGVmaW5lZCB2aWVuZSBlc2NsdXNvIGRhIEpTT04uc3RyaW5naWZ5IC0+IGlsIEpTT04gc2FsdmF0byByaW1hbmUgY29tcGF0dG9cclxuICAgIChtYXAgYXMgYW55KVtrZXldID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKiogVHJ1ZSBzZSBpbCBjYW1wbyBub24gaGEgYW5jb3JhIG5lc3N1bmEgcmVnb2xhIGdyYWZpY2EgaW1wb3N0YXRhICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZpZWxkU3R5bGVNYXBFbXB0eShmaWVsZDogQmFzZUZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtYXAgPSBnZXRGaWVsZFN0eWxlTWFwKGZpZWxkKTtcclxuICAgIGlmICghbWFwKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKG1hcCkuc29tZSgoaykgPT4gISFtYXBba10pO1xyXG59XHJcblxyXG4vKiogQ29waWEgcHJvZm9uZGEgZGVsbGEgbWFwcGEgc3RpbGkgZGkgdW4gY2FtcG8gKHNvbG8gbGUgY2hpYXZpIHZhbG9yaXp6YXRlKSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVGaWVsZFN0eWxlTWFwKGZpZWxkOiBCYXNlRmllbGQpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IG1hcCA9IGdldEZpZWxkU3R5bGVNYXAoZmllbGQpO1xyXG4gICAgY29uc3QgY2xvbmU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGlmICghbWFwKSB7IHJldHVybiBjbG9uZTsgfVxyXG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKChrKSA9PiB7IGlmIChtYXBba10pIHsgY2xvbmVba10gPSBtYXBba107IH0gfSk7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn1cclxuXHJcbi8vI3JlZ2lvbiBHcmFmaWNhIGdsb2JhbGVcclxuXHJcbi8qKlxyXG4gKiBFbGVtZW50byBcImxvZ2ljb1wiIGRlbGxhIGdyYWZpY2EgZ2xvYmFsZTogdW4gY29uY2V0dG8gKGNvbnRlbml0b3JlLCBldGljaGV0dGEsIGFyZWEgZGVsIHZhbG9yZSlcclxuICogcHJlc2VudGUgaW4gcXVhc2kgdHV0dGUgbGUgdGlwb2xvZ2llIG1hIGNoZSBvZ25pIHRpcG9sb2dpYSBjaGlhbWEgY29uIHVuIG5vbWUgZGl2ZXJzby5cclxuICogU2VydmUgYWxsYSBzY2hlZGEgXCJHcmFmaWNhIGdsb2JhbGVcIiwgZG92ZSBzaSBtb2RpZmljYW5vIGluc2llbWUgY2FtcGkgZGkgdGlwb2xvZ2llIGRpdmVyc2UuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbFN0eWxlRWxlbWVudERlZiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICAvKiogUGVyIG9nbmkgdGlwb2xvZ2lhLCBnbGkgZWxlbWVudGkgcmVhbGkgc3UgY3VpIHNjcml2ZXJlICovXHJcbiAgICBwZXJUeXBlOiB7IFtmaWVsZFR5cGU6IG51bWJlcl06IEFycmF5PHN0cmluZz4gfTtcclxufVxyXG5cclxuY29uc3QgRlQgPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuZXhwb3J0IGNvbnN0IEdMT0JBTF9TVFlMRV9FTEVNRU5UUzogQXJyYXk8R2xvYmFsU3R5bGVFbGVtZW50RGVmPiA9IFtcclxuICAgIHtcclxuICAgICAgICBrZXk6ICdDb250ZW5pdG9yZScsXHJcbiAgICAgICAgbGFiZWw6ICdDb250ZW5pdG9yZScsXHJcbiAgICAgICAgcGVyVHlwZToge1xyXG4gICAgICAgICAgICBbRlRbJ0NhbXBvIGRpIHRlc3RvJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0FyZWEgZGkgdGVzdG8nXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gbnVtZXJpY28nXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQm9vbGVhbm8nXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnRGF0YSBlL28gb3JhJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0FsbGVnYXRvJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0ltbWFnaW5lJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0VsZW5jbyBnZW5lcmljbyddXTogWydDb250YWluZXInXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnRXRpY2hldHRhJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0JvdHRvbmUnXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAga2V5OiAnRXRpY2hldHRhJyxcclxuICAgICAgICBsYWJlbDogJ0V0aWNoZXR0YSAvIGRlc2NyaXppb25lJyxcclxuICAgICAgICBwZXJUeXBlOiB7XHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gZGkgdGVzdG8nXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydBcmVhIGRpIHRlc3RvJ11dOiBbJ0Rlc2NyaXppb25lJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gbnVtZXJpY28nXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydCb29sZWFubyddXTogWydEZXNjcml6aW9uZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0RhdGEgZS9vIG9yYSddXTogWydEZXNjcml6aW9uZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0FsbGVnYXRvJ11dOiBbJ0xhYmVsJ10sXHJcbiAgICAgICAgICAgIFtGVFsnSW1tYWdpbmUnXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gZ2VuZXJpY28nXV06IFsnTGFiZWwnXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydJbW1hZ2luZSBjb24gbWFya2VycyddXTogWydEZXNjcml6aW9uZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0JvdHRvbmUnXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBrZXk6ICdWYWxvcmUnLFxyXG4gICAgICAgIGxhYmVsOiAnQXJlYSBkZWwgdmFsb3JlJyxcclxuICAgICAgICBwZXJUeXBlOiB7XHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gZGkgdGVzdG8nXV06IFsnSW5wdXQnXSxcclxuICAgICAgICAgICAgW0ZUWydBcmVhIGRpIHRlc3RvJ11dOiBbJ0lucHV0J10sXHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gbnVtZXJpY28nXV06IFsnSW5wdXQnXSxcclxuICAgICAgICAgICAgW0ZUWydCb29sZWFubyddXTogWydTY2VsdGEnXSxcclxuICAgICAgICAgICAgW0ZUWydEYXRhIGUvbyBvcmEnXV06IFsnQ2FtcG9EYXRhJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQWxsZWdhdG8nXV06IFsnQ2FtcG9Ob21lRmlsZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0VsZW5jbyBnZW5lcmljbyddXTogWydDYXNlbGxhVHJpZ2dlcicsICdPcHppb25lJywgJ0JvdHRvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IFsnQ2FzZWxsYVNlbGV6aW9uZSddLFxyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEVsZW1lbnRpIHJlYWxpIGRpIHVuIGNhbXBvIGNvcnJpc3BvbmRlbnRpIGEgdW4gZWxlbWVudG8gbG9naWNvIGdsb2JhbGUuXHJcbiAqIEludGVyc2VjYSBsYSBtYXBwYXR1cmEgcGVyIHRpcG9sb2dpYSBjb24gZ2xpIGVsZW1lbnRpIGNoZSBpbCBjYW1wbyBoYSBkYXZ2ZXJvXHJcbiAqIChsJ0VsZW5jbyBnZW5lcmljbywgcGVyIGVzZW1waW8sIGNhbWJpYSBlbGVtZW50aSBpbiBiYXNlIGFsbGEgbW9kYWxpdMOgIGRpIHByZXNlbnRhemlvbmUpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHbG9iYWxFbGVtZW50S2V5cyhmaWVsZDogQmFzZUZpZWxkLCBnbG9iYWxLZXk6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgY29uc3QgZGVmID0gR0xPQkFMX1NUWUxFX0VMRU1FTlRTLmZpbmQoKGcpID0+IGcua2V5ID09PSBnbG9iYWxLZXkpO1xyXG4gICAgaWYgKCFkZWYpIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IGRlZi5wZXJUeXBlW051bWJlcihmaWVsZD8uRmllbGRUeXBlKV0gPz8gW107XHJcbiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChnZXRGaWVsZFN0eWxlRWxlbWVudHMoZmllbGQpLm1hcCgoZSkgPT4gZS5rZXkpKTtcclxuICAgIHJldHVybiBjYW5kaWRhdGVzLmZpbHRlcigoaykgPT4gYXZhaWxhYmxlLmhhcyhrKSk7XHJcbn1cclxuXHJcbi8qKiBTdGF0aSBjb211bmkgYSB0dXR0ZSBsZSB0aXBvbG9naWUgcGFzc2F0ZTogc29ubyBnbGkgdW5pY2kgYXBwbGljYWJpbGkgZ2xvYmFsbWVudGUgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vblN0YXRlcyhmaWVsZFR5cGVzOiBBcnJheTxGaWVsZFR5cGVFbnVtIHwgbnVtYmVyPik6IEFycmF5PEZpZWxkU3R5bGVFbnRyeURlZj4ge1xyXG4gICAgY29uc3QgZGVmcyA9IGZpZWxkVHlwZXNcclxuICAgICAgICAubWFwKCh0KSA9PiBnZXRGaWVsZFN0eWxlVHlwZURlZih0KSlcclxuICAgICAgICAuZmlsdGVyKChkKTogZCBpcyBGaWVsZFN0eWxlVHlwZURlZiA9PiBkICE9IG51bGwpO1xyXG4gICAgaWYgKGRlZnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBbXTsgfVxyXG5cclxuICAgIHJldHVybiBkZWZzWzBdLnN0YXRlcy5maWx0ZXIoKHN0YXRlKSA9PlxyXG4gICAgICAgIGRlZnMuZXZlcnkoKGQpID0+IGQuc3RhdGVzLnNvbWUoKHMpID0+IHMua2V5ID09PSBzdGF0ZS5rZXkpKVxyXG4gICAgKTtcclxufVxyXG5cclxuLy8jZW5kcmVnaW9uIEdyYWZpY2EgZ2xvYmFsZVxyXG5cclxuLy8jcmVnaW9uIENTUyBsZWdhY3kgKEZpZWxkc3R5bGVDU1MgLyBMYWJlbHN0eWxlQ1NTKVxyXG5cclxuLyoqXHJcbiAqIEkgY2FtcGkgaGFubm8gZHVlIHByb3ByaWV0w6Agc3RvcmljaGUsIExhYmVsc3R5bGVDU1MgZSBGaWVsZHN0eWxlQ1NTLCBjaGUgaSB0ZW1wbGF0ZVxyXG4gKiBhcHBsaWNhbm8gYW5jb3JhIGNvbiBbbmdTdHlsZV0sIHF1aW5kaSBjb21lIHN0aWxpIElOTElORS4gRXNzZW5kbyBpbmxpbmUgYmF0dG9ubyBsZSByZWdvbGVcclxuICogXCIjdWlkIHsgLi4uIH1cIiBpbmlldHRhdGUgZGFsbGEgZ3JhZmljYSBwZXIgZWxlbWVudG8gZSBzdGF0bzogdW4gY29sb3JlIGltcG9zdGF0byBkYWxsJ2VkaXRvclxyXG4gKiBncmFmaWNvIG5vbiBzaSB2ZWRldmEgc3VpIGNhbXBpIGNoZSBhdmV2YW5vIGlsIENTUyBsZWdhY3kgdmFsb3JpenphdG8uXHJcbiAqXHJcbiAqIFF1ZXN0YSB0YWJlbGxhIGRpY2UsIHBlciBvZ25pIHRpcG9sb2dpYSwgc3UgcXVhbGUgZWxlbWVudG8gZGVsbGEgZ3JhZmljYSBudW92YSBmaW5pc2NlXHJcbiAqIGNpYXNjdW5hIGRlbGxlIGR1ZSBwcm9wcmlldMOgIGxlZ2FjeSwgaW4gbW9kbyBkYSBwb3RlcmxlIGFzc29yYmlyZSBlIGF2ZXJlIHVuYSBzb2xhIGZvbnRlXHJcbiAqIGRpIHZlcml0w6AuIExlIHRpcG9sb2dpZSBhc3NlbnRpIG5vbiB1c2FubyBbbmdTdHlsZV0gaW4gbmVzc3VuIHRlbXBsYXRlLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExFR0FDWV9TVFlMRV9UQVJHRVRTOiB7IFtmaWVsZFR5cGU6IG51bWJlcl06IHsgbGFiZWw/OiBzdHJpbmc7IGZpZWxkPzogc3RyaW5nIH0gfSA9IHtcclxuICAgIFtGVFsnQ2FtcG8gZGkgdGVzdG8nXV06IHsgbGFiZWw6ICdEZXNjcml6aW9uZScsIGZpZWxkOiAnSW5wdXQnIH0sXHJcbiAgICBbRlRbJ0FyZWEgZGkgdGVzdG8nXV06IHsgbGFiZWw6ICdEZXNjcml6aW9uZScsIGZpZWxkOiAnSW5wdXQnIH0sXHJcbiAgICBbRlRbJ0NhbXBvIG51bWVyaWNvJ11dOiB7IGxhYmVsOiAnRGVzY3JpemlvbmUnLCBmaWVsZDogJ0lucHV0JyB9LFxyXG4gICAgW0ZUWydCb29sZWFubyddXTogeyBsYWJlbDogJ0Rlc2NyaXppb25lJyB9LFxyXG4gICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IHsgbGFiZWw6ICdEZXNjcml6aW9uZScgfSxcclxuICAgIFtGVFsnRXRpY2hldHRhJ11dOiB7IGxhYmVsOiAnQ29udGFpbmVyJyB9LFxyXG4gICAgW0ZUWydFbGVuY28gZ2VuZXJpY28nXV06IHsgbGFiZWw6ICdMYWJlbCcsIGZpZWxkOiAnQ29udGFpbmVyJyB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lNZXJnZVJlc3VsdCB7XHJcbiAgICAvKiogUHJvcHJpZXTDoCBsZWdhY3kgYXNzb3JiaXRlICovXHJcbiAgICBjb25zdW1lZDogQXJyYXk8J0xhYmVsc3R5bGVDU1MnIHwgJ0ZpZWxkc3R5bGVDU1MnPjtcclxuICAgIC8qKiBDaGlhdmkgXCJFbGVtZW50b1N0YXRvXCIgdG9jY2F0ZSBkYWxsJ2Fzc29yYmltZW50byAqL1xyXG4gICAga2V5czogQXJyYXk8c3RyaW5nPjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJpdmVyc2EgaWwgQ1NTIGxlZ2FjeSBkZWwgY2FtcG8gZGVudHJvIHVuYSBtYXBwYSBcIkVsZW1lbnRvK1N0YXRvXCIgLT4gQ1NTLCBzdWxsbyBzdGF0byBOb3JtYWxlLlxyXG4gKiBOb24gc292cmFzY3JpdmUgbGUgcHJvcHJpZXTDoCBnacOgIHByZXNlbnRpIG5lbGxhIG1hcHBhOiBsYSBncmFmaWNhIG51b3ZhIGhhIGxhIHByZWNlZGVuemEuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMZWdhY3lTdHlsZXNJbnRvTWFwKFxyXG4gICAgZmllbGQ6IEJhc2VGaWVsZCxcclxuICAgIG1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcclxuICAgIG9ubHk/OiAnTGFiZWxzdHlsZUNTUycgfCAnRmllbGRzdHlsZUNTUydcclxuKTogTGVnYWN5TWVyZ2VSZXN1bHQge1xyXG4gICAgY29uc3QgcmVzdWx0OiBMZWdhY3lNZXJnZVJlc3VsdCA9IHsgY29uc3VtZWQ6IFtdLCBrZXlzOiBbXSB9O1xyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IExFR0FDWV9TVFlMRV9UQVJHRVRTW051bWJlcihmaWVsZD8uRmllbGRUeXBlKV07XHJcbiAgICBpZiAoIXRhcmdldCkgeyByZXR1cm4gcmVzdWx0OyB9XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChnZXRGaWVsZFN0eWxlRWxlbWVudHMoZmllbGQpLm1hcCgoZSkgPT4gZS5rZXkpKTtcclxuXHJcbiAgICBjb25zdCBhYnNvcmIgPSAoY3NzOiBzdHJpbmcsIGVsZW1lbnRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgbmFtZTogJ0xhYmVsc3R5bGVDU1MnIHwgJ0ZpZWxkc3R5bGVDU1MnKSA9PiB7XHJcbiAgICAgICAgaWYgKG9ubHkgJiYgb25seSAhPT0gbmFtZSkgeyByZXR1cm47IH1cclxuICAgICAgICBpZiAoIWNzcyB8fCAhY3NzLnRyaW0oKSB8fCAhZWxlbWVudEtleSB8fCAhYXZhaWxhYmxlLmhhcyhlbGVtZW50S2V5KSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgY29uc3Qga2V5ID0gZWxlbWVudEtleSArICdOb3JtYWxlJztcclxuICAgICAgICBsZXQgY3VycmVudCA9IG1hcFtrZXldID8/ICcnO1xyXG5cclxuICAgICAgICBwYXJzZUNzc0RlY2xhcmF0aW9ucyhjc3MpLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFnZXRDc3NEZWNsYXJhdGlvbihjdXJyZW50LCBkLnByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gc2V0Q3NzRGVjbGFyYXRpb24oY3VycmVudCwgZC5wcm9wLCBkLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudCkgeyBtYXBba2V5XSA9IGN1cnJlbnQ7IH1cclxuICAgICAgICByZXN1bHQuY29uc3VtZWQucHVzaChuYW1lKTtcclxuICAgICAgICBpZiAoIXJlc3VsdC5rZXlzLmluY2x1ZGVzKGtleSkpIHsgcmVzdWx0LmtleXMucHVzaChrZXkpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIGFic29yYihmaWVsZC5MYWJlbHN0eWxlQ1NTLCB0YXJnZXQubGFiZWwsICdMYWJlbHN0eWxlQ1NTJyk7XHJcbiAgICBhYnNvcmIoZmllbGQuRmllbGRzdHlsZUNTUywgdGFyZ2V0LmZpZWxkLCAnRmllbGRzdHlsZUNTUycpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqIENoaWF2ZSBcIkVsZW1lbnRvTm9ybWFsZVwiIHN1IGN1aSBmaW5pcmViYmUgdW5hIHByb3ByaWV0w6AgbGVnYWN5LCBvIG51bGwgc2Ugbm9uIGFwcGxpY2FiaWxlICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsZWdhY3lUYXJnZXRLZXkoZmllbGQ6IEJhc2VGaWVsZCwgbmFtZTogJ0xhYmVsc3R5bGVDU1MnIHwgJ0ZpZWxkc3R5bGVDU1MnKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBMRUdBQ1lfU1RZTEVfVEFSR0VUU1tOdW1iZXIoZmllbGQ/LkZpZWxkVHlwZSldO1xyXG4gICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50S2V5ID0gbmFtZSA9PT0gJ0xhYmVsc3R5bGVDU1MnID8gdGFyZ2V0LmxhYmVsIDogdGFyZ2V0LmZpZWxkO1xyXG4gICAgaWYgKCFlbGVtZW50S2V5KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChnZXRGaWVsZFN0eWxlRWxlbWVudHMoZmllbGQpLm1hcCgoZSkgPT4gZS5rZXkpKTtcclxuICAgIHJldHVybiBhdmFpbGFibGUuaGFzKGVsZW1lbnRLZXkpID8gZWxlbWVudEtleSArICdOb3JtYWxlJyA6IG51bGw7XHJcbn1cclxuXHJcbi8qKiBNYXBwYSBzdGlsaSBcImVmZmV0dGl2YVwiIGRpIHVuIGNhbXBvOiBxdWVsbGEgcGVyIGVsZW1lbnRvIHBpw7kgaWwgQ1NTIGxlZ2FjeSBhc3NvcmJpdG8gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVmZmVjdGl2ZVN0eWxlTWFwKGZpZWxkOiBCYXNlRmllbGQpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IG1hcCA9IGNsb25lRmllbGRTdHlsZU1hcChmaWVsZCk7XHJcbiAgICBtZXJnZUxlZ2FjeVN0eWxlc0ludG9NYXAoZmllbGQsIG1hcCk7XHJcbiAgICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG4vKipcclxuICogVHJ1ZSBzZSBpbCBjYW1wbyBoYSB1bmEgZ3JhZmljYSBkYSBxdWFsY2hlIHBhcnRlOiBuZWxsYSBtYXBwYSBwZXIgZWxlbWVudG8gb3BwdXJlIG5lbCBDU1NcclxuICogbGVnYWN5LiDDiCBpbCB0ZXN0IGdpdXN0byBwZXIgXCJxdWVzdG8gY2FtcG8gcHXDsiBmYXJlIGRhIHNvcmdlbnRlXCIgKGVyZWRpdMOgLCBDb3BpYSBHcmFmaWNhKTpcclxuICogaXNGaWVsZFN0eWxlTWFwRW1wdHkgZ3VhcmRhIHNvbG8gbGEgbWFwcGEgbnVvdmEgZSBpZ25vcmVyZWJiZSBpIGNhbXBpIHN0aWxpenphdGkgc29sbyBjb2wgbGVnYWN5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc0VmZmVjdGl2ZVN0eWxlcyhmaWVsZDogQmFzZUZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZ2V0RWZmZWN0aXZlU3R5bGVNYXAoZmllbGQpKS5sZW5ndGggPiAwO1xyXG59XHJcblxyXG4vLyNlbmRyZWdpb24gQ1NTIGxlZ2FjeSAoRmllbGRzdHlsZUNTUyAvIExhYmVsc3R5bGVDU1MpXHJcblxyXG4vLyNyZWdpb24gR3JhZmljYSBkaSBkZWZhdWx0IGVyZWRpdGF0YVxyXG5cclxuLyoqXHJcbiAqIEdyYWZpY2EgZGkgZGVmYXVsdCBjb3N0cnVpdGEgYSBwYXJ0aXJlIGRhIGNhbXBpIGRpIHRpcG9sb2dpYSBESVZFUlNBLlxyXG4gKlxyXG4gKiBMJ2VyZWRpdMOgIG5hdHVyYWxlIMOoIGZyYSBjYW1waSBkZWxsYSBzdGVzc2EgdGlwb2xvZ2lhLCBjaGUgY29uZGl2aWRvbm8gaSBub21pIGRlZ2xpIGVsZW1lbnRpLlxyXG4gKiBRdWFuZG8gcGVyw7IgdW5hIHRpcG9sb2dpYSB2aWVuZSB1c2F0YSBwZXIgbGEgcHJpbWEgdm9sdGEgbm9uIGMnw6ggbmVzc3VuIGNhbXBvIHNpbWlsZSBkYSBjdWlcclxuICogY29waWFyZTogaW4gcXVlbCBjYXNvIHNpIHBhc3NhIHBlciBnbGkgZWxlbWVudGkgbG9naWNpIGRlbGxhIGdyYWZpY2EgZ2xvYmFsZSAoY29udGVuaXRvcmUsXHJcbiAqIGV0aWNoZXR0YSwgYXJlYSBkZWwgdmFsb3JlKSwgY2hlIG9nbmkgdGlwb2xvZ2lhIHNhIHRyYWR1cnJlIG5laSBwcm9wcmkgZWxlbWVudGkuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZCAgIGNhbXBvIG51b3ZvIGNoZSBkZXZlIHJpY2V2ZXJlIGxhIGdyYWZpY2FcclxuICogQHBhcmFtIHNvdXJjZXMgY2FtcGkgZ2nDoCBwcmVzZW50aSBuZWxsYSBmb3JtLCBpbiBvcmRpbmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEdsb2JhbEluaGVyaXRlZE1hcChcclxuICAgIGZpZWxkOiBCYXNlRmllbGQsXHJcbiAgICBzb3VyY2VzOiBBcnJheTxCYXNlRmllbGQ+XHJcbik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4gICAgY29uc3QgdHlwZURlZiA9IGdldEZpZWxkU3R5bGVUeXBlRGVmKGZpZWxkPy5GaWVsZFR5cGUpO1xyXG4gICAgaWYgKCF0eXBlRGVmKSB7IHJldHVybiByZXN1bHQ7IH1cclxuXHJcbiAgICBHTE9CQUxfU1RZTEVfRUxFTUVOVFMuZm9yRWFjaCgoZ2xvYmFsRWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEtleXMgPSByZXNvbHZlR2xvYmFsRWxlbWVudEtleXMoZmllbGQsIGdsb2JhbEVsZW1lbnQua2V5KTtcclxuICAgICAgICBpZiAodGFyZ2V0S2V5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMgPz8gW10pIHtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZSA9PT0gZmllbGQpIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgaWYgKE51bWJlcihzb3VyY2U/LkZpZWxkVHlwZSkgPT09IE51bWJlcih0eXBlRGVmLmZpZWxkVHlwZSkpIHsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUtleXMgPSByZXNvbHZlR2xvYmFsRWxlbWVudEtleXMoc291cmNlLCBnbG9iYWxFbGVtZW50LmtleSk7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VLZXlzLmxlbmd0aCA9PT0gMCkgeyBjb250aW51ZTsgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc291cmNlTWFwID0gZ2V0RWZmZWN0aXZlU3R5bGVNYXAoc291cmNlKTtcclxuICAgICAgICAgICAgbGV0IGNvcGllZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gU29sbyBnbGkgc3RhdGkgY2hlIGxhIHRpcG9sb2dpYSBkaSBkZXN0aW5hemlvbmUgY29ub3NjZSBkYXZ2ZXJvXHJcbiAgICAgICAgICAgIHR5cGVEZWYuc3RhdGVzLmZvckVhY2goKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjc3MgPSBzb3VyY2VNYXBbc291cmNlS2V5c1swXSArIHN0YXRlLmtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNzcyB8fCAhY3NzLnRyaW0oKSkgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIHRhcmdldEtleXMuZm9yRWFjaCgodGspID0+IHsgcmVzdWx0W3RrICsgc3RhdGUua2V5XSA9IGNzczsgfSk7XHJcbiAgICAgICAgICAgICAgICBjb3BpZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3BpZWQpIHsgYnJlYWs7IH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vLyNlbmRyZWdpb24gR3JhZmljYSBkaSBkZWZhdWx0IGVyZWRpdGF0YVxyXG4iXX0=
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -5,6 +5,7 @@ export * from './lib/eqp-dynamic-module.module';
|
|
|
5
5
|
export * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';
|
|
6
6
|
export * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';
|
|
7
7
|
export * from './lib/components/private/add-form-field/add-form-field.component';
|
|
8
|
+
export * from './lib/components/private/field-graphics-editor/field-graphics-editor.component';
|
|
8
9
|
export * from './lib/components/private/dynamic-module-field-fix/dynamic-module-field.component';
|
|
9
10
|
export * from './lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component';
|
|
10
11
|
export * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';
|
|
@@ -57,4 +58,8 @@ export * from './lib/services/utilityHelper.services';
|
|
|
57
58
|
export * from './lib/models/graph.model';
|
|
58
59
|
export * from './lib/directives/dynamic-loader/dynamic-loader.directive';
|
|
59
60
|
export * from './lib/directives/speech-to-text/speech-to-text.directive';
|
|
60
|
-
|
|
61
|
+
export * from './lib/utils/field-style-catalog';
|
|
62
|
+
export * from './lib/utils/css-declarations';
|
|
63
|
+
export * from './lib/utils/css-property-catalog';
|
|
64
|
+
export * from './lib/utils/css-color';
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyRUFBMkUsQ0FBQztBQUMxRixjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLGtGQUFrRixDQUFDO0FBQ2pHLGNBQWMsa0dBQWtHLENBQUM7QUFDakgsY0FBYyx3R0FBd0csQ0FBQztBQUN2SCxjQUFjLGtHQUFrRyxDQUFDO0FBQ2pILGNBQWMsNEZBQTRGLENBQUM7QUFDM0csY0FBYyw4RkFBOEYsQ0FBQztBQUM3RyxjQUFjLHdHQUF3RyxDQUFDO0FBQ3ZILGNBQWMsa0dBQWtHLENBQUM7QUFDakgsY0FBYyw0RkFBNEYsQ0FBQztBQUMzRyxjQUFjLG9HQUFvRyxDQUFDO0FBQ25ILGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyx1RkFBdUYsQ0FBQztBQUN0RyxjQUFjLG1GQUFtRixDQUFDO0FBQ2xHLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZXFwLWR5bmFtaWMtbW9kdWxlXHJcbiAqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lcXAtZHluYW1pYy1tb2R1bGUubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnRlZC9lcXAtZHluYW1pYy1tb2R1bGUvZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtZ3JhcGhpY3MtZWRpdG9yL2ZpZWxkLWdyYXBoaWNzLWVkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS9hdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS9ib29sZWFuLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvZGF0ZS1maWVsZC10ZW1wbGF0ZS9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvaW1hZ2UtZmllbGQtdGVtcGxhdGUvaW1hZ2UtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9udW1lcmljLWZpZWxkLXRlbXBsYXRlL251bWVyaWMtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy90ZXh0LWZpZWxkLXRlbXBsYXRlL3RleHQtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9yZXBhaXItZm9ybS1maWVsZHMvcmVwYWlyLWZvcm0tZmllbGRzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC1mb3JtLXJlY29yZC9saXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL2lSb290T2JqZWN0LmludGVyZmFjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvYmFzZU9iai5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jb250ZXh0Lm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudGl0eS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9mb3JtLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3N0YXRpc3RpYy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZEV4dHJhQ29uZmlnLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9sb29rdXBGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zcGlubmVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2dyYXBoLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3NwZWVjaC10by10ZXh0L3NwZWVjaC10by10ZXh0LmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2ZpZWxkLXN0eWxlLWNhdGFsb2cnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jc3MtZGVjbGFyYXRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY3NzLXByb3BlcnR5LWNhdGFsb2cnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jc3MtY29sb3InO1xyXG4iXX0=
|