brainloper-ui 14.1.0 → 14.1.2
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/brainloper-ui.mjs +4 -4
- package/esm2020/public_api.mjs +56 -51
- package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +310 -305
- package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +29 -29
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +23 -23
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +83 -83
- package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +37 -31
- package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +176 -176
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +728 -652
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +118 -118
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +186 -185
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +1 -1
- package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +222 -222
- package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +80 -80
- package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +81 -81
- package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +108 -108
- package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +18 -0
- package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +8 -7
- package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +8 -8
- package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +2 -2
- package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +2 -2
- package/esm2020/src/app/modules/services/crypto.service.mjs +37 -37
- package/esm2020/src/app/modules/services/export-data.service.mjs +166 -166
- package/esm2020/src/app/modules/services/file-forms.service.mjs +24 -24
- package/esm2020/src/app/modules/services/functions.service.mjs +54 -54
- package/esm2020/src/app/modules/services/generate-pdf.service.mjs +58 -58
- package/esm2020/src/app/modules/services/http.service.mjs +97 -154
- package/esm2020/src/app/modules/services/loading/loading.component.mjs +28 -28
- package/esm2020/src/app/modules/services/local-storage.service.mjs +115 -115
- package/esm2020/src/app/modules/services/message.service.mjs +200 -200
- package/esm2020/src/app/modules/services/screen-size-util.mjs +6 -6
- package/esm2020/src/app/modules/services/session.service.mjs +42 -42
- package/fesm2015/brainloper-ui.mjs +2819 -2769
- package/fesm2015/brainloper-ui.mjs.map +1 -1
- package/fesm2020/brainloper-ui.mjs +2779 -2733
- package/fesm2020/brainloper-ui.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/package.json +3 -1
- package/public_api.d.ts +55 -50
- package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +62 -73
- package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -13
- package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -10
- package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -24
- package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +15 -12
- package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -46
- package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +125 -119
- package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -21
- package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -42
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -2
- package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -30
- package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +35 -35
- package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +36 -36
- package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -26
- package/src/app/modules/directives/carousel-item.directive.d.ts +9 -0
- package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -9
- package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -6
- package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -13
- package/src/app/modules/interfaces/data-table/params.d.ts +7 -7
- package/src/app/modules/interfaces/data-table/rules.d.ts +8 -8
- package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -25
- package/src/app/modules/interfaces/data-table/table-configuration.d.ts +26 -25
- package/src/app/modules/interfaces/enum/enumActions.d.ts +6 -5
- package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -6
- package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -4
- package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -13
- package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -13
- package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -10
- package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +19 -19
- package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +20 -20
- package/src/app/modules/services/crypto.service.d.ts +10 -10
- package/src/app/modules/services/export-data.service.d.ts +18 -18
- package/src/app/modules/services/file-forms.service.d.ts +7 -7
- package/src/app/modules/services/functions.service.d.ts +13 -13
- package/src/app/modules/services/generate-pdf.service.d.ts +12 -12
- package/src/app/modules/services/http.service.d.ts +22 -21
- package/src/app/modules/services/loading/loading.component.d.ts +15 -15
- package/src/app/modules/services/local-storage.service.d.ts +49 -49
- package/src/app/modules/services/message.service.d.ts +23 -23
- package/src/app/modules/services/screen-size-util.d.ts +3 -3
- package/src/app/modules/services/session.service.d.ts +14 -14
package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs
CHANGED
|
@@ -1,652 +1,728 @@
|
|
|
1
|
-
import { ScreenSizeUtil } from './../../../services/screen-size-util';
|
|
2
|
-
import { Component, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
|
|
3
|
-
import { TableModalComponent } from '../../../brainloper-ui/components/data-table/table-modal/table-modal.component';
|
|
4
|
-
import { MatPaginator } from '@angular/material/paginator';
|
|
5
|
-
import
|
|
6
|
-
import * as
|
|
7
|
-
import * as
|
|
8
|
-
import * as
|
|
9
|
-
import * as
|
|
10
|
-
import * as
|
|
11
|
-
import * as
|
|
12
|
-
import * as
|
|
13
|
-
import * as
|
|
14
|
-
import * as
|
|
15
|
-
import * as
|
|
16
|
-
import * as
|
|
17
|
-
import * as
|
|
18
|
-
import * as
|
|
19
|
-
import * as
|
|
20
|
-
import * as
|
|
21
|
-
import * as
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.
|
|
71
|
-
this.
|
|
72
|
-
this.
|
|
73
|
-
this.
|
|
74
|
-
this.
|
|
75
|
-
this.
|
|
76
|
-
this.
|
|
77
|
-
this.
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
80
|
-
this.
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
84
|
-
this.
|
|
85
|
-
this.
|
|
86
|
-
this.
|
|
87
|
-
this.
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
94
|
-
this.
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
98
|
-
this.
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
condition: () => this.configuration.
|
|
204
|
-
icon: 'fa-
|
|
205
|
-
tooltip: '
|
|
206
|
-
},
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
this.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
this.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
this.
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
data
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
this.
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
if (
|
|
538
|
-
this.
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
this.
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
this.
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
this.
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
type:
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
}],
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
}]
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNM0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLENBQUMsQ0FB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ZCxNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUlvQyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBa2tCM0MsSUFBSyxTQUtKO0FBTEQsV0FBSyxTQUFTO0lBQ1osbUNBQUcsQ0FBQTtJQUNILG1DQUFHLENBQUE7SUFDSCxxQ0FBSSxDQUFBO0lBQ0oscUNBQUksQ0FBQTtBQUNOLENBQUMsRUFMSSxTQUFTLEtBQVQsU0FBUyxRQUtiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NyZWVuU2l6ZVV0aWwgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi1zaXplLXV0aWwnO1xyXG5pbXBvcnQgeyBFeHBvcnREYXRhU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVGFibGVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGdW5jdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JJbnRsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5jb25zdCBzcGFuaXNoUmFuZ2VMYWJlbCA9IChwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSA9PiB7XHJcbiAgaWYgKGxlbmd0aCA9PSAwIHx8IHBhZ2VTaXplID09IDApIHtcclxuICAgIHJldHVybiBgMCBkZSAke2xlbmd0aH1gO1xyXG4gIH1cclxuXHJcbiAgbGVuZ3RoID0gTWF0aC5tYXgobGVuZ3RoLCAwKTtcclxuXHJcbiAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2UgKiBwYWdlU2l6ZTtcclxuXHJcbiAgY29uc3QgZW5kSW5kZXggPVxyXG4gICAgc3RhcnRJbmRleCA8IGxlbmd0aFxyXG4gICAgICA/IE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgbGVuZ3RoKVxyXG4gICAgICA6IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcclxuXHJcbiAgcmV0dXJuIGAke3N0YXJ0SW5kZXggKyAxfSAtICR7ZW5kSW5kZXh9IGRlICR7bGVuZ3RofWA7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RhdGEtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdGl0bGU7XHJcbiAgQElucHV0KCkgY29sdW1ucztcclxuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBjb21ibztcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uID0ge1xyXG4gICAgYWRkOiBmYWxzZSxcclxuICAgIGVkaXQ6IGZhbHNlLFxyXG4gICAgZGVsZXRlOiBmYWxzZSxcclxuICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIHByaW50OiBmYWxzZSxcclxuICAgIGFkZFBlcjogZmFsc2UsXHJcbiAgICBlZGl0UGVyOiBmYWxzZSxcclxuICAgIHByaW1hcnlLZXk6ICdpZCcsXHJcbiAgICBleHBvcnRYc2x4OiBmYWxzZSxcclxuICAgIGhpZGVUaXRsZTogdHJ1ZSxcclxuICAgIGhpZGVGaWx0ZXI6IHRydWUsXHJcbiAgICBub3RJbml0aWFsaXplOiBmYWxzZSxcclxuICAgIGV4cG9ydFhzbHhCeVJvdzogZmFsc2UsXHJcbiAgICBleHBvcnRYc2x4V2l0aFBhZ2VzOiBmYWxzZSxcclxuICAgIHZpZXc6IGZhbHNlLFxyXG4gICAgY2xvc2VPcmRlcjogZmFsc2UsXHJcbiAgICBwYWNrT2ZmOiBmYWxzZSxcclxuICAgIGFkdmFuY2U6IGZhbHNlLFxyXG4gICAgYWR2YW5jZUxhYmVsOiBudWxsLFxyXG4gICAgaW5jb21lOiBmYWxzZSxcclxuICAgIGV4aXQ6IGZhbHNlLFxyXG4gICAgc2VuZEVtYWlsOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSByZWxvYWRUYWJsZTogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFyYW1zOiBBcnJheTxhbnk+O1xyXG4gIEBJbnB1dCgpIHRpdGxlTG9hZGluZzogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbWVzc2FnZUxvYWRpbmc6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGhlYWRlckZpbGVYbHNtOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KCkgaGVhZGVyRmlsdGVyczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHhzbHhUaXRsZUZpZWxkczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgeHNseFNoZWV0TmFtZUZpZWxkczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgeHNseEJvZHlGaWVsZHM6IHN0cmluZztcclxuICBASW5wdXQoKSB4c2x4UGFyYW1zOiBBcnJheTxhbnk+ID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIGNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBwcmludCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBleHBvcnRYc2x4QnlSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYWN0aXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2VPcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBwYWNrT2ZmID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFkdmFuY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5jb21lID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGV4aXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW50ZXJuYWxEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNlbmRFbWFpbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBtb3ZpbCA9IFNjcmVlblNpemVVdGlsLmlzTW9iaWxlKCk7XHJcbiAgZmlsdGVyc1Bvc3Q6IEFycmF5PGFueT4gPSBbXTtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG4gIHNlbGVjdGVkUm93cyA9IFtdOyAvKiogYWxtYWNlbmEgbGFzIGZpbGFzIHNlbGVjY2lvbmFkYXMgKi9cclxuICBjaGVja2JveHMgPSB7fTtcclxuICBzZWxlY3RBbGwgPSBmYWxzZTtcclxuICBpbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuICBmaWx0ZXJzO1xyXG4gIG9yaWdpbmFsRGF0YSA9IFtdO1xyXG4gIHBhZ2luYXRvckFjdGl2ZSA9IHRydWU7XHJcbiAgc2NyZWVuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaWRfY29tcGFuaWE7XHJcblxyXG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcclxuXHJcbiAgcGFnZVNpemUgPSBzY3JlZW4ud2lkdGggPiA1MDAgPyAxMCA6IDU7XHJcbiAgbGVuZ3RoID0gMDtcclxuXHJcbiAgcGFnZSA9IDA7XHJcblxyXG4gIGFib3ZlOiBUb29sdGlwUG9zaXRpb25bXSA9IFsnYWJvdmUnXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0b3JUcmFuc2xhdGU6IE1hdFBhZ2luYXRvckludGwsXHJcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydERhdGFTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5pdGVtc1BlclBhZ2VMYWJlbCA9ICdFbGVtZW50b3MgcG9yIHDDoWdpbmEnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUubmV4dFBhZ2VMYWJlbCA9ICdTaWd1aWVudGUgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5sYXN0UGFnZUxhYmVsID0gJ8OabHRpbWEgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5wcmV2aW91c1BhZ2VMYWJlbCA9ICdQw6FnaW5hIGFudGVyaW9yJztcclxuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmZpcnN0UGFnZUxhYmVsID0gJ1ByaW1lcmEgcMOhZ2luYSc7XHJcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5nZXRSYW5nZUxhYmVsID0gc3BhbmlzaFJhbmdlTGFiZWw7XHJcbiAgfVxyXG5cclxuICBidXR0b25zQ29uZmlnID0gW1xyXG4gICAge1xyXG4gICAgICBhY3Rpb246ICdlZGl0JyxcclxuICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLmVkaXQsXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmVkaXQsXHJcbiAgICAgIGljb246ICdmYS1lZGl0JyxcclxuICAgICAgdG9vbHRpcDogJ0VkaXRhcicsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBhY3Rpb246ICdwcmludCcsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnByaW50ICYmXHJcbiAgICAgICAgdGhpcy5zY3JlZW4sXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLnByaW50ICYmIHRoaXMuc2NyZWVuLFxyXG4gICAgICBpY29uOiAnZmEtcHJpbnQnLFxyXG4gICAgICB0b29sdGlwOiAnSW1wcmltaXInLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYWN0aW9uOiAnYWN0aXZlJyxcclxuICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmUsXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZSxcclxuICAgICAgaWNvbjogJ2ZhLWFkanVzdCcsXHJcbiAgICAgIHRvb2x0aXA6ICdBY3RpdmFyL0Rlc2FjdGl2YXInLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYWN0aW9uOiAnYWRkJyxcclxuICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmFkZCxcclxuICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcclxuICAgICAgaWNvbjogJ2ZhLXBsdXMtY2lyY2xlJyxcclxuICAgICAgdG9vbHRpcDogJ051ZXZvJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGFjdGlvbjogJ2luY29tZScsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5pbmNvbWUsXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsXHJcbiAgICAgIGljb246ICdmYS11c2VyLXBsdXMnLFxyXG4gICAgICB0b29sdGlwOiAnSW5ncmVzbycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBhY3Rpb246ICdleGl0JyxcclxuICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmV4aXQsXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsXHJcbiAgICAgIGljb246ICdmYS11c2VyLXRpbWVzJyxcclxuICAgICAgdG9vbHRpcDogJ1NhbGlkYScsXHJcbiAgICB9LCAgICBcclxuICAgIHtcclxuICAgICAgYWN0aW9uOiAndmlldycsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi52aWV3LFxyXG4gICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi52aWV3LFxyXG4gICAgICBpY29uOiAnZmEtZXllJyxcclxuICAgICAgdG9vbHRpcDogJ1ZlciBkZXRhbGxlJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGFjdGlvbjogJ2Nsb3NlT3JkZXInLFxyXG4gICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvc2VPcmRlcixcclxuICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvc2VPcmRlcixcclxuICAgICAgaWNvbjogJ2ZhLWNoZWNrLWNpcmNsZScsXHJcbiAgICAgIHRvb2x0aXA6ICdDZXJyYXIgb3JkZW4nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYWN0aW9uOiAncGFja09mZicsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5wYWNrT2ZmLFxyXG4gICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5wYWNrT2ZmLFxyXG4gICAgICBpY29uOiAnZmEtY2FydC1hcnJvdy1kb3duJyxcclxuICAgICAgdG9vbHRpcDogJ0Rlc3BhY2hhciByZWN1cnNvcycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBhY3Rpb246ICdhZHZhbmNlJyxcclxuICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLmFkdmFuY2UsXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmFkdmFuY2UsXHJcbiAgICAgIGljb246ICdmYS1hcnJvdy1yaWdodCcsXHJcbiAgICAgIHRvb2x0aXA6IHRoaXMuY29uZmlndXJhdGlvbi5hZHZhbmNlTGFiZWwsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBhY3Rpb246ICdzZW5kRW1haWwnLFxyXG4gICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZW5kRW1haWwsXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLnNlbmRFbWFpbCAmJiB0aGlzLnNjcmVlbixcclxuICAgICAgaWNvbjogJ2ZhLW1haWwtYnVsaycsXHJcbiAgICAgIHRvb2x0aXA6ICdFbnZpYSBjb3JyZW8nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYWN0aW9uOiAnZXhwb3J0VG9FeGNlbCcsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAodGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHggfHxcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4V2l0aFBhZ2VzKSxcclxuICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcclxuICAgICAgaWNvbjogJ2ZhLWRvd25sb2FkJyxcclxuICAgICAgdG9vbHRpcDogJ0V4cG9ydGFyIFRhYmxhJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGFjdGlvbjogJ2V4cG9ydFRvRXhjZWxCeVJvdycsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4QnlSb3csXHJcbiAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhCeVJvdyxcclxuICAgICAgaWNvbjogJ2ZhLWRvd25sb2FkJyxcclxuICAgICAgdG9vbHRpcDogJ0V4cG9ydGFyIFJlZ2lzdHJvJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGFjdGlvbjogJ2RlbGV0ZScsXHJcbiAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVsZXRlLFxyXG4gICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5kZWxldGUsXHJcbiAgICAgIGljb246ICdmYS10cmFzaCcsXHJcbiAgICAgIHRvb2x0aXA6ICdFbGltaW5hcicsXHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICBcclxuICBdO1xyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCkge1xyXG4gICAgICB0aGlzLnNjcmVlbiA9IHRydWU7XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDBcclxuICAgICAgICAgID8gKHRoaXMuc2NyZWVuID0gdHJ1ZSlcclxuICAgICAgICAgIDogKHRoaXMuc2NyZWVuID0gZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDBcclxuICAgICAgICAgID8gKHRoaXMuc2NyZWVuID0gdHJ1ZSlcclxuICAgICAgICAgIDogKHRoaXMuc2NyZWVuID0gZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZWxvYWRUYWJsZSkge1xyXG4gICAgICB0aGlzLnJlbG9hZFRhYmxlLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZXRlY0FsbEV2ZW50KCcnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aXRsZUxvYWRpbmcgPT0gJycgPyAodGhpcy50aXRsZUxvYWRpbmcgPSAnQ2FyZ2FuZG8nKSA6ICcnO1xyXG4gICAgdGhpcy5tZXNzYWdlTG9hZGluZyA9PSAnJ1xyXG4gICAgICA/ICh0aGlzLm1lc3NhZ2VMb2FkaW5nID0gJ09idGVuaWVuZG8gZGF0b3MuLi4nKVxyXG4gICAgICA6ICcnO1xyXG4gICAgdGhpcy51cmwgJiYgIXRoaXMuY29uZmlndXJhdGlvbi5ub3RJbml0aWFsaXplXHJcbiAgICAgID8gdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKHRoaXMudGl0bGVMb2FkaW5nLCB0aGlzLm1lc3NhZ2VMb2FkaW5nKVxyXG4gICAgICA6ICcnO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnVybCAmJiAhdGhpcy5jb25maWd1cmF0aW9uLm5vdEluaXRpYWxpemUpIHtcclxuICAgICAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBzZXJ2aWNlWydkYXRhJ107XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBzZXJ2aWNlWydjb3VudCddO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHNlcnZpY2UpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdG9yQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldERhdGVUYWJsZUJ5VXJsKCkge1xyXG4gICAgdGhpcy52YWxpZGFyUGFyYW1zKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLnBvc3REYXRhQm9keShcclxuICAgICAgdGhpcy51cmwsXHJcbiAgICAgIHRoaXMuZmlsdGVyc1Bvc3QsXHJcbiAgICAgIHRoaXMucGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhclBhcmFtcygpIHtcclxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5mdW5jdGlvbkV0ZXIucmVtb3ZlRHVwbGljYXRlT2JqZWN0cyh0aGlzLnBhcmFtcyk7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMpIHtcclxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKCh4KSA9PiB4LmlkID09ICdwYWdlJykpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdwYWdlJywgdmFsdWU6ICcwJyB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoKHgpID0+IHguaWQgPT0gJ3Blcl9wYWdlJykpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdwZXJfcGFnZScsIHZhbHVlOiB0aGlzLnBhZ2VTaXplIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5wYXJhbXMuZmluZCgoeCkgPT4geC5pZCA9PSAnZmlsdGVyJykpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdmaWx0ZXInLCB2YWx1ZTogJycgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHZhbGlkYXRlUnVsZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY29sdW1uc10gb2YgdGhpcy5jb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleERhdGEsIGVsZW1lbnRdIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICBpZiAoY29sdW1ucy5ydWxlcykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbHVtbnMucnVsZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJ1bGUucnVsZSA9PSBlbnVtUnVsZXNbJz09J10pIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbnMuSURdICYmXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbnMuSURdLnRvU3RyaW5nKCkgPT0gcnVsZS52YWx1ZVJ1bGUudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBydWxlLnZhbHVlQWN0aW9uO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGVsZW1lbnRbY29sdW1ucy5JRF07XHJcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnZmVjaGEnIHx8IGNvbHVtbnMudHlwZSA9PSAnZGF0ZScpXHJcbiAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVJc28oY29sdW1uVmFsdWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2RhdGVXaXRoVGltZScpXHJcbiAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVXaXRoVGltZShcclxuICAgICAgICAgICAgY29sdW1uVmFsdWU/LnRvU3RyaW5nKCkgPz8gY29sdW1uVmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnY3VycmVuY3knKVxyXG4gICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPVxyXG4gICAgICAgICAgICBJbnRsLk51bWJlckZvcm1hdCgnZXMtQ08nKS5mb3JtYXQoY29sdW1uVmFsdWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBjb2x1bW5WYWx1ZSA9PSAxID8gJ1NpJyA6ICdObyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLmNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy51cGRhdGVCdXR0b25Db25maWcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUJ1dHRvbkNvbmZpZygpIHtcclxuICAgIHRoaXMuYnV0dG9uc0NvbmZpZyA9IHRoaXMuYnV0dG9uc0NvbmZpZy5tYXAoKGJ1dHRvbikgPT4ge1xyXG4gICAgICBpZiAoYnV0dG9uLmFjdGlvbiA9PT0gJ2FkdmFuY2UnKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmJ1dHRvbixcclxuICAgICAgICAgIHRvb2x0aXA6IHRoaXMuY29uZmlndXJhdGlvbi5hZHZhbmNlTGFiZWwgPz8gJ0F2YW56YXInLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJ1dHRvbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tPblJvVyhyb3dEYXRhKSB7XHJcbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNoZWNrYm94c1tyb3dEYXRhW3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV07XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLmNsZWFyQ2hlY2tib3hlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uKHJvd0RhdGEsIHsgY2hlY2tlZDogIXN0YXRlIH0sIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlKTtcclxuICAgIHRoaXMuY2xpY2tSb3cuZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHNob3dNZW51KCRldmVudCkge1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uKGFjdGlvbiwgcm93ID0gbnVsbCkge1xyXG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cgPyBbcm93XSA6IHRoaXMuc2VsZWN0ZWRSb3dzO1xyXG5cclxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2FkZCc6XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hZGRQZXIpIHtcclxuICAgICAgICAgIHRoaXMuYWRkLmVtaXQodGhpcy5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpKSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkLmVtaXQocmVzdWx0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmVkaXRQZXIpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KGN1cnJlbnRSb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY29sdW1uczogYW55O1xyXG4gICAgICAgICAgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHJcbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudFJvd1swXSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5JRCA9PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbnNbaW5kZXhdLnZhbHVlID0gY3VycmVudFJvd1swXVtrZXldO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpKSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogY3VycmVudFJvd1swXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgbmV3OiByZXN1bHQsIG9sZDogY3VycmVudFJvd1swXSB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICAgIHRoaXMuZGVsZXRlLmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ByaW50JzpcclxuICAgICAgICB0aGlzLnByaW50LmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2FjdGl2ZSc6XHJcbiAgICAgICAgdGhpcy5hY3RpdmUuZW1pdChjdXJyZW50Um93KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXhwb3J0VG9FeGNlbCc6XHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4cG9ydFRvRXhjZWxCeVJvdyc6XHJcbiAgICAgICAgdGhpcy5leHBvcnRYc2x4QnlSb3cuZW1pdChjdXJyZW50Um93KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgdGhpcy52aWV3LmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Nsb3NlT3JkZXInOlxyXG4gICAgICAgIHRoaXMuY2xvc2VPcmRlci5lbWl0KGN1cnJlbnRSb3cpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwYWNrT2ZmJzpcclxuICAgICAgICB0aGlzLnBhY2tPZmYuZW1pdChjdXJyZW50Um93KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYWR2YW5jZSc6XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlLmVtaXQoY3VycmVudFJvdyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2luY29tZSc6XHJcbiAgICAgICAgdGhpcy5pbmNvbWUuZW1pdCh0aGlzLmxlbmd0aCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4aXQnOlxyXG4gICAgICAgIHRoaXMuZXhpdC5lbWl0KHRoaXMubGVuZ3RoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc2VuZEVtYWlsJzpcclxuICAgICAgICB0aGlzLnNlbmRFbWFpbC5lbWl0KGN1cnJlbnRSb3cpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdWxkU2hvd01lbnUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25zQ29uZmlnLnNvbWUoKGJ0bikgPT4gYnRuLmNvbmRpdGlvbigpKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gW107XHJcbiAgICBpZiAodGhpcy51cmwgJiYgdGhpcy5wYXJhbXMpIHtcclxuICAgICAgcGFyYW1zID0gWy4uLnRoaXMucGFyYW1zXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnhzbHhQYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMgPSBbLi4ucGFyYW1zLCAuLi50aGlzLnhzbHhQYXJhbXNdO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpID0gcGFyYW1zLmZpbmRJbmRleCgoeCkgPT4geC5pZCA9PSAncGVyX3BhZ2UnKTtcclxuICAgICAgaWYgKGkgIT0gLTEpIHBhcmFtc1tpXS52YWx1ZSA9IDEwMDAwMDAwMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhXaXRoUGFnZXMpIHtcclxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlRXhjZWxXaXRoU2hlZXRzPGFueT4oXHJcbiAgICAgICAgdGhpcy50aXRsZSxcclxuICAgICAgICB0aGlzLmhlYWRlckZpbGVYbHNtLFxyXG4gICAgICAgIHRoaXMudGl0bGUsXHJcbiAgICAgICAgdGhpcy51cmwgPyBudWxsIDogdGhpcy5kYXRhLFxyXG4gICAgICAgIHRoaXMudXJsLFxyXG4gICAgICAgIHBhcmFtcyxcclxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0LFxyXG4gICAgICAgIHRoaXMueHNseFRpdGxlRmllbGRzLFxyXG4gICAgICAgIHRoaXMueHNseFNoZWV0TmFtZUZpZWxkcyxcclxuICAgICAgICB0aGlzLnhzbHhCb2R5RmllbGRzXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUb1hsc3g8YW55PihcclxuICAgICAgICB0aGlzLnRpdGxlLFxyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsZVhsc20sXHJcbiAgICAgICAgdGhpcy50aXRsZSxcclxuICAgICAgICB0aGlzLnVybCA/IG51bGwgOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgdGhpcy51cmwsXHJcbiAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgIHRoaXMuZmlsdGVyc1Bvc3RcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbihyb3csICRldmVudCwgZW1pdEV2ZW50ID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSAkZXZlbnQuY2hlY2tlZDtcclxuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkUm93cy5pbmRleE9mKHJvdyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlICYmIGVtaXRFdmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT0gdGhpcy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWNrZWQoJGV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGV0ZWNBbGxFdmVudCgkZXZlbnQpIHtcclxuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVN0YXRlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0QWxsKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hlY2tib3hzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94c1trZXldID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xyXG4gICAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MucHVzaChlbGVtZW50KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbGVhckNoZWNrYm94ZXMoKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKTtcclxuICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcclxuICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSk7XHJcbiAgICB0aGlzLmxlbmd0aCA9IHNlcnZpY2VbJ2NvdW50J107XHJcbiAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQ2hlY2tib3hlcygpIHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuY2hlY2tib3hzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUZpbHRlcnMoKSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMpXHJcbiAgICAgIHRoaXMucGFyYW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCA9PSAnZmlsdGVyJykge1xyXG4gICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYXBwbHlGaWx0ZXJzKCRldmVudD86IGFueSkge1xyXG4gICAgaWYgKCRldmVudCkgdGhpcy5maWx0ZXJzUG9zdCA9ICRldmVudDtcclxuICAgIGlmICh0aGlzLnVybCkge1xyXG4gICAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKCk7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHJlc1snZGF0YSddO1xyXG4gICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcclxuICAgICAgdGhpcy5sZW5ndGggPSByZXNbJ2NvdW50J107XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQocmVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcigoZGF0YSkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGFba2V5XVxyXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy5maWx0ZXJzLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZSgkZXZlbnQpIHtcclxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmlkID09ICdwZXJfcGFnZScpIHtcclxuICAgICAgICBlbGVtZW50LnZhbHVlID0gJGV2ZW50LnBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50LmlkID09ICdwYWdlJykge1xyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZUluZGV4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgfVxyXG59XHJcblxyXG5lbnVtIGVudW1SdWxlcyB7XHJcbiAgJz4nLFxyXG4gICc8JyxcclxuICAnPT0nLFxyXG4gICchPScsXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItdGFibGFcIj5cclxuICA8YXBwLWZpbHRlcnMgW2hlYWRlckZpbHRlcnNdPVwiaGVhZGVyRmlsdGVyc1wiIChhcHBseUZpbHRlcnMpPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuICA8L2FwcC1maWx0ZXJzPlxyXG5cclxuICA8ZGl2IHN0eWxlPSdkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47ICBhbGlnbi1pdGVtczogY2VudGVyOyc+XHJcbiAgICA8ZGl2IHN0eWxlPSdmbGV4OjE7IGZvbnQtc2l6ZTogMXJlbTsnPlxyXG4gICAgICA8c3Ryb25nPjxwIHN0eWxlPSdtYXJnaW46MCcgKm5nSWY9J3NlbGVjdGVkUm93cy5sZW5ndGg+MCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoPDIgJiYgY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlJz4ge3tzZWxlY3RlZFJvd3MubGVuZ3RofX0gU2VsZWNjaW9uYWRvIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjEnPiB7e3NlbGVjdGVkUm93cy5sZW5ndGh9fSBTZWxlY2Npb25hZG9zIDwvcD48L3N0cm9uZz5cclxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPDEgJiYgIWNvbmZpZ3VyYXRpb24uaGlkZVRpdGxlJz4ge3t0aXRsZX19IDwvcD48L3N0cm9uZz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhY29uZmlndXJhdGlvbi5oaWRlRmlsdGVyXCIgc3R5bGU9J2ZsZXg6MzsgcGFkZGluZy1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogNXB4Oyc+XHJcbiAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J2ZpbHRlcic+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09J2ZpbHRlcnMnIChrZXl1cCk9J2NoYW5nZUZpbHRlcnMoKScgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRmlsdHJhclwiPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNUYWJsZVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiA8dGFibGUgY2xhc3M9XCJ0YWJsZV9FdGVyIHRhYmxlLWhvdmVyXCI+XHJcbiAgICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxyXG4gICAgICAgPHRyID5cclxuICAgICAgICA8dGggKm5nSWY9J2NvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZScgc3R5bGU9J2p1c3RpZnktY29udGVudDogY2VudGVyOyc+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPSdwcmltYXJ5JyAoY2hhbmdlKT0nc2VsZXRlY0FsbEV2ZW50KCRldmVudCknIFsobmdNb2RlbCldPSdzZWxlY3RBbGwnIFtpbmRldGVybWluYXRlXT0naW5kZXRlcm1pbmF0ZVN0YXRlJz4gPC9tYXQtY2hlY2tib3g+ICA8L3RoPlxyXG4gICAgICAgPHRoXHJcbiAgICAgICBbY2xhc3NdPVwiY29sdW1uLnN0eWxlPy5tb3ZpbFwiXHJcbiAgICAgICAqbmdGb3I9J2xldCBjb2x1bW4gb2YgY29sdW1ucycgc2NvcGU9XCJjb2xcIlxyXG4gICAgICAgW25nU3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcclxuICAgICAgID57e2NvbHVtbi5sYWJlbH19PC90aD5cclxuICAgICAgIDx0aCAqbmdJZj1cInNob3VsZFNob3dNZW51KClcIj48L3RoPlxyXG4gICAgICAgPC90cj5cclxuICAgICA8L3RoZWFkPlxyXG4gICAgIDx0Ym9keSBjbGFzcz0nbWF0LWVsZXZhdGlvbi16Myc+XHJcblxyXG4gICAgICAgPHRyIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiICpuZ0Zvcj0nbGV0IHJvdyBvZiBkYXRhJyAoY2xpY2spPSdjbGlja09uUm9XKHJvdyknIFtjbGFzc109XCJjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dPydzZWxlY3RlZC1yb3cnOicnXCI+XHJcbiAgICAgICAgPHRoICpuZ0lmPSdjb25maWd1cmF0aW9uLnNlbGVjdGFibGUnIHN0eWxlPSdqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPiA8bWF0LWNoZWNrYm94IGNvbG9yPSdwcmltYXJ5JyBbKG5nTW9kZWwpXT0nY2hlY2tib3hzW3Jvd1tjb25maWd1cmF0aW9uLnByaW1hcnlLZXldXScgKGNsaWNrKT0nY2xpY2tlZCgkZXZlbnQpJyAoY2hhbmdlKT0nc2VsZWN0aW9uKHJvdywgJGV2ZW50KSc+IDwvbWF0LWNoZWNrYm94PiAgPC90aD5cclxuICAgICAgICA8dGggW2NsYXNzXT0nY29sdW1uLnN0eWxlPy5tb3ZpbCcgW25nU3R5bGVdPSdjb2x1bW4uc3R5bGUnIHNjb3BlPVwicm93XCIgKm5nRm9yPSdsZXQgY29sdW1uIG9mIGNvbHVtbnMnPnt7IHJvd1tjb2x1bW4uSURdIH19PC90aD5cclxuXHJcbiAgICAgICAgPHRoICpuZ0lmPVwic2hvdWxkU2hvd01lbnUoKVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG92ZXJmbG93OiB2aXNpYmxlO1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd01lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXHJcbiAgICAgICAgICBtYXRSaXBwbGVcclxuICAgICAgICAgIGNsYXNzPVwibWVudV9tb3JlX3ZlcnRcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRXhhbXBsZSBkZWxldGUgaWNvblwiXHJcbiAgICAgICAgICA+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuXHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25zQ29uZmlnXCIgPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJidG4uY29uZGl0aW9uKClcIiAoY2xpY2spPVwiYWN0aW9uKGJ0bi5hY3Rpb24sIHJvdylcIiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiID5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEge3tidG4uaWNvbn19IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZToxMjAlOyBtYXJnaW4tcmlnaHQ6IDEwcHhcIj48L2k+XHJcbiAgICAgICAgICAgICAgICB7e2J0bi50b29sdGlwfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgIDwvdHI+XHJcblxyXG5cclxuICAgICA8L3Rib2R5PlxyXG5cclxuICAgPC90YWJsZT5cclxuXHJcbiAgIDxkaXYgKm5nSWY9J2xlbmd0aCA9PSAwICYmIGRhdGEubGVuZ3RoID09IDAnIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+IDxzdHJvbmc+Tm8gc2UgZW5jb250csOzIGluZm9ybWFjacOzbjwvc3Ryb25nPjwvZGl2PlxyXG5cclxuICAgPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJwYWdpbmF0b3JBY3RpdmVcIlxyXG4gICBbbGVuZ3RoXT1cImxlbmd0aFwiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcclxuICAgKHBhZ2UpPVwiY2hhbmdlUGFnZSgkZXZlbnQpXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RhYmxlIGxldC1mb250U2l6ZT1cImZvbnRTaXplXCIgbGV0LW1hcmdpblJpZ2h0PVwibWFyZ2luUmlnaHRcIiBzdHlsZT0nZmxleDowLjU7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsnPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25zQ29uZmlnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYnRuLmNvbmRpdGlvblNob3dIZWFkZXIoKVwiIChjbGljayk9XCJhY3Rpb24oYnRuLmFjdGlvbilcIiBtYXRUb29sdGlwPVwie3tidG4udG9vbHRpcH19XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSB7e2J0bi5pY29ufX0gYnRuLWFjY2lvblwiIFtuZ1N0eWxlXT1cInsnZm9udC1zaXplJzogZm9udFNpemUgPyBmb250U2l6ZSA6ICcxNzAlJywgJ21hcmdpbi1yaWdodCc6IG1hcmdpblJpZ2h0ID8gbWFyZ2luUmlnaHQgOiAnMTVweCd9XCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
|
|
1
|
+
import { ScreenSizeUtil } from './../../../services/screen-size-util';
|
|
2
|
+
import { Component, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
|
|
3
|
+
import { TableModalComponent } from '../../../brainloper-ui/components/data-table/table-modal/table-modal.component';
|
|
4
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
5
|
+
import { modulesByRol } from '@edgarzon93/brainloper-shared';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/material/dialog";
|
|
8
|
+
import * as i2 from "../../../services/http.service";
|
|
9
|
+
import * as i3 from "../../../services/message.service";
|
|
10
|
+
import * as i4 from "../../../services/functions.service";
|
|
11
|
+
import * as i5 from "@angular/material/paginator";
|
|
12
|
+
import * as i6 from "./../../../services/export-data.service";
|
|
13
|
+
import * as i7 from "@angular/common";
|
|
14
|
+
import * as i8 from "@angular/material/core";
|
|
15
|
+
import * as i9 from "@angular/material/icon";
|
|
16
|
+
import * as i10 from "@angular/material/menu";
|
|
17
|
+
import * as i11 from "@angular/material/form-field";
|
|
18
|
+
import * as i12 from "@angular/material/input";
|
|
19
|
+
import * as i13 from "@angular/material/checkbox";
|
|
20
|
+
import * as i14 from "@angular/material/tooltip";
|
|
21
|
+
import * as i15 from "@angular/forms";
|
|
22
|
+
import * as i16 from "../filters/filters.component";
|
|
23
|
+
const spanishRangeLabel = (page, pageSize, length) => {
|
|
24
|
+
if (length == 0 || pageSize == 0) {
|
|
25
|
+
return `0 de ${length}`;
|
|
26
|
+
}
|
|
27
|
+
length = Math.max(length, 0);
|
|
28
|
+
const startIndex = page * pageSize;
|
|
29
|
+
const endIndex = startIndex < length
|
|
30
|
+
? Math.min(startIndex + pageSize, length)
|
|
31
|
+
: startIndex + pageSize;
|
|
32
|
+
return `${startIndex + 1} - ${endIndex} de ${length}`;
|
|
33
|
+
};
|
|
34
|
+
const rolesAndPermissions = modulesByRol;
|
|
35
|
+
export class DataTableComponent {
|
|
36
|
+
constructor(dialog, http, message, functionEter, paginatorTranslate, exportService) {
|
|
37
|
+
this.dialog = dialog;
|
|
38
|
+
this.http = http;
|
|
39
|
+
this.message = message;
|
|
40
|
+
this.functionEter = functionEter;
|
|
41
|
+
this.paginatorTranslate = paginatorTranslate;
|
|
42
|
+
this.exportService = exportService;
|
|
43
|
+
this.data = [];
|
|
44
|
+
this.configuration = {
|
|
45
|
+
add: false,
|
|
46
|
+
edit: false,
|
|
47
|
+
delete: false,
|
|
48
|
+
active: false,
|
|
49
|
+
selectable: false,
|
|
50
|
+
print: false,
|
|
51
|
+
addPer: false,
|
|
52
|
+
editPer: false,
|
|
53
|
+
primaryKey: 'id',
|
|
54
|
+
exportXslx: false,
|
|
55
|
+
hideTitle: true,
|
|
56
|
+
hideFilter: true,
|
|
57
|
+
notInitialize: false,
|
|
58
|
+
exportXslxByRow: false,
|
|
59
|
+
exportXslxWithPages: false,
|
|
60
|
+
view: false,
|
|
61
|
+
closeOrder: false,
|
|
62
|
+
packOff: false,
|
|
63
|
+
advance: true,
|
|
64
|
+
advanceLabel: null,
|
|
65
|
+
income: false,
|
|
66
|
+
exit: false,
|
|
67
|
+
sendEmail: false,
|
|
68
|
+
addComment: false,
|
|
69
|
+
};
|
|
70
|
+
this.titleLoading = '';
|
|
71
|
+
this.messageLoading = '';
|
|
72
|
+
this.headerFileXlsm = [];
|
|
73
|
+
this.headerFilters = [];
|
|
74
|
+
this.xslxParams = null;
|
|
75
|
+
this.roleId = 0;
|
|
76
|
+
this.moduleId = 0;
|
|
77
|
+
this.subModuleId = 0;
|
|
78
|
+
this.hasAccessToAll = true;
|
|
79
|
+
this.rolesAndPermissionUser = {};
|
|
80
|
+
this.clickRow = new EventEmitter();
|
|
81
|
+
this.add = new EventEmitter();
|
|
82
|
+
this.edit = new EventEmitter();
|
|
83
|
+
this.delete = new EventEmitter();
|
|
84
|
+
this.print = new EventEmitter();
|
|
85
|
+
this.exportXslxByRow = new EventEmitter();
|
|
86
|
+
this.active = new EventEmitter();
|
|
87
|
+
this.selected = new EventEmitter();
|
|
88
|
+
this.view = new EventEmitter();
|
|
89
|
+
this.closeOrder = new EventEmitter();
|
|
90
|
+
this.packOff = new EventEmitter();
|
|
91
|
+
this.advance = new EventEmitter();
|
|
92
|
+
this.income = new EventEmitter();
|
|
93
|
+
this.exit = new EventEmitter();
|
|
94
|
+
this.internalData = new EventEmitter();
|
|
95
|
+
this.sendEmail = new EventEmitter();
|
|
96
|
+
this.addComment = new EventEmitter();
|
|
97
|
+
this.fileIconClick = new EventEmitter();
|
|
98
|
+
this.movil = ScreenSizeUtil.isMobile();
|
|
99
|
+
this.filtersPost = [];
|
|
100
|
+
this.selectedRows = []; /** almacena las filas seleccionadas */
|
|
101
|
+
this.checkboxs = {};
|
|
102
|
+
this.selectAll = false;
|
|
103
|
+
this.indeterminateState = false;
|
|
104
|
+
this.originalData = [];
|
|
105
|
+
this.paginatorActive = true;
|
|
106
|
+
this.screen = true;
|
|
107
|
+
this.pageSizeOptions = [5, 10, 25, 50, 100];
|
|
108
|
+
this.pageSize = screen.width > 500 ? 10 : 5;
|
|
109
|
+
this.length = 0;
|
|
110
|
+
this.page = 0;
|
|
111
|
+
this.above = ['above'];
|
|
112
|
+
this.buttonsConfig = [];
|
|
113
|
+
this.paginatorTranslate.itemsPerPageLabel = 'Elementos por página';
|
|
114
|
+
this.paginatorTranslate.nextPageLabel = 'Siguiente página';
|
|
115
|
+
this.paginatorTranslate.lastPageLabel = 'Última página';
|
|
116
|
+
this.paginatorTranslate.previousPageLabel = 'Página anterior';
|
|
117
|
+
this.paginatorTranslate.firstPageLabel = 'Primera página';
|
|
118
|
+
this.paginatorTranslate.getRangeLabel = spanishRangeLabel;
|
|
119
|
+
}
|
|
120
|
+
async ngOnInit() {
|
|
121
|
+
this.validateRolAndPermission();
|
|
122
|
+
if (window.screen.width > 1000) {
|
|
123
|
+
this.screen = true;
|
|
124
|
+
window.addEventListener('resize', () => {
|
|
125
|
+
window.screen.width > 1000
|
|
126
|
+
? (this.screen = true)
|
|
127
|
+
: (this.screen = false);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this.screen = false;
|
|
132
|
+
window.addEventListener('resize', () => {
|
|
133
|
+
window.screen.width > 1000
|
|
134
|
+
? (this.screen = true)
|
|
135
|
+
: (this.screen = false);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (this.reloadTable) {
|
|
139
|
+
this.reloadTable.subscribe((res) => {
|
|
140
|
+
this.originalData = [];
|
|
141
|
+
this.selectAll = false;
|
|
142
|
+
this.seletecAllEvent('');
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
this.titleLoading == '' ? (this.titleLoading = 'Cargando') : '';
|
|
146
|
+
this.messageLoading == ''
|
|
147
|
+
? (this.messageLoading = 'Obteniendo datos...')
|
|
148
|
+
: '';
|
|
149
|
+
this.url && !this.configuration.notInitialize
|
|
150
|
+
? this.message.openLoading(this.titleLoading, this.messageLoading)
|
|
151
|
+
: '';
|
|
152
|
+
try {
|
|
153
|
+
if (this.url && !this.configuration.notInitialize) {
|
|
154
|
+
let service = await this.getDateTableByUrl();
|
|
155
|
+
this.data = service['data'];
|
|
156
|
+
this.length = service['count'];
|
|
157
|
+
this.data.forEach((row) => {
|
|
158
|
+
this.checkboxs[row[this.configuration.primaryKey]] = false;
|
|
159
|
+
});
|
|
160
|
+
this.internalData.emit(service);
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
this.message.closeLoading();
|
|
163
|
+
}, 1000);
|
|
164
|
+
this.validateRules();
|
|
165
|
+
}
|
|
166
|
+
else if (!this.url) {
|
|
167
|
+
this.paginatorActive = false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
console.log(error);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
validateRolAndPermission() {
|
|
175
|
+
if (this.roleId != 0) {
|
|
176
|
+
let rolePermissions = rolesAndPermissions?.find(x => x.id == this.roleId);
|
|
177
|
+
this.hasAccessToAll = rolePermissions?.hasAccessToAll ?? rolePermissions.modules?.find(x => x.id == this.moduleId)?.hasAccessToAll ?? false;
|
|
178
|
+
}
|
|
179
|
+
;
|
|
180
|
+
this.rolesAndPermissionUser = rolesAndPermissions?.find(x => x.id == this.roleId)?.modules?.find(x => x.id == this.moduleId)?.subModules?.find(x => x.id == this.subModuleId)?.permissions ?? {};
|
|
181
|
+
if (!this.hasAccessToAll && !this.rolesAndPermissionUser.readAll && this.rolesAndPermissionUser.readOwn == true) {
|
|
182
|
+
this.params = [...this.params, { id: 'readOwn', value: true }];
|
|
183
|
+
}
|
|
184
|
+
this.configureButtons();
|
|
185
|
+
}
|
|
186
|
+
configureButtons() {
|
|
187
|
+
this.buttonsConfig = [
|
|
188
|
+
{
|
|
189
|
+
action: 'edit',
|
|
190
|
+
conditionShowHeader: () => this.selectedRows.length === 1 &&
|
|
191
|
+
this.configuration.edit &&
|
|
192
|
+
this.hasPermission('update'),
|
|
193
|
+
condition: () => this.configuration.edit && this.hasPermission('update'),
|
|
194
|
+
icon: 'fa-edit',
|
|
195
|
+
tooltip: 'Editar',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
action: 'print',
|
|
199
|
+
conditionShowHeader: () => this.selectedRows.length === 1 &&
|
|
200
|
+
this.configuration.print &&
|
|
201
|
+
this.screen &&
|
|
202
|
+
this.hasPermission('print'),
|
|
203
|
+
condition: () => this.configuration.print && this.screen && this.hasPermission('print'),
|
|
204
|
+
icon: 'fa-print',
|
|
205
|
+
tooltip: 'Imprimir',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
action: 'active',
|
|
209
|
+
conditionShowHeader: () => this.selectedRows.length > 0 && this.configuration.active && this.hasPermission('activateAndInactivate'),
|
|
210
|
+
condition: () => this.configuration.active && this.hasPermission('activateAndInactivate'),
|
|
211
|
+
icon: 'fa-adjust',
|
|
212
|
+
tooltip: 'Activar/Desactivar',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
action: 'add',
|
|
216
|
+
conditionShowHeader: () => this.selectedRows.length === 0 && this.configuration.add && this.hasPermission('write'),
|
|
217
|
+
condition: () => false,
|
|
218
|
+
icon: 'fa-plus-circle',
|
|
219
|
+
tooltip: 'Nuevo',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
action: 'income',
|
|
223
|
+
conditionShowHeader: () => this.selectedRows.length === 0 && this.configuration.income && this.hasPermission('write'),
|
|
224
|
+
condition: () => false,
|
|
225
|
+
icon: 'fa-user-plus',
|
|
226
|
+
tooltip: 'Ingreso',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
action: 'exit',
|
|
230
|
+
conditionShowHeader: () => this.selectedRows.length === 0 && this.configuration.exit && this.hasPermission('write'),
|
|
231
|
+
condition: () => false,
|
|
232
|
+
icon: 'fa-user-times',
|
|
233
|
+
tooltip: 'Salida',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
action: 'view',
|
|
237
|
+
conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.view && this.hasPermission('readDetail'),
|
|
238
|
+
condition: () => this.configuration.view && this.hasPermission('readDetail'),
|
|
239
|
+
icon: 'fa-eye',
|
|
240
|
+
tooltip: 'Ver detalle',
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
action: 'closeOrder',
|
|
244
|
+
conditionShowHeader: () => (this.selectedRows.length === 1 && this.configuration.closeOrder) && this.hasPermission('closeOT'),
|
|
245
|
+
condition: () => this.configuration.closeOrder && this.hasPermission('closeOT'),
|
|
246
|
+
icon: 'fa-check-circle',
|
|
247
|
+
tooltip: 'Cerrar orden',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
action: 'packOff',
|
|
251
|
+
conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.packOff && this.hasPermission('allocateResources'),
|
|
252
|
+
condition: () => this.configuration.packOff && this.hasPermission('allocateResources'),
|
|
253
|
+
icon: 'fa-cart-arrow-down',
|
|
254
|
+
tooltip: 'Despachar recursos',
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
action: 'advance',
|
|
258
|
+
conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.advance && this.hasPermission('advance'),
|
|
259
|
+
condition: () => this.configuration.advance && this.hasPermission('advance'),
|
|
260
|
+
icon: 'fa-arrow-right',
|
|
261
|
+
tooltip: this.configuration.advanceLabel,
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
action: 'sendEmail',
|
|
265
|
+
conditionShowHeader: () => this.selectedRows.length === 1 &&
|
|
266
|
+
this.configuration.sendEmail &&
|
|
267
|
+
this.hasPermission('sendEmail'),
|
|
268
|
+
condition: () => this.configuration.sendEmail && this.hasPermission('sendEmail'),
|
|
269
|
+
icon: 'fa-mail-bulk',
|
|
270
|
+
tooltip: 'Envia correo',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
action: 'exportToExcel',
|
|
274
|
+
conditionShowHeader: () => this.selectedRows.length === 0 &&
|
|
275
|
+
this.data.length > 0 &&
|
|
276
|
+
(this.configuration.exportXslx || this.configuration.exportXslxWithPages) &&
|
|
277
|
+
this.hasPermission('export'),
|
|
278
|
+
condition: () => false,
|
|
279
|
+
icon: 'fa-download',
|
|
280
|
+
tooltip: 'Exportar Tabla',
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
action: 'exportToExcelByRow',
|
|
284
|
+
conditionShowHeader: () => this.selectedRows.length === 1 && this.configuration.exportXslxByRow && this.hasPermission('export'),
|
|
285
|
+
condition: () => this.configuration.exportXslxByRow && this.hasPermission('export'),
|
|
286
|
+
icon: 'fa-download',
|
|
287
|
+
tooltip: 'Exportar Registro',
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
action: 'addComment',
|
|
291
|
+
conditionShowHeader: () => this.selectedRows.length === 1 &&
|
|
292
|
+
this.configuration.addComment &&
|
|
293
|
+
this.hasPermission('comment'),
|
|
294
|
+
condition: () => this.configuration.addComment && this.hasPermission('comment'),
|
|
295
|
+
icon: 'fa-comments',
|
|
296
|
+
tooltip: 'Agregar Comentario',
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
action: 'delete',
|
|
300
|
+
conditionShowHeader: () => this.selectedRows.length > 0 && this.configuration.delete && this.hasPermission('delete'),
|
|
301
|
+
condition: () => this.configuration.delete && this.hasPermission('delete'),
|
|
302
|
+
icon: 'fa-trash',
|
|
303
|
+
tooltip: 'Eliminar',
|
|
304
|
+
},
|
|
305
|
+
];
|
|
306
|
+
}
|
|
307
|
+
hasPermission(permission) {
|
|
308
|
+
if (this.hasAccessToAll)
|
|
309
|
+
return true;
|
|
310
|
+
return this.rolesAndPermissionUser?.[permission] ?? false;
|
|
311
|
+
}
|
|
312
|
+
async getDateTableByUrl() {
|
|
313
|
+
this.validarParams();
|
|
314
|
+
return await this.http.postDataBody(this.url, this.filtersPost, this.params);
|
|
315
|
+
}
|
|
316
|
+
validarParams() {
|
|
317
|
+
this.params = this.functionEter.removeDuplicateObjects(this.params);
|
|
318
|
+
if (this.params) {
|
|
319
|
+
if (!this.params.find((x) => x.id == 'page')) {
|
|
320
|
+
this.params.push({ id: 'page', value: '0' });
|
|
321
|
+
}
|
|
322
|
+
if (!this.params.find((x) => x.id == 'per_page')) {
|
|
323
|
+
this.params.push({ id: 'per_page', value: this.pageSize });
|
|
324
|
+
}
|
|
325
|
+
if (!this.params.find((x) => x.id == 'filter')) {
|
|
326
|
+
this.params.push({ id: 'filter', value: '' });
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async validateRules() {
|
|
331
|
+
for (const [index, columns] of this.columns.entries()) {
|
|
332
|
+
for (const [indexData, element] of this.data.entries()) {
|
|
333
|
+
if (columns.rules) {
|
|
334
|
+
for (const rule of columns.rules) {
|
|
335
|
+
if (rule.rule == enumRules['==']) {
|
|
336
|
+
if (element[columns.ID] &&
|
|
337
|
+
element[columns.ID].toString() == rule.valueRule.toString()) {
|
|
338
|
+
this.data[indexData][columns.ID] = rule.valueAction;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
const columnValue = element[columns.ID];
|
|
344
|
+
if (columns.type == 'fecha' || columns.type == 'date')
|
|
345
|
+
this.data[indexData][columns.ID] =
|
|
346
|
+
this.functionEter.dateIso(columnValue);
|
|
347
|
+
if (columns.type == 'dateWithTime')
|
|
348
|
+
this.data[indexData][columns.ID] = this.functionEter.dateWithTime(columnValue?.toString() ?? columnValue);
|
|
349
|
+
if (columns.type == 'currency')
|
|
350
|
+
this.data[indexData][columns.ID] =
|
|
351
|
+
Intl.NumberFormat('es-CO').format(columnValue);
|
|
352
|
+
if (columns.type == 'boolean')
|
|
353
|
+
this.data[indexData][columns.ID] = columnValue == 1 ? 'Si' : 'No';
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
ngOnChanges(changes) {
|
|
358
|
+
if (changes.data) {
|
|
359
|
+
if (this.data) {
|
|
360
|
+
this.data.forEach((row) => {
|
|
361
|
+
this.checkboxs[row[this.configuration.primaryKey]] = false;
|
|
362
|
+
});
|
|
363
|
+
if (this.originalData.length == 0) {
|
|
364
|
+
if (this.data.length != 0) {
|
|
365
|
+
this.data.forEach((element) => {
|
|
366
|
+
this.originalData.push(element);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
this.validateRules();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
evaluateRules(value, rules) {
|
|
375
|
+
if (!rules) {
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
let active = false;
|
|
379
|
+
const allowedExtensions = [
|
|
380
|
+
'.png', '.jpeg', '.jpg', '.gif', '.bmp', '.webp', '.svg',
|
|
381
|
+
'.pdf', '.doc', '.docx', '.xls', '.xlsx', '.document'
|
|
382
|
+
];
|
|
383
|
+
rules.forEach(rule => {
|
|
384
|
+
if (rule.action === enumActions.SHOW_FILE_ICON && value && value.includes('/docs/')) {
|
|
385
|
+
const lowerValue = value.toLowerCase();
|
|
386
|
+
for (const ext of allowedExtensions) {
|
|
387
|
+
if (lowerValue.includes(ext)) {
|
|
388
|
+
active = true;
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
return active;
|
|
395
|
+
}
|
|
396
|
+
onFileIconClick(event, value) {
|
|
397
|
+
event.stopPropagation();
|
|
398
|
+
this.fileIconClick.emit(value);
|
|
399
|
+
}
|
|
400
|
+
clickOnRoW(rowData) {
|
|
401
|
+
let state = this.checkboxs[rowData[this.configuration.primaryKey]];
|
|
402
|
+
if (!this.configuration.selectable) {
|
|
403
|
+
this.clearCheckboxes();
|
|
404
|
+
}
|
|
405
|
+
this.selection(rowData, { checked: !state }, this.configuration.selectable);
|
|
406
|
+
this.clickRow.emit(rowData);
|
|
407
|
+
}
|
|
408
|
+
showMenu($event) {
|
|
409
|
+
$event.stopPropagation();
|
|
410
|
+
}
|
|
411
|
+
action(action, row = null) {
|
|
412
|
+
var currentRow = row ? [row] : this.selectedRows;
|
|
413
|
+
switch (action) {
|
|
414
|
+
case 'add':
|
|
415
|
+
if (this.configuration.addPer) {
|
|
416
|
+
this.add.emit(this.length);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
this.dialog
|
|
420
|
+
.open(TableModalComponent, {
|
|
421
|
+
data: {
|
|
422
|
+
action,
|
|
423
|
+
columns: JSON.parse(JSON.stringify(this.columns)),
|
|
424
|
+
},
|
|
425
|
+
width: '60vh',
|
|
426
|
+
})
|
|
427
|
+
.afterClosed()
|
|
428
|
+
.subscribe((result) => {
|
|
429
|
+
if (result) {
|
|
430
|
+
this.add.emit(result);
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
break;
|
|
435
|
+
case 'edit':
|
|
436
|
+
if (this.configuration.editPer) {
|
|
437
|
+
this.edit.emit(currentRow);
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
let columns;
|
|
441
|
+
columns = this.columns;
|
|
442
|
+
columns.forEach((column, index) => {
|
|
443
|
+
Object.keys(currentRow[0]).forEach((key) => {
|
|
444
|
+
if (column.ID == key) {
|
|
445
|
+
columns[index].value = currentRow[0][key];
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
this.dialog
|
|
450
|
+
.open(TableModalComponent, {
|
|
451
|
+
data: {
|
|
452
|
+
action,
|
|
453
|
+
columns: JSON.parse(JSON.stringify(this.columns)),
|
|
454
|
+
values: currentRow[0],
|
|
455
|
+
},
|
|
456
|
+
width: '60vh',
|
|
457
|
+
})
|
|
458
|
+
.afterClosed()
|
|
459
|
+
.subscribe((result) => {
|
|
460
|
+
if (result) {
|
|
461
|
+
this.edit.emit({ new: result, old: currentRow[0] });
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
break;
|
|
466
|
+
case 'delete':
|
|
467
|
+
this.delete.emit(currentRow);
|
|
468
|
+
break;
|
|
469
|
+
case 'print':
|
|
470
|
+
this.print.emit(currentRow);
|
|
471
|
+
break;
|
|
472
|
+
case 'active':
|
|
473
|
+
this.active.emit(currentRow);
|
|
474
|
+
break;
|
|
475
|
+
case 'exportToExcel':
|
|
476
|
+
this.exportToExcel();
|
|
477
|
+
break;
|
|
478
|
+
case 'exportToExcelByRow':
|
|
479
|
+
this.exportXslxByRow.emit(currentRow);
|
|
480
|
+
break;
|
|
481
|
+
case 'view':
|
|
482
|
+
this.view.emit(currentRow);
|
|
483
|
+
break;
|
|
484
|
+
case 'closeOrder':
|
|
485
|
+
this.closeOrder.emit(currentRow);
|
|
486
|
+
break;
|
|
487
|
+
case 'packOff':
|
|
488
|
+
this.packOff.emit(currentRow);
|
|
489
|
+
break;
|
|
490
|
+
case 'advance':
|
|
491
|
+
this.advance.emit(currentRow);
|
|
492
|
+
break;
|
|
493
|
+
case 'income':
|
|
494
|
+
this.income.emit(this.length);
|
|
495
|
+
break;
|
|
496
|
+
case 'exit':
|
|
497
|
+
this.exit.emit(this.length);
|
|
498
|
+
break;
|
|
499
|
+
case 'sendEmail':
|
|
500
|
+
this.sendEmail.emit(currentRow);
|
|
501
|
+
break;
|
|
502
|
+
case 'addComment':
|
|
503
|
+
this.addComment.emit(currentRow);
|
|
504
|
+
break;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
shouldShowMenu() {
|
|
508
|
+
return this.buttonsConfig.some((btn) => btn.condition());
|
|
509
|
+
}
|
|
510
|
+
exportToExcel() {
|
|
511
|
+
let params = [];
|
|
512
|
+
if (this.url && this.params) {
|
|
513
|
+
params = [...this.params];
|
|
514
|
+
if (this.xslxParams) {
|
|
515
|
+
params = [...params, ...this.xslxParams];
|
|
516
|
+
}
|
|
517
|
+
let i = params.findIndex((x) => x.id == 'per_page');
|
|
518
|
+
if (i != -1)
|
|
519
|
+
params[i].value = 100000000;
|
|
520
|
+
}
|
|
521
|
+
if (this.configuration.exportXslxWithPages) {
|
|
522
|
+
this.exportService.generateExcelWithSheets(this.title, this.headerFileXlsm, this.title, this.url ? null : this.data, this.url, params, this.filtersPost, this.xslxTitleFields, this.xslxSheetNameFields, this.xslxBodyFields);
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
this.exportService.generateToXlsx(this.title, this.headerFileXlsm, this.title, this.url ? null : this.data, this.url, params, this.filtersPost);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
selection(row, $event, emitEvent = true) {
|
|
529
|
+
this.checkboxs[row[this.configuration.primaryKey]] = $event.checked;
|
|
530
|
+
if ($event.checked) {
|
|
531
|
+
this.selectedRows.push(row);
|
|
532
|
+
}
|
|
533
|
+
else {
|
|
534
|
+
let index = this.selectedRows.indexOf(row);
|
|
535
|
+
this.selectedRows.splice(index, 1);
|
|
536
|
+
}
|
|
537
|
+
if (this.configuration.selectable && emitEvent) {
|
|
538
|
+
this.selected.emit(this.selectedRows);
|
|
539
|
+
}
|
|
540
|
+
if (this.selectedRows.length == this.data.length) {
|
|
541
|
+
this.selectAll = true;
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
this.selectAll = false;
|
|
545
|
+
}
|
|
546
|
+
if (this.selectedRows.length > 0 &&
|
|
547
|
+
this.selectedRows.length < this.data.length) {
|
|
548
|
+
this.indeterminateState = true;
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
this.indeterminateState = false;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
clicked($event) {
|
|
555
|
+
event.stopPropagation();
|
|
556
|
+
}
|
|
557
|
+
async seletecAllEvent($event) {
|
|
558
|
+
this.indeterminateState = false;
|
|
559
|
+
if (this.selectAll) {
|
|
560
|
+
Object.keys(this.checkboxs).forEach((key) => {
|
|
561
|
+
this.checkboxs[key] = true;
|
|
562
|
+
});
|
|
563
|
+
this.selectedRows = [];
|
|
564
|
+
let data = this.data;
|
|
565
|
+
data.forEach((element) => {
|
|
566
|
+
this.selectedRows.push(element);
|
|
567
|
+
});
|
|
568
|
+
this.selected.emit(this.selectedRows);
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
this.clearCheckboxes();
|
|
572
|
+
this.selected.emit(this.selectedRows);
|
|
573
|
+
}
|
|
574
|
+
let service = await this.getDateTableByUrl();
|
|
575
|
+
this.data = service['data'];
|
|
576
|
+
this.internalData.emit(service);
|
|
577
|
+
this.length = service['count'];
|
|
578
|
+
this.validateRules();
|
|
579
|
+
}
|
|
580
|
+
clearCheckboxes() {
|
|
581
|
+
Object.keys(this.checkboxs).forEach((key) => {
|
|
582
|
+
this.checkboxs[key] = false;
|
|
583
|
+
});
|
|
584
|
+
this.selectedRows = [];
|
|
585
|
+
}
|
|
586
|
+
changeFilters() {
|
|
587
|
+
if (this.params)
|
|
588
|
+
this.params.forEach((element) => {
|
|
589
|
+
if (element.id == 'filter') {
|
|
590
|
+
element.value = this.filters;
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
this.applyFilters();
|
|
594
|
+
}
|
|
595
|
+
async applyFilters($event) {
|
|
596
|
+
if ($event)
|
|
597
|
+
this.filtersPost = $event;
|
|
598
|
+
if (this.url) {
|
|
599
|
+
let res = await this.getDateTableByUrl();
|
|
600
|
+
this.data = res['data'];
|
|
601
|
+
this.validateRules();
|
|
602
|
+
this.length = res['count'];
|
|
603
|
+
this.internalData.emit(res);
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
this.data = this.originalData.filter((data) => {
|
|
607
|
+
for (let key of Object.keys(data)) {
|
|
608
|
+
let result = data[key]
|
|
609
|
+
.toString()
|
|
610
|
+
.toLowerCase()
|
|
611
|
+
.includes(this.filters.toLowerCase());
|
|
612
|
+
if (result) {
|
|
613
|
+
return data;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
changePage($event) {
|
|
620
|
+
this.params.forEach((element, index) => {
|
|
621
|
+
if (element.id == 'per_page') {
|
|
622
|
+
element.value = $event.pageSize;
|
|
623
|
+
}
|
|
624
|
+
if (element.id == 'page') {
|
|
625
|
+
element.value = $event.pageIndex;
|
|
626
|
+
}
|
|
627
|
+
});
|
|
628
|
+
this.applyFilters();
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataTableComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpService }, { token: i3.MessageService }, { token: i4.FunctionsService }, { token: i5.MatPaginatorIntl }, { token: i6.ExportDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
632
|
+
DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DataTableComponent, selector: "data-table", inputs: { title: "title", columns: "columns", data: "data", combo: "combo", configuration: "configuration", reloadTable: "reloadTable", url: "url", params: "params", titleLoading: "titleLoading", messageLoading: "messageLoading", headerFileXlsm: "headerFileXlsm", headerFilters: "headerFilters", xslxTitleFields: "xslxTitleFields", xslxSheetNameFields: "xslxSheetNameFields", xslxBodyFields: "xslxBodyFields", xslxParams: "xslxParams", roleId: "roleId", moduleId: "moduleId", subModuleId: "subModuleId" }, outputs: { clickRow: "clickRow", add: "add", edit: "edit", delete: "delete", print: "print", exportXslxByRow: "exportXslxByRow", active: "active", selected: "selected", view: "view", closeOrder: "closeOrder", packOff: "packOff", advance: "advance", income: "income", exit: "exit", internalData: "internalData", sendEmail: "sendEmail", addComment: "addComment", fileIconClick: "fileIconClick" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"contenedor-tabla\">\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\n </app-filters>\n\n <div style='display: flex; flex-direction: row; justify-content: space-between; align-items: center;'>\n <div style='flex:1; font-size: 1rem;'>\n <strong><p style='margin:0' *ngIf='selectedRows.length>0 && selectedRows.length<2 && configuration.selectable'> {{selectedRows.length}} Seleccionado </p></strong>\n <strong><p style='margin:0' *ngIf='selectedRows.length>1'> {{selectedRows.length}} Seleccionados </p></strong>\n <strong><p style='margin:0' *ngIf='selectedRows.length<1 && !configuration.hideTitle'> {{title}} </p></strong>\n </div>\n\n <div *ngIf=\"!configuration.hideFilter\" style='flex:3; padding-right: 10px; margin-bottom: 5px;'>\n <mat-form-field class='filter'>\n <input type=\"text\" [(ngModel)]='filters' (keyup)='changeFilters()' matInput placeholder=\"Filtrar\">\n </mat-form-field>\n </div>\n\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\n\n </div>\n\n <table class=\"table_Eter table-hover\">\n <thead class=\"dark\">\n <tr >\n <th *ngIf='configuration.selectable' style='justify-content: center;'>\n <mat-checkbox color='primary' (change)='seletecAllEvent($event)' [(ngModel)]='selectAll' [indeterminate]='indeterminateState'> </mat-checkbox> </th>\n <th\n [class]=\"column.style?.movil\"\n *ngFor='let column of columns' scope=\"col\"\n [ngStyle]=\"column.style\"\n >{{column.label}}</th>\n <th *ngIf=\"shouldShowMenu()\"></th>\n </tr>\n </thead>\n <tbody class='mat-elevation-z3'>\n\n <tr style=\"cursor: pointer;\" *ngFor='let row of data' (click)='clickOnRoW(row)' [class]=\"checkboxs[row[configuration.primaryKey]]?'selected-row':''\">\n <th *ngIf='configuration.selectable' style='justify-content: center;'> <mat-checkbox color='primary' [(ngModel)]='checkboxs[row[configuration.primaryKey]]' (click)='clicked($event)' (change)='selection(row, $event)'> </mat-checkbox> </th>\n <th [class]=\"column.style?.movil\" [ngStyle]=\"column.style\" scope=\"row\" *ngFor=\"let column of columns\">\n <ng-container *ngIf=\"column.type === 'file' || (column.rules && evaluateRules(row[column.ID], column.rules)); else displayValue\">\n <div (click)=\"onFileIconClick($event, row[column.ID])\">\n <i class=\"fa fa-file\" style=\"cursor:pointer;\"></i>\n </div>\n </ng-container>\n <ng-template #displayValue>\n {{ row[column.ID] }}\n </ng-template>\n </th>\n\n <th *ngIf=\"shouldShowMenu()\" style=\"display: flex; justify-content: center; align-items: center; overflow: visible;\">\n <mat-icon\n (click)=\"showMenu($event)\"\n [matMenuTriggerFor]=\"menu\"\n matRipple\n class=\"menu_more_vert\"\n aria-hidden=\"false\"\n aria-label=\"Example delete icon\"\n >more_vert</mat-icon>\n\n <mat-menu #menu=\"matMenu\">\n <div *ngFor=\"let btn of buttonsConfig\" >\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item class=\"d-flex align-items-center w-100\" >\n <i class=\"fa {{btn.icon}} btn-accion\" style=\"font-size:120%; margin-right: 10px\"></i>\n {{btn.tooltip}}\n </button>\n </div>\n\n </mat-menu>\n </th>\n\n </tr>\n\n\n </tbody>\n\n </table>\n\n <div *ngIf='length == 0 && data.length == 0' style=\"margin-left: 10px;\"> <strong>No se encontr\u00F3 informaci\u00F3n</strong></div>\n\n <mat-paginator *ngIf=\"paginatorActive\"\n [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons\n (page)=\"changePage($event)\"></mat-paginator>\n\n </div>\n\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" style='flex:0.5; display:flex; flex-direction: row; justify-content: flex-end;'>\n <ng-container *ngFor=\"let btn of buttonsConfig\">\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{btn.tooltip}}\" matTooltipPosition=\"above\">\n <i class=\"fa {{btn.icon}} btn-accion\" [ngStyle]=\"{'font-size': fontSize ? fontSize : '170%', 'margin-right': marginRight ? marginRight : '15px'}\"></i>\n </div>\n </ng-container>\n</ng-template>\n\n", styles: [".contenedor-tabla{width:100%;overflow-x:auto}.table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:100%}.filter{padding:0;margin-bottom:10px;width:100%}.filter ::ng-deep .mat-form-field-underline{bottom:3px!important}.filter ::ng-deep .mat-form-field-infix{border:0!important}.filter ::ng-deep .mat-form-field-wrapper{padding:0}.filter ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-wrapper{padding:0}.selected-row{color:#212529;background-color:#00000013}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}}::ng-deep .mat-paginator{background:transparent!important}@media screen and (max-width: 400px){.filter{padding:0;margin-bottom:40px;width:70%}}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.FiltersComponent, selector: "app-filters", inputs: ["headerFilters"], outputs: ["applyFilters"] }] });
|
|
633
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
634
|
+
type: Component,
|
|
635
|
+
args: [{ selector: 'data-table', template: "<div class=\"contenedor-tabla\">\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\n </app-filters>\n\n <div style='display: flex; flex-direction: row; justify-content: space-between; align-items: center;'>\n <div style='flex:1; font-size: 1rem;'>\n <strong><p style='margin:0' *ngIf='selectedRows.length>0 && selectedRows.length<2 && configuration.selectable'> {{selectedRows.length}} Seleccionado </p></strong>\n <strong><p style='margin:0' *ngIf='selectedRows.length>1'> {{selectedRows.length}} Seleccionados </p></strong>\n <strong><p style='margin:0' *ngIf='selectedRows.length<1 && !configuration.hideTitle'> {{title}} </p></strong>\n </div>\n\n <div *ngIf=\"!configuration.hideFilter\" style='flex:3; padding-right: 10px; margin-bottom: 5px;'>\n <mat-form-field class='filter'>\n <input type=\"text\" [(ngModel)]='filters' (keyup)='changeFilters()' matInput placeholder=\"Filtrar\">\n </mat-form-field>\n </div>\n\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\n\n </div>\n\n <table class=\"table_Eter table-hover\">\n <thead class=\"dark\">\n <tr >\n <th *ngIf='configuration.selectable' style='justify-content: center;'>\n <mat-checkbox color='primary' (change)='seletecAllEvent($event)' [(ngModel)]='selectAll' [indeterminate]='indeterminateState'> </mat-checkbox> </th>\n <th\n [class]=\"column.style?.movil\"\n *ngFor='let column of columns' scope=\"col\"\n [ngStyle]=\"column.style\"\n >{{column.label}}</th>\n <th *ngIf=\"shouldShowMenu()\"></th>\n </tr>\n </thead>\n <tbody class='mat-elevation-z3'>\n\n <tr style=\"cursor: pointer;\" *ngFor='let row of data' (click)='clickOnRoW(row)' [class]=\"checkboxs[row[configuration.primaryKey]]?'selected-row':''\">\n <th *ngIf='configuration.selectable' style='justify-content: center;'> <mat-checkbox color='primary' [(ngModel)]='checkboxs[row[configuration.primaryKey]]' (click)='clicked($event)' (change)='selection(row, $event)'> </mat-checkbox> </th>\n <th [class]=\"column.style?.movil\" [ngStyle]=\"column.style\" scope=\"row\" *ngFor=\"let column of columns\">\n <ng-container *ngIf=\"column.type === 'file' || (column.rules && evaluateRules(row[column.ID], column.rules)); else displayValue\">\n <div (click)=\"onFileIconClick($event, row[column.ID])\">\n <i class=\"fa fa-file\" style=\"cursor:pointer;\"></i>\n </div>\n </ng-container>\n <ng-template #displayValue>\n {{ row[column.ID] }}\n </ng-template>\n </th>\n\n <th *ngIf=\"shouldShowMenu()\" style=\"display: flex; justify-content: center; align-items: center; overflow: visible;\">\n <mat-icon\n (click)=\"showMenu($event)\"\n [matMenuTriggerFor]=\"menu\"\n matRipple\n class=\"menu_more_vert\"\n aria-hidden=\"false\"\n aria-label=\"Example delete icon\"\n >more_vert</mat-icon>\n\n <mat-menu #menu=\"matMenu\">\n <div *ngFor=\"let btn of buttonsConfig\" >\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item class=\"d-flex align-items-center w-100\" >\n <i class=\"fa {{btn.icon}} btn-accion\" style=\"font-size:120%; margin-right: 10px\"></i>\n {{btn.tooltip}}\n </button>\n </div>\n\n </mat-menu>\n </th>\n\n </tr>\n\n\n </tbody>\n\n </table>\n\n <div *ngIf='length == 0 && data.length == 0' style=\"margin-left: 10px;\"> <strong>No se encontr\u00F3 informaci\u00F3n</strong></div>\n\n <mat-paginator *ngIf=\"paginatorActive\"\n [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons\n (page)=\"changePage($event)\"></mat-paginator>\n\n </div>\n\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" style='flex:0.5; display:flex; flex-direction: row; justify-content: flex-end;'>\n <ng-container *ngFor=\"let btn of buttonsConfig\">\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{btn.tooltip}}\" matTooltipPosition=\"above\">\n <i class=\"fa {{btn.icon}} btn-accion\" [ngStyle]=\"{'font-size': fontSize ? fontSize : '170%', 'margin-right': marginRight ? marginRight : '15px'}\"></i>\n </div>\n </ng-container>\n</ng-template>\n\n", styles: [".contenedor-tabla{width:100%;overflow-x:auto}.table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:100%}.filter{padding:0;margin-bottom:10px;width:100%}.filter ::ng-deep .mat-form-field-underline{bottom:3px!important}.filter ::ng-deep .mat-form-field-infix{border:0!important}.filter ::ng-deep .mat-form-field-wrapper{padding:0}.filter ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-wrapper{padding:0}.selected-row{color:#212529;background-color:#00000013}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}}::ng-deep .mat-paginator{background:transparent!important}@media screen and (max-width: 400px){.filter{padding:0;margin-bottom:40px;width:70%}}\n"] }]
|
|
636
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.HttpService }, { type: i3.MessageService }, { type: i4.FunctionsService }, { type: i5.MatPaginatorIntl }, { type: i6.ExportDataService }]; }, propDecorators: { title: [{
|
|
637
|
+
type: Input
|
|
638
|
+
}], columns: [{
|
|
639
|
+
type: Input
|
|
640
|
+
}], data: [{
|
|
641
|
+
type: Input
|
|
642
|
+
}], combo: [{
|
|
643
|
+
type: Input
|
|
644
|
+
}], configuration: [{
|
|
645
|
+
type: Input
|
|
646
|
+
}], reloadTable: [{
|
|
647
|
+
type: Input
|
|
648
|
+
}], url: [{
|
|
649
|
+
type: Input
|
|
650
|
+
}], params: [{
|
|
651
|
+
type: Input
|
|
652
|
+
}], titleLoading: [{
|
|
653
|
+
type: Input
|
|
654
|
+
}], messageLoading: [{
|
|
655
|
+
type: Input
|
|
656
|
+
}], headerFileXlsm: [{
|
|
657
|
+
type: Input
|
|
658
|
+
}], headerFilters: [{
|
|
659
|
+
type: Input
|
|
660
|
+
}], xslxTitleFields: [{
|
|
661
|
+
type: Input
|
|
662
|
+
}], xslxSheetNameFields: [{
|
|
663
|
+
type: Input
|
|
664
|
+
}], xslxBodyFields: [{
|
|
665
|
+
type: Input
|
|
666
|
+
}], xslxParams: [{
|
|
667
|
+
type: Input
|
|
668
|
+
}], roleId: [{
|
|
669
|
+
type: Input
|
|
670
|
+
}], moduleId: [{
|
|
671
|
+
type: Input
|
|
672
|
+
}], subModuleId: [{
|
|
673
|
+
type: Input
|
|
674
|
+
}], clickRow: [{
|
|
675
|
+
type: Output
|
|
676
|
+
}], add: [{
|
|
677
|
+
type: Output
|
|
678
|
+
}], edit: [{
|
|
679
|
+
type: Output
|
|
680
|
+
}], delete: [{
|
|
681
|
+
type: Output
|
|
682
|
+
}], print: [{
|
|
683
|
+
type: Output
|
|
684
|
+
}], exportXslxByRow: [{
|
|
685
|
+
type: Output
|
|
686
|
+
}], active: [{
|
|
687
|
+
type: Output
|
|
688
|
+
}], selected: [{
|
|
689
|
+
type: Output
|
|
690
|
+
}], view: [{
|
|
691
|
+
type: Output
|
|
692
|
+
}], closeOrder: [{
|
|
693
|
+
type: Output
|
|
694
|
+
}], packOff: [{
|
|
695
|
+
type: Output
|
|
696
|
+
}], advance: [{
|
|
697
|
+
type: Output
|
|
698
|
+
}], income: [{
|
|
699
|
+
type: Output
|
|
700
|
+
}], exit: [{
|
|
701
|
+
type: Output
|
|
702
|
+
}], internalData: [{
|
|
703
|
+
type: Output
|
|
704
|
+
}], sendEmail: [{
|
|
705
|
+
type: Output
|
|
706
|
+
}], addComment: [{
|
|
707
|
+
type: Output
|
|
708
|
+
}], fileIconClick: [{
|
|
709
|
+
type: Output
|
|
710
|
+
}], paginator: [{
|
|
711
|
+
type: ViewChild,
|
|
712
|
+
args: [MatPaginator, { static: true }]
|
|
713
|
+
}] } });
|
|
714
|
+
var enumRules;
|
|
715
|
+
(function (enumRules) {
|
|
716
|
+
enumRules[enumRules[">"] = 0] = ">";
|
|
717
|
+
enumRules[enumRules["<"] = 1] = "<";
|
|
718
|
+
enumRules[enumRules["=="] = 2] = "==";
|
|
719
|
+
enumRules[enumRules["!="] = 3] = "!=";
|
|
720
|
+
})(enumRules || (enumRules = {}));
|
|
721
|
+
var enumActions;
|
|
722
|
+
(function (enumActions) {
|
|
723
|
+
enumActions[enumActions["REPLACE"] = 0] = "REPLACE";
|
|
724
|
+
enumActions[enumActions["ADD"] = 1] = "ADD";
|
|
725
|
+
enumActions[enumActions["REMOVE"] = 2] = "REMOVE";
|
|
726
|
+
enumActions[enumActions["SHOW_FILE_ICON"] = 3] = "SHOW_FILE_ICON";
|
|
727
|
+
})(enumActions || (enumActions = {}));
|
|
728
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzNELE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUczRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDM0UsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7UUFDaEMsT0FBTyxRQUFRLE1BQU0sRUFBRSxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUM7SUFFbkMsTUFBTSxRQUFRLEdBQ1osVUFBVSxHQUFHLE1BQU07UUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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Q0FBQTtJQUNILG1DQUFHLENBQUE7SUFDSCxxQ0FBSSxDQUFBO0lBQ0oscUNBQUksQ0FBQTtBQUNOLENBQUMsRUFMSSxTQUFTLEtBQVQsU0FBUyxRQUtiO0FBRUQsSUFBSyxXQUtKO0FBTEQsV0FBSyxXQUFXO0lBQ2QsbURBQU8sQ0FBQTtJQUNQLDJDQUFHLENBQUE7SUFDSCxpREFBTSxDQUFBO0lBQ04saUVBQWMsQ0FBQTtBQUNoQixDQUFDLEVBTEksV0FBVyxLQUFYLFdBQVcsUUFLZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcmVlblNpemVVdGlsIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9zY3JlZW4tc2l6ZS11dGlsJztcbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBUYWJsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvdGFibGUtbW9kYWwvdGFibGUtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBGdW5jdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9ySW50bCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IElQZXJtaXNzaW9ucywgbW9kdWxlc0J5Um9sIH0gZnJvbSAnQGVkZ2Fyem9uOTMvYnJhaW5sb3Blci1zaGFyZWQnO1xuXG5cbmNvbnN0IHNwYW5pc2hSYW5nZUxhYmVsID0gKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgaWYgKGxlbmd0aCA9PSAwIHx8IHBhZ2VTaXplID09IDApIHtcbiAgICByZXR1cm4gYDAgZGUgJHtsZW5ndGh9YDtcbiAgfVxuXG4gIGxlbmd0aCA9IE1hdGgubWF4KGxlbmd0aCwgMCk7XG5cbiAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2UgKiBwYWdlU2l6ZTtcblxuICBjb25zdCBlbmRJbmRleCA9XG4gICAgc3RhcnRJbmRleCA8IGxlbmd0aFxuICAgICAgPyBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIGxlbmd0aClcbiAgICAgIDogc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuXG4gIHJldHVybiBgJHtzdGFydEluZGV4ICsgMX0gLSAke2VuZEluZGV4fSBkZSAke2xlbmd0aH1gO1xufTtcblxuY29uc3Qgcm9sZXNBbmRQZXJtaXNzaW9ucyA9IG1vZHVsZXNCeVJvbFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHRpdGxlO1xuICBASW5wdXQoKSBjb2x1bW5zO1xuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgY29tYm87XG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb24gPSB7XG4gICAgYWRkOiBmYWxzZSxcbiAgICBlZGl0OiBmYWxzZSxcbiAgICBkZWxldGU6IGZhbHNlLFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgcHJpbnQ6IGZhbHNlLFxuICAgIGFkZFBlcjogZmFsc2UsXG4gICAgZWRpdFBlcjogZmFsc2UsXG4gICAgcHJpbWFyeUtleTogJ2lkJyxcbiAgICBleHBvcnRYc2x4OiBmYWxzZSxcbiAgICBoaWRlVGl0bGU6IHRydWUsXG4gICAgaGlkZUZpbHRlcjogdHJ1ZSxcbiAgICBub3RJbml0aWFsaXplOiBmYWxzZSxcbiAgICBleHBvcnRYc2x4QnlSb3c6IGZhbHNlLFxuICAgIGV4cG9ydFhzbHhXaXRoUGFnZXM6IGZhbHNlLFxuICAgIHZpZXc6IGZhbHNlLFxuICAgIGNsb3NlT3JkZXI6IGZhbHNlLFxuICAgIHBhY2tPZmY6IGZhbHNlLFxuICAgIGFkdmFuY2U6IHRydWUsXG4gICAgYWR2YW5jZUxhYmVsOiBudWxsLFxuICAgIGluY29tZTogZmFsc2UsXG4gICAgZXhpdDogZmFsc2UsXG4gICAgc2VuZEVtYWlsOiBmYWxzZSxcbiAgICBhZGRDb21tZW50OiBmYWxzZSxcbiAgfTtcblxuICBASW5wdXQoKSByZWxvYWRUYWJsZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHVybDogc3RyaW5nO1xuICBASW5wdXQoKSBwYXJhbXM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIHRpdGxlTG9hZGluZzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VMb2FkaW5nOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaGVhZGVyRmlsZVhsc206IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KCkgaGVhZGVyRmlsdGVyczogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSB4c2x4VGl0bGVGaWVsZHM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSB4c2x4U2hlZXROYW1lRmllbGRzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgeHNseEJvZHlGaWVsZHM6IHN0cmluZztcbiAgQElucHV0KCkgeHNseFBhcmFtczogQXJyYXk8YW55PiA9IG51bGw7XG4gIEBJbnB1dCgpIHJvbGVJZDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgbW9kdWxlSWQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHN1Yk1vZHVsZUlkOiBudW1iZXIgPSAwO1xuXG5cbiAgcHJpdmF0ZSBoYXNBY2Nlc3NUb0FsbCA9IHRydWU7XG4gIHByaXZhdGUgcm9sZXNBbmRQZXJtaXNzaW9uVXNlcjogSVBlcm1pc3Npb25zID0ge30gYXMgSVBlcm1pc3Npb25zO1xuXG4gIEBPdXRwdXQoKSBjbGlja1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWRkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHByaW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnRYc2x4QnlSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsb3NlT3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhY2tPZmYgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFkdmFuY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGluY29tZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZXhpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaW50ZXJuYWxEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZW5kRW1haWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFkZENvbW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgXG4gIEBPdXRwdXQoKSBmaWxlSWNvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIG1vdmlsID0gU2NyZWVuU2l6ZVV0aWwuaXNNb2JpbGUoKTtcbiAgZmlsdGVyc1Bvc3Q6IEFycmF5PGFueT4gPSBbXTtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIHNlbGVjdGVkUm93cyA9IFtdOyAvKiogYWxtYWNlbmEgbGFzIGZpbGFzIHNlbGVjY2lvbmFkYXMgKi9cbiAgY2hlY2tib3hzID0ge307XG4gIHNlbGVjdEFsbCA9IGZhbHNlO1xuICBpbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcbiAgZmlsdGVycztcbiAgb3JpZ2luYWxEYXRhID0gW107XG4gIHBhZ2luYXRvckFjdGl2ZSA9IHRydWU7XG4gIHNjcmVlbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgaWRfY29tcGFuaWE7XG5cbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwLCAxMDBdO1xuXG4gIHBhZ2VTaXplID0gc2NyZWVuLndpZHRoID4gNTAwID8gMTAgOiA1O1xuICBsZW5ndGggPSAwO1xuXG4gIHBhZ2UgPSAwO1xuXG4gIGFib3ZlOiBUb29sdGlwUG9zaXRpb25bXSA9IFsnYWJvdmUnXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnaW5hdG9yVHJhbnNsYXRlOiBNYXRQYWdpbmF0b3JJbnRsLFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0RGF0YVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuaXRlbXNQZXJQYWdlTGFiZWwgPSAnRWxlbWVudG9zIHBvciBww6FnaW5hJztcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5uZXh0UGFnZUxhYmVsID0gJ1NpZ3VpZW50ZSBww6FnaW5hJztcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5sYXN0UGFnZUxhYmVsID0gJ8OabHRpbWEgcMOhZ2luYSc7XG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUucHJldmlvdXNQYWdlTGFiZWwgPSAnUMOhZ2luYSBhbnRlcmlvcic7XG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuZmlyc3RQYWdlTGFiZWwgPSAnUHJpbWVyYSBww6FnaW5hJztcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5nZXRSYW5nZUxhYmVsID0gc3BhbmlzaFJhbmdlTGFiZWw7XG4gIH1cblxuICBidXR0b25zQ29uZmlnID0gW1xuICBdO1xuXG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVJvbEFuZFBlcm1pc3Npb24oKVxuICAgIGlmICh3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMCkge1xuICAgICAgdGhpcy5zY3JlZW4gPSB0cnVlO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDBcbiAgICAgICAgICA/ICh0aGlzLnNjcmVlbiA9IHRydWUpXG4gICAgICAgICAgOiAodGhpcy5zY3JlZW4gPSBmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JlZW4gPSBmYWxzZTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JlZW4ud2lkdGggPiAxMDAwXG4gICAgICAgICAgPyAodGhpcy5zY3JlZW4gPSB0cnVlKVxuICAgICAgICAgIDogKHRoaXMuc2NyZWVuID0gZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVsb2FkVGFibGUpIHtcbiAgICAgIHRoaXMucmVsb2FkVGFibGUuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxldGVjQWxsRXZlbnQoJycpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy50aXRsZUxvYWRpbmcgPT0gJycgPyAodGhpcy50aXRsZUxvYWRpbmcgPSAnQ2FyZ2FuZG8nKSA6ICcnO1xuICAgIHRoaXMubWVzc2FnZUxvYWRpbmcgPT0gJydcbiAgICAgID8gKHRoaXMubWVzc2FnZUxvYWRpbmcgPSAnT2J0ZW5pZW5kbyBkYXRvcy4uLicpXG4gICAgICA6ICcnO1xuICAgIHRoaXMudXJsICYmICF0aGlzLmNvbmZpZ3VyYXRpb24ubm90SW5pdGlhbGl6ZVxuICAgICAgPyB0aGlzLm1lc3NhZ2Uub3BlbkxvYWRpbmcodGhpcy50aXRsZUxvYWRpbmcsIHRoaXMubWVzc2FnZUxvYWRpbmcpXG4gICAgICA6ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnVybCAmJiAhdGhpcy5jb25maWd1cmF0aW9uLm5vdEluaXRpYWxpemUpIHtcbiAgICAgICAgbGV0IHNlcnZpY2UgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBzZXJ2aWNlWydjb3VudCddO1xuXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHNlcnZpY2UpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXJsKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yQWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVJvbEFuZFBlcm1pc3Npb24oKSB7XG4gICAgaWYgKHRoaXMucm9sZUlkICE9IDApIHtcbiAgICAgIGxldCByb2xlUGVybWlzc2lvbnMgPSByb2xlc0FuZFBlcm1pc3Npb25zPy5maW5kKHggPT4geC5pZCA9PSB0aGlzLnJvbGVJZClcbiAgICAgIHRoaXMuaGFzQWNjZXNzVG9BbGwgPSByb2xlUGVybWlzc2lvbnM/Lmhhc0FjY2Vzc1RvQWxsID8/IHJvbGVQZXJtaXNzaW9ucy5tb2R1bGVzPy5maW5kKHggPT4geC5pZCA9PSB0aGlzLm1vZHVsZUlkKT8uaGFzQWNjZXNzVG9BbGwgPz8gZmFsc2U7XG4gICAgfTtcblxuICAgIHRoaXMucm9sZXNBbmRQZXJtaXNzaW9uVXNlciA9IHJvbGVzQW5kUGVybWlzc2lvbnM/LmZpbmQoeCA9PiB4LmlkID09IHRoaXMucm9sZUlkKT8ubW9kdWxlcz8uZmluZCh4ID0+IHguaWQgPT0gdGhpcy5tb2R1bGVJZCk/LnN1Yk1vZHVsZXM/LmZpbmQoeCA9PiB4LmlkID09IHRoaXMuc3ViTW9kdWxlSWQpPy5wZXJtaXNzaW9ucyA/PyB7fSBhcyBJUGVybWlzc2lvbnM7XG4gICAgaWYgKCF0aGlzLmhhc0FjY2Vzc1RvQWxsICYmICF0aGlzLnJvbGVzQW5kUGVybWlzc2lvblVzZXIucmVhZEFsbCAmJiB0aGlzLnJvbGVzQW5kUGVybWlzc2lvblVzZXIucmVhZE93biA9PSB0cnVlKSB7XG4gICAgICB0aGlzLnBhcmFtcyA9IFsuLi50aGlzLnBhcmFtcywgeyBpZDogJ3JlYWRPd24nLCB2YWx1ZTogdHJ1ZSB9XTtcbiAgICB9XG4gICAgdGhpcy5jb25maWd1cmVCdXR0b25zKClcbiAgfVxuXG4gIGNvbmZpZ3VyZUJ1dHRvbnMoKSB7XG4gICAgdGhpcy5idXR0b25zQ29uZmlnID0gW1xuICAgICAge1xuICAgICAgICBhY3Rpb246ICdlZGl0JyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uZWRpdCAmJlxuICAgICAgICAgIHRoaXMuaGFzUGVybWlzc2lvbigndXBkYXRlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmVkaXQgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCd1cGRhdGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWVkaXQnLFxuICAgICAgICB0b29sdGlwOiAnRWRpdGFyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ3ByaW50JyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbnQgJiZcbiAgICAgICAgICB0aGlzLnNjcmVlbiAmJlxuICAgICAgICAgIHRoaXMuaGFzUGVybWlzc2lvbigncHJpbnQnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbnQgJiYgdGhpcy5zY3JlZW4gJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdwcmludCcpLFxuICAgICAgICBpY29uOiAnZmEtcHJpbnQnLFxuICAgICAgICB0b29sdGlwOiAnSW1wcmltaXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnYWN0aXZlJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmUgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhY3RpdmF0ZUFuZEluYWN0aXZhdGUnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uYWN0aXZlICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWN0aXZhdGVBbmRJbmFjdGl2YXRlJyksXG4gICAgICAgIGljb246ICdmYS1hZGp1c3QnLFxuICAgICAgICB0b29sdGlwOiAnQWN0aXZhci9EZXNhY3RpdmFyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2FkZCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5hZGQgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCd3cml0ZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IGZhbHNlLFxuICAgICAgICBpY29uOiAnZmEtcGx1cy1jaXJjbGUnLFxuICAgICAgICB0b29sdGlwOiAnTnVldm8nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnaW5jb21lJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmluY29tZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3dyaXRlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsXG4gICAgICAgIGljb246ICdmYS11c2VyLXBsdXMnLFxuICAgICAgICB0b29sdGlwOiAnSW5ncmVzbycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdleGl0JyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmV4aXQgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCd3cml0ZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IGZhbHNlLFxuICAgICAgICBpY29uOiAnZmEtdXNlci10aW1lcycsXG4gICAgICAgIHRvb2x0aXA6ICdTYWxpZGEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAndmlldycsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi52aWV3ICYmIHRoaXMuaGFzUGVybWlzc2lvbigncmVhZERldGFpbCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi52aWV3ICYmIHRoaXMuaGFzUGVybWlzc2lvbigncmVhZERldGFpbCcpLFxuICAgICAgICBpY29uOiAnZmEtZXllJyxcbiAgICAgICAgdG9vbHRpcDogJ1ZlciBkZXRhbGxlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2Nsb3NlT3JkZXInLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLmNsb3NlT3JkZXIpICYmIHRoaXMuaGFzUGVybWlzc2lvbignY2xvc2VPVCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5jbG9zZU9yZGVyICYmIHRoaXMuaGFzUGVybWlzc2lvbignY2xvc2VPVCcpLFxuICAgICAgICBpY29uOiAnZmEtY2hlY2stY2lyY2xlJyxcbiAgICAgICAgdG9vbHRpcDogJ0NlcnJhciBvcmRlbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdwYWNrT2ZmJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLnBhY2tPZmYgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhbGxvY2F0ZVJlc291cmNlcycpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5wYWNrT2ZmICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWxsb2NhdGVSZXNvdXJjZXMnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWNhcnQtYXJyb3ctZG93bicsXG4gICAgICAgIHRvb2x0aXA6ICdEZXNwYWNoYXIgcmVjdXJzb3MnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnYWR2YW5jZScsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5hZHZhbmNlICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWR2YW5jZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5hZHZhbmNlICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWR2YW5jZScpLFxuICAgICAgICBpY29uOiAnZmEtYXJyb3ctcmlnaHQnLFxuICAgICAgICB0b29sdGlwOiB0aGlzLmNvbmZpZ3VyYXRpb24uYWR2YW5jZUxhYmVsLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnc2VuZEVtYWlsJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VuZEVtYWlsICYmXG4gICAgICAgICAgdGhpcy5oYXNQZXJtaXNzaW9uKCdzZW5kRW1haWwnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uc2VuZEVtYWlsICYmIHRoaXMuaGFzUGVybWlzc2lvbignc2VuZEVtYWlsJyksXG4gICAgICAgIGljb246ICdmYS1tYWlsLWJ1bGsnLFxuICAgICAgICB0b29sdGlwOiAnRW52aWEgY29ycmVvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2V4cG9ydFRvRXhjZWwnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgKHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4IHx8IHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4V2l0aFBhZ2VzKSAmJlxuICAgICAgICAgIHRoaXMuaGFzUGVybWlzc2lvbignZXhwb3J0JyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsXG4gICAgICAgIGljb246ICdmYS1kb3dubG9hZCcsXG4gICAgICAgIHRvb2x0aXA6ICdFeHBvcnRhciBUYWJsYScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdleHBvcnRUb0V4Y2VsQnlSb3cnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uZXhwb3J0WHNseEJ5Um93ICYmIHRoaXMuaGFzUGVybWlzc2lvbignZXhwb3J0JyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhCeVJvdyAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2V4cG9ydCcpLFxuICAgICAgICBpY29uOiAnZmEtZG93bmxvYWQnLFxuICAgICAgICB0b29sdGlwOiAnRXhwb3J0YXIgUmVnaXN0cm8nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnYWRkQ29tbWVudCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmFkZENvbW1lbnQgJiZcbiAgICAgICAgICB0aGlzLmhhc1Blcm1pc3Npb24oJ2NvbW1lbnQnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ29tbWVudCAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2NvbW1lbnQnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWNvbW1lbnRzJyxcbiAgICAgICAgdG9vbHRpcDogJ0FncmVnYXIgQ29tZW50YXJpbycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdkZWxldGUnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmRlbGV0ZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2RlbGV0ZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5kZWxldGUgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdkZWxldGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLXRyYXNoJyxcbiAgICAgICAgdG9vbHRpcDogJ0VsaW1pbmFyJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG5cbiAgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5oYXNBY2Nlc3NUb0FsbCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMucm9sZXNBbmRQZXJtaXNzaW9uVXNlcj8uW3Blcm1pc3Npb25dID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGF0ZVRhYmxlQnlVcmwoKSB7XG4gICAgdGhpcy52YWxpZGFyUGFyYW1zKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cC5wb3N0RGF0YUJvZHkoXG4gICAgICB0aGlzLnVybCxcbiAgICAgIHRoaXMuZmlsdGVyc1Bvc3QsXG4gICAgICB0aGlzLnBhcmFtc1xuICAgICk7XG4gIH1cblxuICB2YWxpZGFyUGFyYW1zKCkge1xuICAgIHRoaXMucGFyYW1zID0gdGhpcy5mdW5jdGlvbkV0ZXIucmVtb3ZlRHVwbGljYXRlT2JqZWN0cyh0aGlzLnBhcmFtcyk7XG4gICAgaWYgKHRoaXMucGFyYW1zKSB7XG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoKHgpID0+IHguaWQgPT0gJ3BhZ2UnKSkge1xuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdwYWdlJywgdmFsdWU6ICcwJyB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wYXJhbXMuZmluZCgoeCkgPT4geC5pZCA9PSAncGVyX3BhZ2UnKSkge1xuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdwZXJfcGFnZScsIHZhbHVlOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKCh4KSA9PiB4LmlkID09ICdmaWx0ZXInKSkge1xuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHsgaWQ6ICdmaWx0ZXInLCB2YWx1ZTogJycgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVSdWxlcygpIHtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY29sdW1uc10gb2YgdGhpcy5jb2x1bW5zLmVudHJpZXMoKSkge1xuICAgICAgZm9yIChjb25zdCBbaW5kZXhEYXRhLCBlbGVtZW50XSBvZiB0aGlzLmRhdGEuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChjb2x1bW5zLnJ1bGVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbHVtbnMucnVsZXMpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnJ1bGUgPT0gZW51bVJ1bGVzWyc9PSddKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbnMuSURdICYmXG4gICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5zLklEXS50b1N0cmluZygpID09IHJ1bGUudmFsdWVSdWxlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBydWxlLnZhbHVlQWN0aW9uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gZWxlbWVudFtjb2x1bW5zLklEXTtcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnZmVjaGEnIHx8IGNvbHVtbnMudHlwZSA9PSAnZGF0ZScpXG4gICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPVxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbkV0ZXIuZGF0ZUlzbyhjb2x1bW5WYWx1ZSk7XG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2RhdGVXaXRoVGltZScpXG4gICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlV2l0aFRpbWUoXG4gICAgICAgICAgICBjb2x1bW5WYWx1ZT8udG9TdHJpbmcoKSA/PyBjb2x1bW5WYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2N1cnJlbmN5JylcbiAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9XG4gICAgICAgICAgICBJbnRsLk51bWJlckZvcm1hdCgnZXMtQ08nKS5mb3JtYXQoY29sdW1uVmFsdWUpO1xuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdib29sZWFuJylcbiAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IGNvbHVtblZhbHVlID09IDEgPyAnU2knIDogJ05vJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuZGF0YSkge1xuICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xuICAgIH1cblxuICB9XG5cbiAgZXZhbHVhdGVSdWxlcyh2YWx1ZTogYW55LCBydWxlczogYW55W10pOiBib29sZWFuIHtcbiAgICBpZiAoIXJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGFjdGl2ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFsbG93ZWRFeHRlbnNpb25zID0gW1xuICAgICAgICAnLnBuZycsICcuanBlZycsICcuanBnJywgJy5naWYnLCAnLmJtcCcsICcud2VicCcsICcuc3ZnJyxcbiAgICAgICAgJy5wZGYnLCAnLmRvYycsICcuZG9jeCcsICcueGxzJywgJy54bHN4JywgJy5kb2N1bWVudCdcbiAgICBdO1xuICAgIHJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgIGlmIChydWxlLmFjdGlvbiA9PT0gZW51bUFjdGlvbnMuU0hPV19GSUxFX0lDT04gJiYgdmFsdWUgJiYgdmFsdWUuaW5jbHVkZXMoJy9kb2NzLycpKSB7XG4gICAgICAgICAgICBjb25zdCBsb3dlclZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0IG9mIGFsbG93ZWRFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyVmFsdWUuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aXZlO1xufVxuXG4gIG9uRmlsZUljb25DbGljayhldmVudCwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZmlsZUljb25DbGljay5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGNsaWNrT25Sb1cocm93RGF0YSkge1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2hlY2tib3hzW3Jvd0RhdGFbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXTtcblxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMuY2xlYXJDaGVja2JveGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb24ocm93RGF0YSwgeyBjaGVja2VkOiAhc3RhdGUgfSwgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdGFibGUpO1xuICAgIHRoaXMuY2xpY2tSb3cuZW1pdChyb3dEYXRhKTtcbiAgfVxuXG4gIHNob3dNZW51KCRldmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGFjdGlvbihhY3Rpb24sIHJvdyA9IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFJvdyA9IHJvdyA/IFtyb3ddIDogdGhpcy5zZWxlY3RlZFJvd3M7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hZGRQZXIpIHtcbiAgICAgICAgICB0aGlzLmFkZC5lbWl0KHRoaXMubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpYWxvZ1xuICAgICAgICAgICAgLm9wZW4oVGFibGVNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb2x1bW5zKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQuZW1pdChyZXN1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlZGl0JzpcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5lZGl0UGVyKSB7XG4gICAgICAgICAgdGhpcy5lZGl0LmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGNvbHVtbnM6IGFueTtcbiAgICAgICAgICBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Um93WzBdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5JRCA9PSBrZXkpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zW2luZGV4XS52YWx1ZSA9IGN1cnJlbnRSb3dbMF1ba2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmRpYWxvZ1xuICAgICAgICAgICAgLm9wZW4oVGFibGVNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb2x1bW5zKSksXG4gICAgICAgICAgICAgICAgdmFsdWVzOiBjdXJyZW50Um93WzBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aWR0aDogJzYwdmgnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgbmV3OiByZXN1bHQsIG9sZDogY3VycmVudFJvd1swXSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcmludCc6XG4gICAgICAgIHRoaXMucHJpbnQuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICB0aGlzLmFjdGl2ZS5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cG9ydFRvRXhjZWwnOlxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsQnlSb3cnOlxuICAgICAgICB0aGlzLmV4cG9ydFhzbHhCeVJvdy5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICB0aGlzLnZpZXcuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjbG9zZU9yZGVyJzpcbiAgICAgICAgdGhpcy5jbG9zZU9yZGVyLmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFja09mZic6XG4gICAgICAgIHRoaXMucGFja09mZi5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkdmFuY2UnOlxuICAgICAgICB0aGlzLmFkdmFuY2UuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbmNvbWUnOlxuICAgICAgICB0aGlzLmluY29tZS5lbWl0KHRoaXMubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleGl0JzpcbiAgICAgICAgdGhpcy5leGl0LmVtaXQodGhpcy5sZW5ndGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlbmRFbWFpbCc6XG4gICAgICAgIHRoaXMuc2VuZEVtYWlsLmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkQ29tbWVudCc6XG4gICAgICAgIHRoaXMuYWRkQ29tbWVudC5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNob3VsZFNob3dNZW51KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvbnNDb25maWcuc29tZSgoYnRuKSA9PiBidG4uY29uZGl0aW9uKCkpO1xuICB9XG5cbiAgZXhwb3J0VG9FeGNlbCgpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG4gICAgaWYgKHRoaXMudXJsICYmIHRoaXMucGFyYW1zKSB7XG4gICAgICBwYXJhbXMgPSBbLi4udGhpcy5wYXJhbXNdO1xuXG4gICAgICBpZiAodGhpcy54c2x4UGFyYW1zKSB7XG4gICAgICAgIHBhcmFtcyA9IFsuLi5wYXJhbXMsIC4uLnRoaXMueHNseFBhcmFtc107XG4gICAgICB9XG4gICAgICBsZXQgaSA9IHBhcmFtcy5maW5kSW5kZXgoKHgpID0+IHguaWQgPT0gJ3Blcl9wYWdlJyk7XG4gICAgICBpZiAoaSAhPSAtMSkgcGFyYW1zW2ldLnZhbHVlID0gMTAwMDAwMDAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZXhwb3J0WHNseFdpdGhQYWdlcykge1xuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlRXhjZWxXaXRoU2hlZXRzPGFueT4oXG4gICAgICAgIHRoaXMudGl0bGUsXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsZVhsc20sXG4gICAgICAgIHRoaXMudGl0bGUsXG4gICAgICAgIHRoaXMudXJsID8gbnVsbCA6IHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy51cmwsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdCxcbiAgICAgICAgdGhpcy54c2x4VGl0bGVGaWVsZHMsXG4gICAgICAgIHRoaXMueHNseFNoZWV0TmFtZUZpZWxkcyxcbiAgICAgICAgdGhpcy54c2x4Qm9keUZpZWxkc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlVG9YbHN4PGFueT4oXG4gICAgICAgIHRoaXMudGl0bGUsXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsZVhsc20sXG4gICAgICAgIHRoaXMudGl0bGUsXG4gICAgICAgIHRoaXMudXJsID8gbnVsbCA6IHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy51cmwsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3Rpb24ocm93LCAkZXZlbnQsIGVtaXRFdmVudCA9IHRydWUpIHtcbiAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9ICRldmVudC5jaGVja2VkO1xuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MucHVzaChyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkUm93cy5pbmRleE9mKHJvdyk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSAmJiBlbWl0RXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoIDwgdGhpcy5kYXRhLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNsaWNrZWQoJGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBhc3luYyBzZWxldGVjQWxsRXZlbnQoJGV2ZW50KSB7XG4gICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnNlbGVjdEFsbCkge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGVja2JveHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrYm94c1trZXldID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MucHVzaChlbGVtZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyQ2hlY2tib3hlcygpO1xuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKTtcbiAgICB0aGlzLmRhdGEgPSBzZXJ2aWNlWydkYXRhJ107XG4gICAgdGhpcy5pbnRlcm5hbERhdGEuZW1pdChzZXJ2aWNlKTtcbiAgICB0aGlzLmxlbmd0aCA9IHNlcnZpY2VbJ2NvdW50J107XG4gICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XG4gIH1cblxuICBjbGVhckNoZWNrYm94ZXMoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5jaGVja2JveHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIGNoYW5nZUZpbHRlcnMoKSB7XG4gICAgaWYgKHRoaXMucGFyYW1zKVxuICAgICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZCA9PSAnZmlsdGVyJykge1xuICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSB0aGlzLmZpbHRlcnM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseUZpbHRlcnMoJGV2ZW50PzogYW55KSB7XG4gICAgaWYgKCRldmVudCkgdGhpcy5maWx0ZXJzUG9zdCA9ICRldmVudDtcbiAgICBpZiAodGhpcy51cmwpIHtcbiAgICAgIGxldCByZXM6IGFueSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKTtcbiAgICAgIHRoaXMuZGF0YSA9IHJlc1snZGF0YSddO1xuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XG4gICAgICB0aGlzLmxlbmd0aCA9IHJlc1snY291bnQnXTtcbiAgICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKChkYXRhKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgIGxldCByZXN1bHQgPSBkYXRhW2tleV1cbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuZmlsdGVycy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVBhZ2UoJGV2ZW50KSB7XG4gICAgdGhpcy5wYXJhbXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmlkID09ICdwZXJfcGFnZScpIHtcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9ICRldmVudC5wYWdlU2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LmlkID09ICdwYWdlJykge1xuICAgICAgICBlbGVtZW50LnZhbHVlID0gJGV2ZW50LnBhZ2VJbmRleDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICB9XG59XG5cbmVudW0gZW51bVJ1bGVzIHtcbiAgJz4nLFxuICAnPCcsXG4gICc9PScsXG4gICchPScsXG59XG5cbmVudW0gZW51bUFjdGlvbnMge1xuICBSRVBMQUNFLFxuICBBREQsXG4gIFJFTU9WRSxcbiAgU0hPV19GSUxFX0lDT05cbn0iLCI8ZGl2IGNsYXNzPVwiY29udGVuZWRvci10YWJsYVwiPlxuICA8YXBwLWZpbHRlcnMgW2hlYWRlckZpbHRlcnNdPVwiaGVhZGVyRmlsdGVyc1wiIChhcHBseUZpbHRlcnMpPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cbiAgPC9hcHAtZmlsdGVycz5cblxuICA8ZGl2IHN0eWxlPSdkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47ICBhbGlnbi1pdGVtczogY2VudGVyOyc+XG4gICAgPGRpdiBzdHlsZT0nZmxleDoxOyBmb250LXNpemU6IDFyZW07Jz5cbiAgICAgIDxzdHJvbmc+PHAgc3R5bGU9J21hcmdpbjowJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aD4wICYmIHNlbGVjdGVkUm93cy5sZW5ndGg8MiAmJiBjb25maWd1cmF0aW9uLnNlbGVjdGFibGUnPiB7e3NlbGVjdGVkUm93cy5sZW5ndGh9fSBTZWxlY2Npb25hZG8gPC9wPjwvc3Ryb25nPlxuICAgICAgPHN0cm9uZz48cCBzdHlsZT0nbWFyZ2luOjAnICpuZ0lmPSdzZWxlY3RlZFJvd3MubGVuZ3RoPjEnPiB7e3NlbGVjdGVkUm93cy5sZW5ndGh9fSBTZWxlY2Npb25hZG9zIDwvcD48L3N0cm9uZz5cbiAgICAgIDxzdHJvbmc+PHAgc3R5bGU9J21hcmdpbjowJyAqbmdJZj0nc2VsZWN0ZWRSb3dzLmxlbmd0aDwxICYmICFjb25maWd1cmF0aW9uLmhpZGVUaXRsZSc+IHt7dGl0bGV9fSA8L3A+PC9zdHJvbmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZ3VyYXRpb24uaGlkZUZpbHRlclwiIHN0eWxlPSdmbGV4OjM7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDVweDsnPlxuICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0nZmlsdGVyJz5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09J2ZpbHRlcnMnIChrZXl1cCk9J2NoYW5nZUZpbHRlcnMoKScgIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRmlsdHJhclwiPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zVGFibGVcIj48L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cblxuIDx0YWJsZSBjbGFzcz1cInRhYmxlX0V0ZXIgdGFibGUtaG92ZXJcIj5cbiAgICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxuICAgICAgIDx0ciA+XG4gICAgICAgIDx0aCAqbmdJZj0nY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlJyBzdHlsZT0nanVzdGlmeS1jb250ZW50OiBjZW50ZXI7Jz5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPSdwcmltYXJ5JyAoY2hhbmdlKT0nc2VsZXRlY0FsbEV2ZW50KCRldmVudCknIFsobmdNb2RlbCldPSdzZWxlY3RBbGwnIFtpbmRldGVybWluYXRlXT0naW5kZXRlcm1pbmF0ZVN0YXRlJz4gPC9tYXQtY2hlY2tib3g+ICA8L3RoPlxuICAgICAgIDx0aFxuICAgICAgIFtjbGFzc109XCJjb2x1bW4uc3R5bGU/Lm1vdmlsXCJcbiAgICAgICAqbmdGb3I9J2xldCBjb2x1bW4gb2YgY29sdW1ucycgc2NvcGU9XCJjb2xcIlxuICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgPnt7Y29sdW1uLmxhYmVsfX08L3RoPlxuICAgICAgIDx0aCAqbmdJZj1cInNob3VsZFNob3dNZW51KClcIj48L3RoPlxuICAgICAgIDwvdHI+XG4gICAgIDwvdGhlYWQ+XG4gICAgIDx0Ym9keSBjbGFzcz0nbWF0LWVsZXZhdGlvbi16Myc+XG5cbiAgICAgICA8dHIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgKm5nRm9yPSdsZXQgcm93IG9mIGRhdGEnIChjbGljayk9J2NsaWNrT25Sb1cocm93KScgW2NsYXNzXT1cImNoZWNrYm94c1tyb3dbY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0/J3NlbGVjdGVkLXJvdyc6JydcIj5cbiAgICAgICAgPHRoICpuZ0lmPSdjb25maWd1cmF0aW9uLnNlbGVjdGFibGUnIHN0eWxlPSdqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPiA8bWF0LWNoZWNrYm94IGNvbG9yPSdwcmltYXJ5JyBbKG5nTW9kZWwpXT0nY2hlY2tib3hzW3Jvd1tjb25maWd1cmF0aW9uLnByaW1hcnlLZXldXScgKGNsaWNrKT0nY2xpY2tlZCgkZXZlbnQpJyAoY2hhbmdlKT0nc2VsZWN0aW9uKHJvdywgJGV2ZW50KSc+IDwvbWF0LWNoZWNrYm94PiAgPC90aD5cbiAgICAgICAgPHRoIFtjbGFzc109XCJjb2x1bW4uc3R5bGU/Lm1vdmlsXCIgW25nU3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgc2NvcGU9XCJyb3dcIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdmaWxlJyB8fCAoY29sdW1uLnJ1bGVzICYmIGV2YWx1YXRlUnVsZXMocm93W2NvbHVtbi5JRF0sIGNvbHVtbi5ydWxlcykpOyBlbHNlIGRpc3BsYXlWYWx1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbkZpbGVJY29uQ2xpY2soJGV2ZW50LCByb3dbY29sdW1uLklEXSlcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZVwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7XCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlWYWx1ZT5cbiAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5JRF0gfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90aD5cblxuICAgICAgICA8dGggKm5nSWY9XCJzaG91bGRTaG93TWVudSgpXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgb3ZlcmZsb3c6IHZpc2libGU7XCI+XG4gICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dNZW51KCRldmVudClcIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICBtYXRSaXBwbGVcbiAgICAgICAgICBjbGFzcz1cIm1lbnVfbW9yZV92ZXJ0XCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRXhhbXBsZSBkZWxldGUgaWNvblwiXG4gICAgICAgICAgPm1vcmVfdmVydDwvbWF0LWljb24+XG5cbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidG4gb2YgYnV0dG9uc0NvbmZpZ1wiID5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ0bi5jb25kaXRpb24oKVwiIChjbGljayk9XCJhY3Rpb24oYnRuLmFjdGlvbiwgcm93KVwiIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCIgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEge3tidG4uaWNvbn19IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZToxMjAlOyBtYXJnaW4tcmlnaHQ6IDEwcHhcIj48L2k+XG4gICAgICAgICAgICAgICAge3tidG4udG9vbHRpcH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8L3RoPlxuXG4gICAgICAgPC90cj5cblxuXG4gICAgIDwvdGJvZHk+XG5cbiAgIDwvdGFibGU+XG5cbiAgIDxkaXYgKm5nSWY9J2xlbmd0aCA9PSAwICYmIGRhdGEubGVuZ3RoID09IDAnIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+IDxzdHJvbmc+Tm8gc2UgZW5jb250csOzIGluZm9ybWFjacOzbjwvc3Ryb25nPjwvZGl2PlxuXG4gICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvckFjdGl2ZVwiXG4gICBbbGVuZ3RoXT1cImxlbmd0aFwiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgIChwYWdlKT1cImNoYW5nZVBhZ2UoJGV2ZW50KVwiPjwvbWF0LXBhZ2luYXRvcj5cblxuICA8L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGFibGUgbGV0LWZvbnRTaXplPVwiZm9udFNpemVcIiBsZXQtbWFyZ2luUmlnaHQ9XCJtYXJnaW5SaWdodFwiIHN0eWxlPSdmbGV4OjAuNTsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyc+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25zQ29uZmlnXCI+XG4gICAgPGRpdiAqbmdJZj1cImJ0bi5jb25kaXRpb25TaG93SGVhZGVyKClcIiAoY2xpY2spPVwiYWN0aW9uKGJ0bi5hY3Rpb24pXCIgbWF0VG9vbHRpcD1cInt7YnRuLnRvb2x0aXB9fVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIHt7YnRuLmljb259fSBidG4tYWNjaW9uXCIgW25nU3R5bGVdPVwieydmb250LXNpemUnOiBmb250U2l6ZSA/IGZvbnRTaXplIDogJzE3MCUnLCAnbWFyZ2luLXJpZ2h0JzogbWFyZ2luUmlnaHQgPyBtYXJnaW5SaWdodCA6ICcxNXB4J31cIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuIl19
|