ionic-vhframeworks 10.8.9 → 10.9.0

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.
@@ -1,2448 +0,0 @@
1
- export function checkSales_addProductAndSubsProduct(product, subProductArray) {
2
- //console.log('hello checkSales_addProductAndSubsProduct');
3
- let enable_return = true;
4
- let barcodes = new Array();
5
- if (product.manysize) { //manysize = true
6
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manysize', 'boolean'], ['name', 'string'], ['type', 'number'], ['position', 'string'], ['delete_hidden', 'boolean']];
7
- for (const p in product) {
8
- let check_duplicate = false;
9
- if (p.indexOf('webapp_') === -1) {
10
- for (const q in field_main) {
11
- if (p === field_main[q][0]) {
12
- check_duplicate = true;
13
- if (typeof product[p] != field_main[q][1]) {
14
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product', p);
15
- if (enable_return)
16
- return true;
17
- }
18
- }
19
- }
20
- }
21
- if (!check_duplicate) {
22
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product', p);
23
- if (enable_return)
24
- return true;
25
- }
26
- }
27
- for (const p in field_main) {
28
- let check_duplicate = false;
29
- for (const q in product) {
30
- if (field_main[p][0] === q) {
31
- check_duplicate = true;
32
- }
33
- }
34
- if (!check_duplicate) {
35
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product', p);
36
- if (enable_return)
37
- return true;
38
- }
39
- }
40
- for (let i = 0; i < subProductArray.length; i++) {
41
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean']];
42
- if (subProductArray[i].manylot) {
43
- field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'],
44
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object'], ['delete_hidden', 'boolean']];
45
- }
46
- else {
47
- for (const p in subProductArray[i]) {
48
- let check_duplicate = false;
49
- if (p.indexOf('webapp_') === -1) {
50
- for (const q in field_sub) {
51
- if (p === field_sub[q][0]) {
52
- check_duplicate = true;
53
- if (typeof subProductArray[i][p] != field_sub[q][1]) {
54
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray', p);
55
- if (enable_return)
56
- return true;
57
- }
58
- }
59
- }
60
- }
61
- if (!check_duplicate) {
62
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray', p);
63
- if (enable_return)
64
- return true;
65
- }
66
- }
67
- for (const p in field_sub) {
68
- let check_duplicate = false;
69
- for (const q in subProductArray[i]) {
70
- if (field_sub[p][0] === q) {
71
- check_duplicate = true;
72
- }
73
- }
74
- if (!check_duplicate) {
75
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray', p);
76
- if (enable_return)
77
- return true;
78
- }
79
- }
80
- if (subProductArray[i].units) {
81
- for (let j = 0; j < subProductArray[i].units.length; j++) {
82
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
83
- ['unit', 'string']];
84
- for (const p in subProductArray[i].units[j]) {
85
- let check_duplicate = false;
86
- if (p.indexOf('webapp_') === -1) {
87
- for (const q in field_unit) {
88
- if (p === field_unit[q][0]) {
89
- check_duplicate = true;
90
- if (typeof subProductArray[i].units[j][p] != field_unit[q][1]) {
91
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray(units)', p);
92
- if (enable_return)
93
- return true;
94
- }
95
- }
96
- }
97
- }
98
- if (!check_duplicate) {
99
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray(units)', p);
100
- if (enable_return)
101
- return true;
102
- }
103
- }
104
- if (subProductArray[i].units[j]['barcode'] != "")
105
- barcodes.push(subProductArray[i].units[j]['barcode']);
106
- for (const p in field_unit) {
107
- let check_duplicate = false;
108
- for (const q in subProductArray[i].units[j]) {
109
- if (field_unit[p][0] === q) {
110
- check_duplicate = true;
111
- }
112
- }
113
- if (!check_duplicate) {
114
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray(units)', p);
115
- if (enable_return)
116
- return true;
117
- }
118
- }
119
- }
120
- }
121
- if (subProductArray[i].lots) {
122
- for (let j = 0; j < subProductArray[i].lots.length; j++) {
123
- let field_lot = [['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
124
- for (const p in subProductArray[i].lots[j]) {
125
- let check_duplicate = false;
126
- if (p.indexOf('webapp_') === -1) {
127
- for (const q in field_lot) {
128
- if (p === field_lot[q][0]) {
129
- check_duplicate = true;
130
- if (typeof subProductArray[i].lots[j][p] != field_lot[q][1]) {
131
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray(lots)', p);
132
- if (enable_return)
133
- return true;
134
- }
135
- }
136
- }
137
- }
138
- if (!check_duplicate) {
139
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray(lots)', p);
140
- if (enable_return)
141
- return true;
142
- }
143
- }
144
- if (subProductArray[i].lots[j]['barcode'] != "")
145
- barcodes.push(subProductArray[i].lots[j]['barcode']);
146
- for (const p in field_lot) {
147
- let check_duplicate = false;
148
- for (const q in subProductArray[i].lots[j]) {
149
- if (field_lot[p][0] === q) {
150
- check_duplicate = true;
151
- }
152
- }
153
- if (!check_duplicate) {
154
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray(lots)', p);
155
- if (enable_return)
156
- return true;
157
- }
158
- }
159
- }
160
- }
161
- }
162
- }
163
- }
164
- else { //manysize = false
165
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'], ['position', 'string'],
166
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean']];
167
- if (product.manylot) {
168
- field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'], ['position', 'string'],
169
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'], ['delete_hidden', 'boolean'],
170
- ['days_import_warning', 'number'], ['lots', 'object']];
171
- }
172
- for (const p in product) {
173
- let check_duplicate = false;
174
- if (p.indexOf('webapp_') === -1) {
175
- for (const q in field_main) {
176
- if (p === field_main[q][0]) {
177
- check_duplicate = true;
178
- if (typeof product[p] != field_main[q][1]) {
179
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product', p);
180
- return false;
181
- }
182
- }
183
- }
184
- }
185
- if (!check_duplicate) {
186
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product', p);
187
- if (enable_return)
188
- return true;
189
- }
190
- }
191
- for (const p in field_main) {
192
- let check_duplicate = false;
193
- for (const q in product) {
194
- if (field_main[p][0] === q) {
195
- check_duplicate = true;
196
- }
197
- }
198
- if (!check_duplicate) {
199
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product', p);
200
- if (enable_return)
201
- return true;
202
- }
203
- }
204
- if (product.units) {
205
- for (let j = 0; j < product.units.length; j++) {
206
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'], ['unit', 'string']];
207
- for (const p in product.units[j]) {
208
- let check_duplicate = false;
209
- if (p.indexOf('webapp_') === -1) {
210
- for (const q in field_unit) {
211
- if (p === field_unit[q][0]) {
212
- check_duplicate = true;
213
- if (typeof product.units[j][p] != field_unit[q][1]) {
214
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product(units)', p);
215
- if (enable_return)
216
- return true;
217
- }
218
- }
219
- }
220
- }
221
- if (!check_duplicate) {
222
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product(units)', p);
223
- if (enable_return)
224
- return true;
225
- }
226
- }
227
- if (product.units[j]['barcode'] != "")
228
- barcodes.push(product.units[j]['barcode']);
229
- for (const p in field_unit) {
230
- let check_duplicate = false;
231
- for (const q in product.units[j]) {
232
- if (field_unit[p][0] === q) {
233
- check_duplicate = true;
234
- }
235
- }
236
- if (!check_duplicate) {
237
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product(units)', p);
238
- if (enable_return)
239
- return true;
240
- }
241
- }
242
- }
243
- }
244
- if (product.lots) {
245
- for (let j = 0; j < product.lots.length; j++) {
246
- let field_lot = [['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
247
- for (const p in product.lots[j]) {
248
- let check_duplicate = false;
249
- if (p.indexOf('webapp_') === -1) {
250
- for (const q in field_lot) {
251
- if (p === field_lot[q][0]) {
252
- check_duplicate = true;
253
- if (typeof product.lots[j][p] != field_lot[q][1]) {
254
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product(lots)', p);
255
- if (enable_return)
256
- return true;
257
- }
258
- }
259
- }
260
- }
261
- if (!check_duplicate) {
262
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product(lots)', p);
263
- if (enable_return)
264
- return true;
265
- }
266
- }
267
- if (product.lots[j]['barcode'] != "")
268
- barcodes.push(product.lots[j]['barcode']);
269
- for (const p in field_lot) {
270
- let check_duplicate = false;
271
- for (const q in product.lots[j]) {
272
- if (field_lot[p][0] === q) {
273
- check_duplicate = true;
274
- }
275
- }
276
- if (!check_duplicate) {
277
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product(lots)', p);
278
- if (enable_return)
279
- return true;
280
- }
281
- }
282
- }
283
- }
284
- }
285
- for (let i = 0; i < barcodes.length - 1; i++) {
286
- for (let j = i + 1; j < barcodes.length; j++) {
287
- if (barcodes[i] === barcodes[j]) {
288
- console.log('Vui lòng kiểm tra, bị trùng barcode');
289
- if (enable_return)
290
- return true;
291
- }
292
- }
293
- }
294
- return false;
295
- }
296
- export function checkSales_addSubProduct(id_product, subProduct) {
297
- let enable_return = true;
298
- if (!id_product || id_product === '') {
299
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
300
- if (enable_return)
301
- return true;
302
- }
303
- let barcodes = new Array();
304
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean']];
305
- if (subProduct.manylot) {
306
- field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'],
307
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object'], ['delete_hidden', 'boolean']];
308
- }
309
- else {
310
- for (const p in subProduct) {
311
- let check_duplicate = false;
312
- for (const q in field_sub) {
313
- if (p === field_sub[q][0]) {
314
- check_duplicate = true;
315
- if (typeof subProduct[p] != field_sub[q][1]) {
316
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct', p);
317
- if (enable_return)
318
- return true;
319
- }
320
- }
321
- }
322
- if (!check_duplicate) {
323
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct', p);
324
- if (enable_return)
325
- return true;
326
- }
327
- }
328
- for (const p in field_sub) {
329
- let check_duplicate = false;
330
- for (const q in subProduct) {
331
- if (field_sub[p][0] === q) {
332
- check_duplicate = true;
333
- }
334
- }
335
- if (!check_duplicate) {
336
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProduct', p);
337
- if (enable_return)
338
- return true;
339
- }
340
- }
341
- if (subProduct.units) {
342
- for (let j = 0; j < subProduct.units.length; j++) {
343
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
344
- ['unit', 'string']];
345
- for (const p in subProduct.units[j]) {
346
- let check_duplicate = false;
347
- for (const q in field_unit) {
348
- if (p === field_unit[q][0]) {
349
- check_duplicate = true;
350
- if (typeof subProduct.units[j][p] != field_unit[q][1]) {
351
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct(units)', p);
352
- if (enable_return)
353
- return true;
354
- }
355
- }
356
- }
357
- if (!check_duplicate) {
358
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(units)', p);
359
- if (enable_return)
360
- return true;
361
- }
362
- }
363
- if (subProduct.units[j]['barcode'] != "")
364
- barcodes.push(subProduct.units[j]['barcode']);
365
- for (const p in field_unit) {
366
- let check_duplicate = false;
367
- for (const q in subProduct.units[j]) {
368
- if (field_unit[p][0] === q) {
369
- check_duplicate = true;
370
- }
371
- }
372
- if (!check_duplicate) {
373
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(units)', p);
374
- if (enable_return)
375
- return true;
376
- }
377
- }
378
- }
379
- }
380
- if (subProduct.lots) {
381
- for (let j = 0; j < subProduct.lots.length; j++) {
382
- let field_lot = [['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
383
- for (const p in subProduct.lots[j]) {
384
- let check_duplicate = false;
385
- for (const q in field_lot) {
386
- if (p === field_lot[q][0]) {
387
- check_duplicate = true;
388
- if (typeof subProduct.lots[j][p] != field_lot[q][1]) {
389
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct(lots)', p);
390
- if (enable_return)
391
- return true;
392
- }
393
- }
394
- }
395
- if (!check_duplicate) {
396
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(lots)', p);
397
- if (enable_return)
398
- return true;
399
- }
400
- }
401
- if (subProduct.lots[j]['barcode'] != "")
402
- barcodes.push(subProduct.lots[j]['barcode']);
403
- for (const p in field_lot) {
404
- let check_duplicate = false;
405
- for (const q in subProduct.lots[j]) {
406
- if (field_lot[p][0] === q) {
407
- check_duplicate = true;
408
- }
409
- }
410
- if (!check_duplicate) {
411
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProduct(lots)', p);
412
- if (enable_return)
413
- return true;
414
- }
415
- }
416
- }
417
- }
418
- }
419
- return false;
420
- }
421
- export function checkSales_updateSubProduct(id_subproduct, value) {
422
- let enable_return = true;
423
- if (!id_subproduct || id_subproduct === '') {
424
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_subproduct');
425
- if (enable_return)
426
- return true;
427
- }
428
- let barcodes = new Array();
429
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'],
430
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object'], ['delete_hidden', 'boolean']];
431
- for (const p in value) {
432
- let check_duplicate = false;
433
- for (const q in field_sub) {
434
- if (p === field_sub[q][0]) {
435
- check_duplicate = true;
436
- if (typeof value[p] != field_sub[q][1]) {
437
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
438
- if (enable_return)
439
- return true;
440
- }
441
- }
442
- }
443
- if (!check_duplicate) {
444
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
445
- if (enable_return)
446
- return true;
447
- }
448
- }
449
- if (value.units) {
450
- for (let j = 0; j < value.units.length; j++) {
451
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
452
- ['unit', 'string']];
453
- for (const p in value.units[j]) {
454
- let check_duplicate = false;
455
- for (const q in field_unit) {
456
- if (p === field_unit[q][0]) {
457
- check_duplicate = true;
458
- if (typeof value.units[j][p] != field_unit[q][1]) {
459
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
460
- if (enable_return)
461
- return true;
462
- }
463
- }
464
- }
465
- if (!check_duplicate) {
466
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
467
- if (enable_return)
468
- return true;
469
- }
470
- }
471
- if (value.units[j]['barcode'] != "")
472
- barcodes.push(value.units[j]['barcode']);
473
- for (const p in field_unit) {
474
- let check_duplicate = false;
475
- for (const q in value.units[j]) {
476
- if (field_unit[p][0] === q) {
477
- check_duplicate = true;
478
- }
479
- }
480
- if (!check_duplicate) {
481
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
482
- if (enable_return)
483
- return true;
484
- }
485
- }
486
- }
487
- }
488
- if (value.lots) {
489
- for (let j = 0; j < value.lots.length; j++) {
490
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
491
- for (const p in value.lots[j]) {
492
- let check_duplicate = false;
493
- for (const q in field_lot) {
494
- if (p === field_lot[q][0]) {
495
- check_duplicate = true;
496
- if (typeof value.lots[j][p] != field_lot[q][1]) {
497
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
498
- if (enable_return)
499
- return true;
500
- }
501
- }
502
- }
503
- if (!check_duplicate) {
504
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
505
- if (enable_return)
506
- return true;
507
- }
508
- }
509
- if (value.lots[j]['barcode'] != "")
510
- barcodes.push(value.lots[j]['barcode']);
511
- for (const p in field_lot) {
512
- let check_duplicate = false;
513
- for (const q in value.lots[j]) {
514
- if (field_lot[p][0] === q) {
515
- check_duplicate = true;
516
- }
517
- }
518
- if (!check_duplicate) {
519
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
520
- if (enable_return)
521
- return true;
522
- }
523
- }
524
- }
525
- }
526
- return false;
527
- }
528
- export function checkSales_updateProduct_Type3(id_product, value) {
529
- let enable_return = true;
530
- if (!id_product || id_product === '') {
531
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
532
- if (enable_return)
533
- return true;
534
- }
535
- let barcodes = new Array();
536
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
537
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
538
- ['days_import_warning', 'number'], ['lots', 'object'], ['position', 'string'], ['delete_hidden', 'boolean'],
539
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
540
- for (const p in value) {
541
- let check_duplicate = false;
542
- for (const q in field_main) {
543
- if (p === field_main[q][0]) {
544
- check_duplicate = true;
545
- if (typeof value[p] != field_main[q][1]) {
546
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
547
- if (enable_return)
548
- return true;
549
- }
550
- }
551
- }
552
- if (!check_duplicate) {
553
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
554
- if (enable_return)
555
- return true;
556
- }
557
- }
558
- if (value.units) {
559
- //console.log('----value', value)
560
- for (let j = 0; j < value.units.length; j++) {
561
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
562
- ['unit', 'string']];
563
- for (const p in value.units[j]) {
564
- let check_duplicate = false;
565
- for (const q in field_unit) {
566
- if (p === field_unit[q][0]) {
567
- check_duplicate = true;
568
- if (typeof value.units[j][p] != field_unit[q][1]) {
569
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
570
- if (enable_return)
571
- return true;
572
- }
573
- }
574
- }
575
- if (!check_duplicate) {
576
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
577
- if (enable_return)
578
- return true;
579
- }
580
- }
581
- if (value.units[j]['barcode'] != "")
582
- barcodes.push(value.units[j]['barcode']);
583
- for (const p in field_unit) {
584
- let check_duplicate = false;
585
- for (const q in value.units[j]) {
586
- if (field_unit[p][0] === q) {
587
- check_duplicate = true;
588
- }
589
- }
590
- if (!check_duplicate) {
591
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
592
- if (enable_return)
593
- return true;
594
- }
595
- }
596
- }
597
- }
598
- if (value.lots) {
599
- for (let j = 0; j < value.lots.length; j++) {
600
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
601
- for (const p in value.lots[j]) {
602
- let check_duplicate = false;
603
- for (const q in field_lot) {
604
- if (p === field_lot[q][0]) {
605
- check_duplicate = true;
606
- if (typeof value.lots[j][p] != field_lot[q][1]) {
607
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
608
- if (enable_return)
609
- return true;
610
- }
611
- }
612
- }
613
- if (!check_duplicate) {
614
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
615
- if (enable_return)
616
- return true;
617
- }
618
- }
619
- if (value.lots[j]['barcode'] != "")
620
- barcodes.push(value.lots[j]['barcode']);
621
- for (const p in field_lot) {
622
- let check_duplicate = false;
623
- for (const q in value.lots[j]) {
624
- if (field_lot[p][0] === q) {
625
- check_duplicate = true;
626
- }
627
- }
628
- if (!check_duplicate) {
629
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
630
- if (enable_return)
631
- return true;
632
- }
633
- }
634
- }
635
- }
636
- return false;
637
- }
638
- export function checkSales_updateProduct_Type3_fw(id_product, value) {
639
- //console.log('--value', value);
640
- let enable_return = true;
641
- if (!id_product || id_product === '') {
642
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
643
- if (enable_return)
644
- return true;
645
- }
646
- let barcodes = new Array();
647
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
648
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
649
- ['quantity', 'number'], ['quantity_branch', 'object'], ['delete_hidden', 'boolean'],
650
- ['days_import_warning', 'number'], ['lots', 'object'], ['position', 'string'],
651
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
652
- for (const p in value) {
653
- let check_duplicate = false;
654
- for (const q in field_main) {
655
- if (p === field_main[q][0]) {
656
- check_duplicate = true;
657
- if (typeof value[p] != field_main[q][1]) {
658
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
659
- if (enable_return)
660
- return true;
661
- }
662
- }
663
- }
664
- if (!check_duplicate) {
665
- if (value[p]['inventory'] === undefined) {
666
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
667
- if (enable_return)
668
- return true;
669
- }
670
- }
671
- }
672
- if (value.units) {
673
- //console.log('----value', value)
674
- for (let j = 0; j < value.units.length; j++) {
675
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
676
- ['unit', 'string']];
677
- for (const p in value.units[j]) {
678
- let check_duplicate = false;
679
- for (const q in field_unit) {
680
- if (p === field_unit[q][0]) {
681
- check_duplicate = true;
682
- if (typeof value.units[j][p] != field_unit[q][1]) {
683
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
684
- if (enable_return)
685
- return true;
686
- }
687
- }
688
- }
689
- if (!check_duplicate) {
690
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
691
- if (enable_return)
692
- return true;
693
- }
694
- }
695
- if (value.units[j]['barcode'] != "")
696
- barcodes.push(value.units[j]['barcode']);
697
- for (const p in field_unit) {
698
- let check_duplicate = false;
699
- for (const q in value.units[j]) {
700
- if (field_unit[p][0] === q) {
701
- check_duplicate = true;
702
- }
703
- }
704
- if (!check_duplicate) {
705
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
706
- if (enable_return)
707
- return true;
708
- }
709
- }
710
- }
711
- }
712
- if (value.lots) {
713
- for (let j = 0; j < value.lots.length; j++) {
714
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string'], ['quantity', 'number'], ['quantity_branch', 'object']];
715
- for (const p in value.lots[j]) {
716
- let check_duplicate = false;
717
- for (const q in field_lot) {
718
- if (p === field_lot[q][0]) {
719
- check_duplicate = true;
720
- if ((p === 'date_exp') || (p === 'date_mfg')) {
721
- value.lots[j][p] = new Date(value.lots[j][p]);
722
- }
723
- if (typeof value.lots[j][p] != field_lot[q][1]) {
724
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
725
- if (enable_return)
726
- return true;
727
- }
728
- }
729
- }
730
- if (!check_duplicate) {
731
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
732
- if (enable_return)
733
- return true;
734
- }
735
- }
736
- if (value.lots[j]['barcode'] != "")
737
- barcodes.push(value.lots[j]['barcode']);
738
- for (const p in field_lot) {
739
- let check_duplicate = false;
740
- for (const q in value.lots[j]) {
741
- if (field_lot[p][0] === q) {
742
- check_duplicate = true;
743
- }
744
- }
745
- if (!check_duplicate) {
746
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
747
- if (enable_return)
748
- return true;
749
- }
750
- }
751
- }
752
- }
753
- return false;
754
- }
755
- export function checkSales_updateProduct_Type2(id_product, value) {
756
- let enable_return = true;
757
- if (!id_product || id_product === '') {
758
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
759
- if (enable_return)
760
- return true;
761
- }
762
- let barcodes = new Array();
763
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
764
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
765
- ['days_import_warning', 'number'], ['lots', 'object'], ['delete_hidden', 'boolean'],
766
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
767
- for (const p in value) {
768
- let check_duplicate = false;
769
- for (const q in field_main) {
770
- if (p === field_main[q][0]) {
771
- check_duplicate = true;
772
- if (typeof value[p] != field_main[q][1]) {
773
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
774
- if (enable_return)
775
- return true;
776
- }
777
- }
778
- }
779
- if (!check_duplicate) {
780
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
781
- if (enable_return)
782
- return true;
783
- }
784
- }
785
- if (value.units) {
786
- //console.log('----value', value)
787
- for (let j = 0; j < value.units.length; j++) {
788
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
789
- ['unit', 'string']];
790
- for (const p in value.units[j]) {
791
- let check_duplicate = false;
792
- for (const q in field_unit) {
793
- if (p === field_unit[q][0]) {
794
- check_duplicate = true;
795
- if (typeof value.units[j][p] != field_unit[q][1]) {
796
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
797
- if (enable_return)
798
- return true;
799
- }
800
- }
801
- }
802
- if (!check_duplicate) {
803
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
804
- if (enable_return)
805
- return true;
806
- }
807
- }
808
- if (value.units[j]['barcode'] != "")
809
- barcodes.push(value.units[j]['barcode']);
810
- for (const p in field_unit) {
811
- let check_duplicate = false;
812
- for (const q in value.units[j]) {
813
- if (field_unit[p][0] === q) {
814
- check_duplicate = true;
815
- }
816
- }
817
- if (!check_duplicate) {
818
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
819
- if (enable_return)
820
- return true;
821
- }
822
- }
823
- }
824
- }
825
- if (value.lots) {
826
- for (let j = 0; j < value.lots.length; j++) {
827
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
828
- for (const p in value.lots[j]) {
829
- let check_duplicate = false;
830
- for (const q in field_lot) {
831
- if (p === field_lot[q][0]) {
832
- check_duplicate = true;
833
- if (typeof value.lots[j][p] != field_lot[q][1]) {
834
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
835
- if (enable_return)
836
- return true;
837
- }
838
- }
839
- }
840
- if (!check_duplicate) {
841
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
842
- if (enable_return)
843
- return true;
844
- }
845
- }
846
- if (value.lots[j]['barcode'] != "")
847
- barcodes.push(value.lots[j]['barcode']);
848
- for (const p in field_lot) {
849
- let check_duplicate = false;
850
- for (const q in value.lots[j]) {
851
- if (field_lot[p][0] === q) {
852
- check_duplicate = true;
853
- }
854
- }
855
- if (!check_duplicate) {
856
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
857
- if (enable_return)
858
- return true;
859
- }
860
- }
861
- }
862
- }
863
- return false;
864
- }
865
- export function checkSales_updateProduct_Type5(id_product, value) {
866
- let enable_return = true;
867
- if (!id_product || id_product === '') {
868
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
869
- if (enable_return)
870
- return true;
871
- }
872
- let barcodes = new Array();
873
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
874
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
875
- ['days_import_warning', 'number'], ['lots', 'object'], ['describe', 'string'], ['delete_hidden', 'boolean'],
876
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
877
- for (const p in value) {
878
- let check_duplicate = false;
879
- for (const q in field_main) {
880
- if (p === field_main[q][0]) {
881
- check_duplicate = true;
882
- if (typeof value[p] != field_main[q][1]) {
883
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
884
- if (enable_return)
885
- return true;
886
- }
887
- }
888
- }
889
- if (!check_duplicate) {
890
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
891
- if (enable_return)
892
- return true;
893
- }
894
- }
895
- if (value.units) {
896
- for (let j = 0; j < value.units.length; j++) {
897
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['ratio', 'number'], ['unit', 'string']];
898
- for (const p in value.units[j]) {
899
- let check_duplicate = false;
900
- for (const q in field_unit) {
901
- if (p === field_unit[q][0]) {
902
- check_duplicate = true;
903
- if (typeof value.units[j][p] != field_unit[q][1]) {
904
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
905
- if (enable_return)
906
- return true;
907
- }
908
- }
909
- }
910
- if (!check_duplicate) {
911
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
912
- if (enable_return)
913
- return true;
914
- }
915
- }
916
- if (value.units[j]['barcode'] != "")
917
- barcodes.push(value.units[j]['barcode']);
918
- for (const p in field_unit) {
919
- let check_duplicate = false;
920
- for (const q in value.units[j]) {
921
- if (field_unit[p][0] === q) {
922
- check_duplicate = true;
923
- }
924
- }
925
- if (!check_duplicate) {
926
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
927
- if (enable_return)
928
- return true;
929
- }
930
- }
931
- }
932
- }
933
- if (value.lots) {
934
- for (let j = 0; j < value.lots.length; j++) {
935
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
936
- for (const p in value.lots[j]) {
937
- let check_duplicate = false;
938
- for (const q in field_lot) {
939
- if (p === field_lot[q][0]) {
940
- check_duplicate = true;
941
- if (typeof value.lots[j][p] != field_lot[q][1]) {
942
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
943
- if (enable_return)
944
- return true;
945
- }
946
- }
947
- }
948
- if (!check_duplicate) {
949
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
950
- if (enable_return)
951
- return true;
952
- }
953
- }
954
- if (value.lots[j]['barcode'] != "")
955
- barcodes.push(value.lots[j]['barcode']);
956
- for (const p in field_lot) {
957
- let check_duplicate = false;
958
- for (const q in value.lots[j]) {
959
- if (field_lot[p][0] === q) {
960
- check_duplicate = true;
961
- }
962
- }
963
- if (!check_duplicate) {
964
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
965
- if (enable_return)
966
- return true;
967
- }
968
- }
969
- }
970
- }
971
- return false;
972
- }
973
- export function checkCafe_addProductAndSubsProduct_type1(product, subProductArray) {
974
- //console.log('hello checkSales_addProductAndSubsProduct');
975
- //delete product.price2;
976
- //delete product.unit;
977
- let enable_return = true;
978
- let barcodes = new Array();
979
- if (product.manysize) { //manysize = true
980
- let field_main = [['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manysize', 'boolean'], ['name', 'string'], ['type', 'number'],
981
- ['properties', 'object'], ['toppings', 'object'], ['time_warning', 'number'], ['describe', 'string'], ['delete_hidden', 'boolean']];
982
- for (const p in product) {
983
- let check_duplicate = false;
984
- if (p.indexOf('webapp_') === -1) {
985
- for (const q in field_main) {
986
- if (p === field_main[q][0]) {
987
- check_duplicate = true;
988
- if (typeof product[p] != field_main[q][1]) {
989
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product', p);
990
- if (enable_return)
991
- return true;
992
- }
993
- }
994
- }
995
- }
996
- if (!check_duplicate) {
997
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product', p);
998
- if (enable_return)
999
- return true;
1000
- }
1001
- }
1002
- for (const p in field_main) {
1003
- let check_duplicate = false;
1004
- for (const q in product) {
1005
- if (field_main[p][0] === q) {
1006
- check_duplicate = true;
1007
- }
1008
- }
1009
- if (!check_duplicate) {
1010
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product', field_main[p][0]);
1011
- if (enable_return)
1012
- return true;
1013
- }
1014
- }
1015
- for (let i = 0; i < subProductArray.length; i++) {
1016
- let field_sub = [['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['delete_hidden', 'boolean']];
1017
- for (const p in subProductArray[i]) {
1018
- let check_duplicate = false;
1019
- if (p.indexOf('webapp_') === -1) {
1020
- for (const q in field_sub) {
1021
- if (p === field_sub[q][0]) {
1022
- check_duplicate = true;
1023
- if (typeof subProductArray[i][p] != field_sub[q][1]) {
1024
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray', p);
1025
- if (enable_return)
1026
- return true;
1027
- }
1028
- }
1029
- }
1030
- }
1031
- if (!check_duplicate) {
1032
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray', p);
1033
- if (enable_return)
1034
- return true;
1035
- }
1036
- }
1037
- for (const p in field_sub) {
1038
- let check_duplicate = false;
1039
- for (const q in subProductArray[i]) {
1040
- if (field_sub[p][0] === q) {
1041
- check_duplicate = true;
1042
- }
1043
- }
1044
- if (!check_duplicate) {
1045
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray', field_sub[p][0]);
1046
- if (enable_return)
1047
- return true;
1048
- }
1049
- }
1050
- if (subProductArray[i].units) {
1051
- for (let j = 0; j < subProductArray[i].units.length; j++) {
1052
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
1053
- ['unit', 'string']];
1054
- for (const p in subProductArray[i].units[j]) {
1055
- let check_duplicate = false;
1056
- if (p.indexOf('webapp_') === -1) {
1057
- for (const q in field_unit) {
1058
- if (p === field_unit[q][0]) {
1059
- check_duplicate = true;
1060
- if (typeof subProductArray[i].units[j][p] != field_unit[q][1]) {
1061
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray(units)', p);
1062
- if (enable_return)
1063
- return true;
1064
- }
1065
- }
1066
- }
1067
- }
1068
- if (!check_duplicate) {
1069
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray(units)', p);
1070
- if (enable_return)
1071
- return true;
1072
- }
1073
- }
1074
- if (subProductArray[i].units[j]['barcode'] != "")
1075
- barcodes.push(subProductArray[i].units[j]['barcode']);
1076
- for (const p in field_unit) {
1077
- let check_duplicate = false;
1078
- for (const q in subProductArray[i].units[j]) {
1079
- if (field_unit[p][0] === q) {
1080
- check_duplicate = true;
1081
- }
1082
- }
1083
- if (!check_duplicate) {
1084
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray(units)', field_unit[p][0]);
1085
- if (enable_return)
1086
- return true;
1087
- }
1088
- }
1089
- }
1090
- }
1091
- }
1092
- }
1093
- else { //manysize = false
1094
- let field_main = [['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manysize', 'boolean'], ['name', 'string'], ['type', 'number'],
1095
- ['properties', 'object'], ['toppings', 'object'], ['time_warning', 'number'], ['describe', 'string'],
1096
- ['selling', 'boolean'], ['units', 'object'], ['delete_hidden', 'boolean']];
1097
- for (const p in product) {
1098
- let check_duplicate = false;
1099
- if (p.indexOf('webapp_') === -1) {
1100
- for (const q in field_main) {
1101
- if (p === field_main[q][0]) {
1102
- check_duplicate = true;
1103
- if (typeof product[p] != field_main[q][1]) {
1104
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product', p);
1105
- return false;
1106
- }
1107
- }
1108
- }
1109
- }
1110
- if (!check_duplicate) {
1111
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product', p);
1112
- if (enable_return)
1113
- return true;
1114
- }
1115
- }
1116
- for (const p in field_main) {
1117
- let check_duplicate = false;
1118
- for (const q in product) {
1119
- if (field_main[p][0] === q) {
1120
- check_duplicate = true;
1121
- }
1122
- }
1123
- if (!check_duplicate) {
1124
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product', field_main[p][0]);
1125
- if (enable_return)
1126
- return true;
1127
- }
1128
- }
1129
- if (product.units) {
1130
- for (let j = 0; j < product.units.length; j++) {
1131
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'], ['unit', 'string']];
1132
- for (const p in product.units[j]) {
1133
- let check_duplicate = false;
1134
- if (p.indexOf('webapp_') === -1) {
1135
- for (const q in field_unit) {
1136
- if (p === field_unit[q][0]) {
1137
- check_duplicate = true;
1138
- if (typeof product.units[j][p] != field_unit[q][1]) {
1139
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product(units)', p);
1140
- if (enable_return)
1141
- return true;
1142
- }
1143
- }
1144
- }
1145
- }
1146
- if (!check_duplicate) {
1147
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product(units)', p);
1148
- if (enable_return)
1149
- return true;
1150
- }
1151
- }
1152
- if (product.units[j]['barcode'] != "")
1153
- barcodes.push(product.units[j]['barcode']);
1154
- for (const p in field_unit) {
1155
- let check_duplicate = false;
1156
- for (const q in product.units[j]) {
1157
- if (field_unit[p][0] === q) {
1158
- check_duplicate = true;
1159
- }
1160
- }
1161
- if (!check_duplicate) {
1162
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product(units)', field_unit[p][0]);
1163
- if (enable_return)
1164
- return true;
1165
- }
1166
- }
1167
- }
1168
- }
1169
- }
1170
- for (let i = 0; i < barcodes.length - 1; i++) {
1171
- for (let j = i + 1; j < barcodes.length; j++) {
1172
- if (barcodes[i] === barcodes[j]) {
1173
- console.log('Vui lòng kiểm tra, bị trùng barcode');
1174
- if (enable_return)
1175
- return true;
1176
- }
1177
- }
1178
- }
1179
- return false;
1180
- }
1181
- export function checkCafe_addProductAndSubsProduct_type3(product, subProductArray) {
1182
- //console.log('hello checkSales_addProductAndSubsProduct');
1183
- delete product.price2;
1184
- let enable_return = true;
1185
- let barcodes = new Array();
1186
- if (product.manysize) { //manysize = true
1187
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manysize', 'boolean'], ['name', 'string'], ['type', 'number'], ['delete_hidden', 'boolean']];
1188
- for (const p in product) {
1189
- let check_duplicate = false;
1190
- if (p.indexOf('webapp_') === -1) {
1191
- for (const q in field_main) {
1192
- if (p === field_main[q][0]) {
1193
- check_duplicate = true;
1194
- if (typeof product[p] != field_main[q][1]) {
1195
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product', p);
1196
- if (enable_return)
1197
- return true;
1198
- }
1199
- }
1200
- }
1201
- }
1202
- if (!check_duplicate) {
1203
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product', p);
1204
- if (enable_return)
1205
- return true;
1206
- }
1207
- }
1208
- for (const p in field_main) {
1209
- let check_duplicate = false;
1210
- for (const q in product) {
1211
- if (field_main[p][0] === q) {
1212
- check_duplicate = true;
1213
- }
1214
- }
1215
- if (!check_duplicate) {
1216
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product', field_main[p][0]);
1217
- if (enable_return)
1218
- return true;
1219
- }
1220
- }
1221
- for (let i = 0; i < subProductArray.length; i++) {
1222
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean']];
1223
- if (subProductArray[i].manylot) {
1224
- field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean'],
1225
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object']];
1226
- }
1227
- for (const p in subProductArray[i]) {
1228
- let check_duplicate = false;
1229
- if (p.indexOf('webapp_') === -1) {
1230
- for (const q in field_sub) {
1231
- if (p === field_sub[q][0]) {
1232
- check_duplicate = true;
1233
- if (typeof subProductArray[i][p] != field_sub[q][1]) {
1234
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray', p);
1235
- if (enable_return)
1236
- return true;
1237
- }
1238
- }
1239
- }
1240
- }
1241
- if (!check_duplicate) {
1242
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray', p);
1243
- if (enable_return)
1244
- return true;
1245
- }
1246
- }
1247
- for (const p in field_sub) {
1248
- let check_duplicate = false;
1249
- for (const q in subProductArray[i]) {
1250
- if (field_sub[p][0] === q) {
1251
- check_duplicate = true;
1252
- }
1253
- }
1254
- if (!check_duplicate) {
1255
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray', field_sub[p][0]);
1256
- if (enable_return)
1257
- return true;
1258
- }
1259
- }
1260
- if (subProductArray[i].units) {
1261
- for (let j = 0; j < subProductArray[i].units.length; j++) {
1262
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
1263
- ['unit', 'string']];
1264
- for (const p in subProductArray[i].units[j]) {
1265
- let check_duplicate = false;
1266
- if (p.indexOf('webapp_') === -1) {
1267
- for (const q in field_unit) {
1268
- if (p === field_unit[q][0]) {
1269
- check_duplicate = true;
1270
- if (typeof subProductArray[i].units[j][p] != field_unit[q][1]) {
1271
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray(units)', p);
1272
- if (enable_return)
1273
- return true;
1274
- }
1275
- }
1276
- }
1277
- }
1278
- if (!check_duplicate) {
1279
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray(units)', p);
1280
- if (enable_return)
1281
- return true;
1282
- }
1283
- }
1284
- if (subProductArray[i].units[j]['barcode'] != "")
1285
- barcodes.push(subProductArray[i].units[j]['barcode']);
1286
- for (const p in field_unit) {
1287
- let check_duplicate = false;
1288
- for (const q in subProductArray[i].units[j]) {
1289
- if (field_unit[p][0] === q) {
1290
- check_duplicate = true;
1291
- }
1292
- }
1293
- if (!check_duplicate) {
1294
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray(units)', p);
1295
- if (enable_return)
1296
- return true;
1297
- }
1298
- }
1299
- }
1300
- }
1301
- if (subProductArray[i].lots) {
1302
- for (let j = 0; j < subProductArray[i].lots.length; j++) {
1303
- let field_lot = [['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
1304
- for (const p in subProductArray[i].lots[j]) {
1305
- let check_duplicate = false;
1306
- if (p.indexOf('webapp_') === -1) {
1307
- for (const q in field_lot) {
1308
- if (p === field_lot[q][0]) {
1309
- check_duplicate = true;
1310
- if (typeof subProductArray[i].lots[j][p] != field_lot[q][1]) {
1311
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProductArray(lots)', p);
1312
- if (enable_return)
1313
- return true;
1314
- }
1315
- }
1316
- }
1317
- }
1318
- if (!check_duplicate) {
1319
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProductArray(lots)', p);
1320
- if (enable_return)
1321
- return true;
1322
- }
1323
- }
1324
- if (subProductArray[i].lots[j]['barcode'] != "")
1325
- barcodes.push(subProductArray[i].lots[j]['barcode']);
1326
- for (const p in field_lot) {
1327
- let check_duplicate = false;
1328
- for (const q in subProductArray[i].lots[j]) {
1329
- if (field_lot[p][0] === q) {
1330
- check_duplicate = true;
1331
- }
1332
- }
1333
- if (!check_duplicate) {
1334
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProductArray(lots)', p);
1335
- if (enable_return)
1336
- return true;
1337
- }
1338
- }
1339
- }
1340
- }
1341
- }
1342
- }
1343
- else { //manysize = false
1344
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
1345
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean']];
1346
- if (product.manylot) {
1347
- field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
1348
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean'],
1349
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object']];
1350
- }
1351
- for (const p in product) {
1352
- let check_duplicate = false;
1353
- if (p.indexOf('webapp_') === -1) {
1354
- for (const q in field_main) {
1355
- if (p === field_main[q][0]) {
1356
- check_duplicate = true;
1357
- if (typeof product[p] != field_main[q][1]) {
1358
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product', p);
1359
- return false;
1360
- }
1361
- }
1362
- }
1363
- }
1364
- if (!check_duplicate) {
1365
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product', p);
1366
- if (enable_return)
1367
- return true;
1368
- }
1369
- }
1370
- for (const p in field_main) {
1371
- let check_duplicate = false;
1372
- for (const q in product) {
1373
- if (field_main[p][0] === q) {
1374
- check_duplicate = true;
1375
- }
1376
- }
1377
- if (!check_duplicate) {
1378
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product', field_main[p][0]);
1379
- if (enable_return)
1380
- return true;
1381
- }
1382
- }
1383
- if (product.units) {
1384
- for (let j = 0; j < product.units.length; j++) {
1385
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'], ['unit', 'string']];
1386
- for (const p in product.units[j]) {
1387
- let check_duplicate = false;
1388
- if (p.indexOf('webapp_') === -1) {
1389
- for (const q in field_unit) {
1390
- if (p === field_unit[q][0]) {
1391
- check_duplicate = true;
1392
- if (typeof product.units[j][p] != field_unit[q][1]) {
1393
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product(units)', p);
1394
- if (enable_return)
1395
- return true;
1396
- }
1397
- }
1398
- }
1399
- }
1400
- if (!check_duplicate) {
1401
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product(units)', p);
1402
- if (enable_return)
1403
- return true;
1404
- }
1405
- }
1406
- if (product.units[j]['barcode'] != "")
1407
- barcodes.push(product.units[j]['barcode']);
1408
- for (const p in field_unit) {
1409
- let check_duplicate = false;
1410
- for (const q in product.units[j]) {
1411
- if (field_unit[p][0] === q) {
1412
- check_duplicate = true;
1413
- }
1414
- }
1415
- if (!check_duplicate) {
1416
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product(units)', field_unit[p][0]);
1417
- if (enable_return)
1418
- return true;
1419
- }
1420
- }
1421
- }
1422
- }
1423
- if (product.lots) {
1424
- for (let j = 0; j < product.lots.length; j++) {
1425
- let field_lot = [['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
1426
- for (const p in product.lots[j]) {
1427
- let check_duplicate = false;
1428
- if (p.indexOf('webapp_') === -1) {
1429
- for (const q in field_lot) {
1430
- if (p === field_lot[q][0]) {
1431
- check_duplicate = true;
1432
- if (typeof product.lots[j][p] != field_lot[q][1]) {
1433
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào product(lots)', p);
1434
- if (enable_return)
1435
- return true;
1436
- }
1437
- }
1438
- }
1439
- }
1440
- if (!check_duplicate) {
1441
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào product(lots)', p);
1442
- if (enable_return)
1443
- return true;
1444
- }
1445
- }
1446
- if (product.lots[j]['barcode'] != "")
1447
- barcodes.push(product.lots[j]['barcode']);
1448
- for (const p in field_lot) {
1449
- let check_duplicate = false;
1450
- for (const q in product.lots[j]) {
1451
- if (field_lot[p][0] === q) {
1452
- check_duplicate = true;
1453
- }
1454
- }
1455
- if (!check_duplicate) {
1456
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào product(lots)', field_lot[p][0]);
1457
- if (enable_return)
1458
- return true;
1459
- }
1460
- }
1461
- }
1462
- }
1463
- }
1464
- for (let i = 0; i < barcodes.length - 1; i++) {
1465
- for (let j = i + 1; j < barcodes.length; j++) {
1466
- if (barcodes[i] === barcodes[j]) {
1467
- console.log('Vui lòng kiểm tra, bị trùng barcode');
1468
- if (enable_return)
1469
- return true;
1470
- }
1471
- }
1472
- }
1473
- return false;
1474
- }
1475
- export function checkCafe_addSubProduct_type1(id_product, subProduct) {
1476
- let enable_return = true;
1477
- if (!id_product || id_product === '') {
1478
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
1479
- if (enable_return)
1480
- return true;
1481
- }
1482
- let barcodes = new Array();
1483
- let field_sub = [['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['delete_hidden', 'boolean']];
1484
- for (const p in subProduct) {
1485
- let check_duplicate = false;
1486
- for (const q in field_sub) {
1487
- if (p === field_sub[q][0]) {
1488
- check_duplicate = true;
1489
- if (typeof subProduct[p] != field_sub[q][1]) {
1490
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct', p);
1491
- if (enable_return)
1492
- return true;
1493
- }
1494
- }
1495
- }
1496
- if (!check_duplicate) {
1497
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct', p);
1498
- if (enable_return)
1499
- return true;
1500
- }
1501
- }
1502
- for (const p in field_sub) {
1503
- let check_duplicate = false;
1504
- for (const q in subProduct) {
1505
- if (field_sub[p][0] === q) {
1506
- check_duplicate = true;
1507
- }
1508
- }
1509
- if (!check_duplicate) {
1510
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProduct', p);
1511
- if (enable_return)
1512
- return true;
1513
- }
1514
- }
1515
- if (subProduct.units) {
1516
- for (let j = 0; j < subProduct.units.length; j++) {
1517
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
1518
- ['unit', 'string']];
1519
- for (const p in subProduct.units[j]) {
1520
- let check_duplicate = false;
1521
- for (const q in field_unit) {
1522
- if (p === field_unit[q][0]) {
1523
- check_duplicate = true;
1524
- if (typeof subProduct.units[j][p] != field_unit[q][1]) {
1525
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct(units)', p);
1526
- if (enable_return)
1527
- return true;
1528
- }
1529
- }
1530
- }
1531
- if (!check_duplicate) {
1532
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(units)', p);
1533
- if (enable_return)
1534
- return true;
1535
- }
1536
- }
1537
- if (subProduct.units[j]['barcode'] != "")
1538
- barcodes.push(subProduct.units[j]['barcode']);
1539
- for (const p in field_unit) {
1540
- let check_duplicate = false;
1541
- for (const q in subProduct.units[j]) {
1542
- if (field_unit[p][0] === q) {
1543
- check_duplicate = true;
1544
- }
1545
- }
1546
- if (!check_duplicate) {
1547
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(units)', p);
1548
- if (enable_return)
1549
- return true;
1550
- }
1551
- }
1552
- }
1553
- }
1554
- return false;
1555
- }
1556
- export function checkCafe_addSubProduct_type3(id_product, subProduct) {
1557
- let enable_return = true;
1558
- if (!id_product || id_product === '') {
1559
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
1560
- if (enable_return)
1561
- return true;
1562
- }
1563
- let barcodes = new Array();
1564
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean']];
1565
- if (subProduct.manylot) {
1566
- field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean'],
1567
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object']];
1568
- }
1569
- else {
1570
- for (const p in subProduct) {
1571
- let check_duplicate = false;
1572
- for (const q in field_sub) {
1573
- if (p === field_sub[q][0]) {
1574
- check_duplicate = true;
1575
- if (typeof subProduct[p] != field_sub[q][1]) {
1576
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct', p);
1577
- if (enable_return)
1578
- return true;
1579
- }
1580
- }
1581
- }
1582
- if (!check_duplicate) {
1583
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct', p);
1584
- if (enable_return)
1585
- return true;
1586
- }
1587
- }
1588
- for (const p in field_sub) {
1589
- let check_duplicate = false;
1590
- for (const q in subProduct) {
1591
- if (field_sub[p][0] === q) {
1592
- check_duplicate = true;
1593
- }
1594
- }
1595
- if (!check_duplicate) {
1596
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProduct', p);
1597
- if (enable_return)
1598
- return true;
1599
- }
1600
- }
1601
- if (subProduct.units) {
1602
- for (let j = 0; j < subProduct.units.length; j++) {
1603
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
1604
- ['unit', 'string']];
1605
- for (const p in subProduct.units[j]) {
1606
- let check_duplicate = false;
1607
- for (const q in field_unit) {
1608
- if (p === field_unit[q][0]) {
1609
- check_duplicate = true;
1610
- if (typeof subProduct.units[j][p] != field_unit[q][1]) {
1611
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct(units)', p);
1612
- if (enable_return)
1613
- return true;
1614
- }
1615
- }
1616
- }
1617
- if (!check_duplicate) {
1618
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(units)', p);
1619
- if (enable_return)
1620
- return true;
1621
- }
1622
- }
1623
- if (subProduct.units[j]['barcode'] != "")
1624
- barcodes.push(subProduct.units[j]['barcode']);
1625
- for (const p in field_unit) {
1626
- let check_duplicate = false;
1627
- for (const q in subProduct.units[j]) {
1628
- if (field_unit[p][0] === q) {
1629
- check_duplicate = true;
1630
- }
1631
- }
1632
- if (!check_duplicate) {
1633
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(units)', p);
1634
- if (enable_return)
1635
- return true;
1636
- }
1637
- }
1638
- }
1639
- }
1640
- if (subProduct.lots) {
1641
- for (let j = 0; j < subProduct.lots.length; j++) {
1642
- let field_lot = [['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
1643
- for (const p in subProduct.lots[j]) {
1644
- let check_duplicate = false;
1645
- for (const q in field_lot) {
1646
- if (p === field_lot[q][0]) {
1647
- check_duplicate = true;
1648
- if (typeof subProduct.lots[j][p] != field_lot[q][1]) {
1649
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào subProduct(lots)', p);
1650
- if (enable_return)
1651
- return true;
1652
- }
1653
- }
1654
- }
1655
- if (!check_duplicate) {
1656
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào subProduct(lots)', p);
1657
- if (enable_return)
1658
- return true;
1659
- }
1660
- }
1661
- if (subProduct.lots[j]['barcode'] != "")
1662
- barcodes.push(subProduct.lots[j]['barcode']);
1663
- for (const p in field_lot) {
1664
- let check_duplicate = false;
1665
- for (const q in subProduct.lots[j]) {
1666
- if (field_lot[p][0] === q) {
1667
- check_duplicate = true;
1668
- }
1669
- }
1670
- if (!check_duplicate) {
1671
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào subProduct(lots)', p);
1672
- if (enable_return)
1673
- return true;
1674
- }
1675
- }
1676
- }
1677
- }
1678
- }
1679
- return false;
1680
- }
1681
- export function checkCafe_updateSubProduct_type1(id_subproduct, value) {
1682
- let enable_return = true;
1683
- if (!id_subproduct || id_subproduct === '') {
1684
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_subproduct');
1685
- if (enable_return)
1686
- return true;
1687
- }
1688
- let barcodes = new Array();
1689
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['delete_hidden', 'boolean']];
1690
- for (const p in value) {
1691
- let check_duplicate = false;
1692
- for (const q in field_sub) {
1693
- if (p === field_sub[q][0]) {
1694
- check_duplicate = true;
1695
- if (typeof value[p] != field_sub[q][1]) {
1696
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
1697
- if (enable_return)
1698
- return true;
1699
- }
1700
- }
1701
- }
1702
- if (!check_duplicate) {
1703
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
1704
- if (enable_return)
1705
- return true;
1706
- }
1707
- }
1708
- if (value.units) {
1709
- for (let j = 0; j < value.units.length; j++) {
1710
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
1711
- ['unit', 'string']];
1712
- for (const p in value.units[j]) {
1713
- let check_duplicate = false;
1714
- for (const q in field_unit) {
1715
- if (p === field_unit[q][0]) {
1716
- check_duplicate = true;
1717
- if (typeof value.units[j][p] != field_unit[q][1]) {
1718
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
1719
- if (enable_return)
1720
- return true;
1721
- }
1722
- }
1723
- }
1724
- if (!check_duplicate) {
1725
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
1726
- if (enable_return)
1727
- return true;
1728
- }
1729
- }
1730
- if (value.units[j]['barcode'] != "")
1731
- barcodes.push(value.units[j]['barcode']);
1732
- for (const p in field_unit) {
1733
- let check_duplicate = false;
1734
- for (const q in value.units[j]) {
1735
- if (field_unit[p][0] === q) {
1736
- check_duplicate = true;
1737
- }
1738
- }
1739
- if (!check_duplicate) {
1740
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
1741
- if (enable_return)
1742
- return true;
1743
- }
1744
- }
1745
- }
1746
- }
1747
- return false;
1748
- }
1749
- export function checkCafe_updateSubProduct_type3(id_subproduct, value) {
1750
- let enable_return = true;
1751
- if (!id_subproduct || id_subproduct === '') {
1752
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_subproduct');
1753
- if (enable_return)
1754
- return true;
1755
- }
1756
- let barcodes = new Array();
1757
- let field_sub = [['manylot', 'boolean'], ['name', 'string'], ['selling', 'boolean'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['delete_hidden', 'boolean'],
1758
- ['days_exp_warning', 'number'], ['days_import_warning', 'number'], ['lots', 'object']];
1759
- for (const p in value) {
1760
- let check_duplicate = false;
1761
- for (const q in field_sub) {
1762
- if (p === field_sub[q][0]) {
1763
- check_duplicate = true;
1764
- if (typeof value[p] != field_sub[q][1]) {
1765
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
1766
- if (enable_return)
1767
- return true;
1768
- }
1769
- }
1770
- }
1771
- if (!check_duplicate) {
1772
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
1773
- if (enable_return)
1774
- return true;
1775
- }
1776
- }
1777
- if (value.units) {
1778
- for (let j = 0; j < value.units.length; j++) {
1779
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
1780
- ['unit', 'string']];
1781
- for (const p in value.units[j]) {
1782
- let check_duplicate = false;
1783
- for (const q in field_unit) {
1784
- if (p === field_unit[q][0]) {
1785
- check_duplicate = true;
1786
- if (typeof value.units[j][p] != field_unit[q][1]) {
1787
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
1788
- if (enable_return)
1789
- return true;
1790
- }
1791
- }
1792
- }
1793
- if (!check_duplicate) {
1794
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
1795
- if (enable_return)
1796
- return true;
1797
- }
1798
- }
1799
- if (value.units[j]['barcode'] != "")
1800
- barcodes.push(value.units[j]['barcode']);
1801
- for (const p in field_unit) {
1802
- let check_duplicate = false;
1803
- for (const q in value.units[j]) {
1804
- if (field_unit[p][0] === q) {
1805
- check_duplicate = true;
1806
- }
1807
- }
1808
- if (!check_duplicate) {
1809
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
1810
- if (enable_return)
1811
- return true;
1812
- }
1813
- }
1814
- }
1815
- }
1816
- if (value.lots) {
1817
- for (let j = 0; j < value.lots.length; j++) {
1818
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
1819
- for (const p in value.lots[j]) {
1820
- let check_duplicate = false;
1821
- for (const q in field_lot) {
1822
- if (p === field_lot[q][0]) {
1823
- check_duplicate = true;
1824
- if (typeof value.lots[j][p] != field_lot[q][1]) {
1825
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
1826
- if (enable_return)
1827
- return true;
1828
- }
1829
- }
1830
- }
1831
- if (!check_duplicate) {
1832
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
1833
- if (enable_return)
1834
- return true;
1835
- }
1836
- }
1837
- if (value.lots[j]['barcode'] != "")
1838
- barcodes.push(value.lots[j]['barcode']);
1839
- for (const p in field_lot) {
1840
- let check_duplicate = false;
1841
- for (const q in value.lots[j]) {
1842
- if (field_lot[p][0] === q) {
1843
- check_duplicate = true;
1844
- }
1845
- }
1846
- if (!check_duplicate) {
1847
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
1848
- if (enable_return)
1849
- return true;
1850
- }
1851
- }
1852
- }
1853
- }
1854
- return false;
1855
- }
1856
- export function checkCafe_updateProduct_Type1(id_product, value) {
1857
- let enable_return = true;
1858
- if (!id_product || id_product === '') {
1859
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
1860
- if (enable_return)
1861
- return true;
1862
- }
1863
- let barcodes = new Array();
1864
- let field_main = [['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manysize', 'boolean'],
1865
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['delete_hidden', 'boolean'],
1866
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'],
1867
- ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
1868
- for (const p in value) {
1869
- let check_duplicate = false;
1870
- for (const q in field_main) {
1871
- if (p === field_main[q][0]) {
1872
- check_duplicate = true;
1873
- if (typeof value[p] != field_main[q][1]) {
1874
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
1875
- if (enable_return)
1876
- return true;
1877
- }
1878
- }
1879
- }
1880
- if (!check_duplicate) {
1881
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
1882
- if (enable_return)
1883
- return true;
1884
- }
1885
- }
1886
- if (value.units) {
1887
- //console.log('----value', value)
1888
- for (let j = 0; j < value.units.length; j++) {
1889
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
1890
- ['unit', 'string']];
1891
- for (const p in value.units[j]) {
1892
- let check_duplicate = false;
1893
- for (const q in field_unit) {
1894
- if (p === field_unit[q][0]) {
1895
- check_duplicate = true;
1896
- if (typeof value.units[j][p] != field_unit[q][1]) {
1897
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
1898
- if (enable_return)
1899
- return true;
1900
- }
1901
- }
1902
- }
1903
- if (!check_duplicate) {
1904
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
1905
- if (enable_return)
1906
- return true;
1907
- }
1908
- }
1909
- if (value.units[j]['barcode'] != "")
1910
- barcodes.push(value.units[j]['barcode']);
1911
- for (const p in field_unit) {
1912
- let check_duplicate = false;
1913
- for (const q in value.units[j]) {
1914
- if (field_unit[p][0] === q) {
1915
- check_duplicate = true;
1916
- }
1917
- }
1918
- if (!check_duplicate) {
1919
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
1920
- if (enable_return)
1921
- return true;
1922
- }
1923
- }
1924
- }
1925
- }
1926
- return false;
1927
- }
1928
- export function checkCafe_updateProduct_Type3(id_product, value) {
1929
- let enable_return = true;
1930
- if (!id_product || id_product === '') {
1931
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
1932
- if (enable_return)
1933
- return true;
1934
- }
1935
- let barcodes = new Array();
1936
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
1937
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
1938
- ['days_import_warning', 'number'], ['lots', 'object'], ['delete_hidden', 'boolean'],
1939
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
1940
- for (const p in value) {
1941
- let check_duplicate = false;
1942
- for (const q in field_main) {
1943
- if (p === field_main[q][0]) {
1944
- check_duplicate = true;
1945
- if (typeof value[p] != field_main[q][1]) {
1946
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
1947
- if (enable_return)
1948
- return true;
1949
- }
1950
- }
1951
- }
1952
- if (!check_duplicate) {
1953
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
1954
- if (enable_return)
1955
- return true;
1956
- }
1957
- }
1958
- if (value.units) {
1959
- //console.log('----value', value)
1960
- for (let j = 0; j < value.units.length; j++) {
1961
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
1962
- ['unit', 'string']];
1963
- for (const p in value.units[j]) {
1964
- let check_duplicate = false;
1965
- for (const q in field_unit) {
1966
- if (p === field_unit[q][0]) {
1967
- check_duplicate = true;
1968
- if (typeof value.units[j][p] != field_unit[q][1]) {
1969
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
1970
- if (enable_return)
1971
- return true;
1972
- }
1973
- }
1974
- }
1975
- if (!check_duplicate) {
1976
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
1977
- if (enable_return)
1978
- return true;
1979
- }
1980
- }
1981
- if (value.units[j]['barcode'] != "")
1982
- barcodes.push(value.units[j]['barcode']);
1983
- for (const p in field_unit) {
1984
- let check_duplicate = false;
1985
- for (const q in value.units[j]) {
1986
- if (field_unit[p][0] === q) {
1987
- check_duplicate = true;
1988
- }
1989
- }
1990
- if (!check_duplicate) {
1991
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
1992
- if (enable_return)
1993
- return true;
1994
- }
1995
- }
1996
- }
1997
- }
1998
- if (value.lots) {
1999
- for (let j = 0; j < value.lots.length; j++) {
2000
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
2001
- for (const p in value.lots[j]) {
2002
- let check_duplicate = false;
2003
- for (const q in field_lot) {
2004
- if (p === field_lot[q][0]) {
2005
- check_duplicate = true;
2006
- if (typeof value.lots[j][p] != field_lot[q][1]) {
2007
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
2008
- if (enable_return)
2009
- return true;
2010
- }
2011
- }
2012
- }
2013
- if (!check_duplicate) {
2014
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
2015
- if (enable_return)
2016
- return true;
2017
- }
2018
- }
2019
- if (value.lots[j]['barcode'] != "")
2020
- barcodes.push(value.lots[j]['barcode']);
2021
- for (const p in field_lot) {
2022
- let check_duplicate = false;
2023
- for (const q in value.lots[j]) {
2024
- if (field_lot[p][0] === q) {
2025
- check_duplicate = true;
2026
- }
2027
- }
2028
- if (!check_duplicate) {
2029
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
2030
- if (enable_return)
2031
- return true;
2032
- }
2033
- }
2034
- }
2035
- }
2036
- return false;
2037
- }
2038
- export function checkCafe_updateProduct_Type1_fw(id_product, value) {
2039
- //console.log('--value', value);
2040
- let enable_return = true;
2041
- if (!id_product || id_product === '') {
2042
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
2043
- if (enable_return)
2044
- return true;
2045
- }
2046
- let barcodes = new Array();
2047
- let field_main = [['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manysize', 'boolean'],
2048
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'],
2049
- ['quantity', 'number'], ['quantity_branch', 'object'], ['delete_hidden', 'boolean'],
2050
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
2051
- for (const p in value) {
2052
- let check_duplicate = false;
2053
- for (const q in field_main) {
2054
- if (p === field_main[q][0]) {
2055
- check_duplicate = true;
2056
- if (typeof value[p] != field_main[q][1]) {
2057
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
2058
- if (enable_return)
2059
- return true;
2060
- }
2061
- }
2062
- }
2063
- if (!check_duplicate) {
2064
- if (value[p]['inventory'] === undefined) {
2065
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
2066
- if (enable_return)
2067
- return true;
2068
- }
2069
- }
2070
- }
2071
- if (value.units) {
2072
- //console.log('----value', value)
2073
- for (let j = 0; j < value.units.length; j++) {
2074
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
2075
- ['unit', 'string']];
2076
- for (const p in value.units[j]) {
2077
- let check_duplicate = false;
2078
- for (const q in field_unit) {
2079
- if (p === field_unit[q][0]) {
2080
- check_duplicate = true;
2081
- if (typeof value.units[j][p] != field_unit[q][1]) {
2082
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
2083
- if (enable_return)
2084
- return true;
2085
- }
2086
- }
2087
- }
2088
- if (!check_duplicate) {
2089
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
2090
- if (enable_return)
2091
- return true;
2092
- }
2093
- }
2094
- if (value.units[j]['barcode'] != "")
2095
- barcodes.push(value.units[j]['barcode']);
2096
- for (const p in field_unit) {
2097
- let check_duplicate = false;
2098
- for (const q in value.units[j]) {
2099
- if (field_unit[p][0] === q) {
2100
- check_duplicate = true;
2101
- }
2102
- }
2103
- if (!check_duplicate) {
2104
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
2105
- if (enable_return)
2106
- return true;
2107
- }
2108
- }
2109
- }
2110
- }
2111
- return false;
2112
- }
2113
- export function checkCafe_updateProduct_Type3_fw(id_product, value) {
2114
- //console.log('--value', value);
2115
- let enable_return = true;
2116
- if (!id_product || id_product === '') {
2117
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
2118
- if (enable_return)
2119
- return true;
2120
- }
2121
- let barcodes = new Array();
2122
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
2123
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
2124
- ['quantity', 'number'], ['quantity_branch', 'object'], ['delete_hidden', 'boolean'],
2125
- ['days_import_warning', 'number'], ['lots', 'object'],
2126
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
2127
- for (const p in value) {
2128
- let check_duplicate = false;
2129
- for (const q in field_main) {
2130
- if (p === field_main[q][0]) {
2131
- check_duplicate = true;
2132
- if (typeof value[p] != field_main[q][1]) {
2133
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
2134
- if (enable_return)
2135
- return true;
2136
- }
2137
- }
2138
- }
2139
- if (!check_duplicate) {
2140
- if (value[p]['inventory'] === undefined) {
2141
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
2142
- if (enable_return)
2143
- return true;
2144
- }
2145
- }
2146
- }
2147
- if (value.units) {
2148
- //console.log('----value', value)
2149
- for (let j = 0; j < value.units.length; j++) {
2150
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['price_import', 'number'], ['ratio', 'number'],
2151
- ['unit', 'string']];
2152
- for (const p in value.units[j]) {
2153
- let check_duplicate = false;
2154
- for (const q in field_unit) {
2155
- if (p === field_unit[q][0]) {
2156
- check_duplicate = true;
2157
- if (typeof value.units[j][p] != field_unit[q][1]) {
2158
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
2159
- if (enable_return)
2160
- return true;
2161
- }
2162
- }
2163
- }
2164
- if (!check_duplicate) {
2165
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
2166
- if (enable_return)
2167
- return true;
2168
- }
2169
- }
2170
- if (value.units[j]['barcode'] != "")
2171
- barcodes.push(value.units[j]['barcode']);
2172
- for (const p in field_unit) {
2173
- let check_duplicate = false;
2174
- for (const q in value.units[j]) {
2175
- if (field_unit[p][0] === q) {
2176
- check_duplicate = true;
2177
- }
2178
- }
2179
- if (!check_duplicate) {
2180
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
2181
- if (enable_return)
2182
- return true;
2183
- }
2184
- }
2185
- }
2186
- }
2187
- if (value.lots) {
2188
- for (let j = 0; j < value.lots.length; j++) {
2189
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
2190
- for (const p in value.lots[j]) {
2191
- let check_duplicate = false;
2192
- for (const q in field_lot) {
2193
- if (p === field_lot[q][0]) {
2194
- check_duplicate = true;
2195
- if ((p === 'date_exp') || (p === 'date_mfg')) {
2196
- value.lots[j][p] = new Date(value.lots[j][p]);
2197
- }
2198
- if (typeof value.lots[j][p] != field_lot[q][1]) {
2199
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
2200
- if (enable_return)
2201
- return true;
2202
- }
2203
- }
2204
- }
2205
- if (!check_duplicate) {
2206
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
2207
- if (enable_return)
2208
- return true;
2209
- }
2210
- }
2211
- if (value.lots[j]['barcode'] != "")
2212
- barcodes.push(value.lots[j]['barcode']);
2213
- for (const p in field_lot) {
2214
- let check_duplicate = false;
2215
- for (const q in value.lots[j]) {
2216
- if (field_lot[p][0] === q) {
2217
- check_duplicate = true;
2218
- }
2219
- }
2220
- if (!check_duplicate) {
2221
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
2222
- if (enable_return)
2223
- return true;
2224
- }
2225
- }
2226
- }
2227
- }
2228
- return false;
2229
- }
2230
- export function checkCafe_updateProduct_Type2(id_product, value) {
2231
- let enable_return = true;
2232
- if (!id_product || id_product === '') {
2233
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
2234
- if (enable_return)
2235
- return true;
2236
- }
2237
- let barcodes = new Array();
2238
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
2239
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
2240
- ['days_import_warning', 'number'], ['lots', 'object'], ['delete_hidden', 'boolean'],
2241
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
2242
- for (const p in value) {
2243
- let check_duplicate = false;
2244
- for (const q in field_main) {
2245
- if (p === field_main[q][0]) {
2246
- check_duplicate = true;
2247
- if (typeof value[p] != field_main[q][1]) {
2248
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
2249
- if (enable_return)
2250
- return true;
2251
- }
2252
- }
2253
- }
2254
- if (!check_duplicate) {
2255
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
2256
- if (enable_return)
2257
- return true;
2258
- }
2259
- }
2260
- if (value.units) {
2261
- //console.log('----value', value)
2262
- for (let j = 0; j < value.units.length; j++) {
2263
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['price2', 'number'], ['ratio', 'number'],
2264
- ['unit', 'string']];
2265
- for (const p in value.units[j]) {
2266
- let check_duplicate = false;
2267
- for (const q in field_unit) {
2268
- if (p === field_unit[q][0]) {
2269
- check_duplicate = true;
2270
- if (typeof value.units[j][p] != field_unit[q][1]) {
2271
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
2272
- if (enable_return)
2273
- return true;
2274
- }
2275
- }
2276
- }
2277
- if (!check_duplicate) {
2278
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
2279
- if (enable_return)
2280
- return true;
2281
- }
2282
- }
2283
- if (value.units[j]['barcode'] != "")
2284
- barcodes.push(value.units[j]['barcode']);
2285
- for (const p in field_unit) {
2286
- let check_duplicate = false;
2287
- for (const q in value.units[j]) {
2288
- if (field_unit[p][0] === q) {
2289
- check_duplicate = true;
2290
- }
2291
- }
2292
- if (!check_duplicate) {
2293
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
2294
- if (enable_return)
2295
- return true;
2296
- }
2297
- }
2298
- }
2299
- }
2300
- if (value.lots) {
2301
- for (let j = 0; j < value.lots.length; j++) {
2302
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
2303
- for (const p in value.lots[j]) {
2304
- let check_duplicate = false;
2305
- for (const q in field_lot) {
2306
- if (p === field_lot[q][0]) {
2307
- check_duplicate = true;
2308
- if (typeof value.lots[j][p] != field_lot[q][1]) {
2309
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
2310
- if (enable_return)
2311
- return true;
2312
- }
2313
- }
2314
- }
2315
- if (!check_duplicate) {
2316
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
2317
- if (enable_return)
2318
- return true;
2319
- }
2320
- }
2321
- if (value.lots[j]['barcode'] != "")
2322
- barcodes.push(value.lots[j]['barcode']);
2323
- for (const p in field_lot) {
2324
- let check_duplicate = false;
2325
- for (const q in value.lots[j]) {
2326
- if (field_lot[p][0] === q) {
2327
- check_duplicate = true;
2328
- }
2329
- }
2330
- if (!check_duplicate) {
2331
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
2332
- if (enable_return)
2333
- return true;
2334
- }
2335
- }
2336
- }
2337
- }
2338
- return false;
2339
- }
2340
- export function checkCafe_updateProduct_Type5(id_product, value) {
2341
- let enable_return = true;
2342
- if (!id_product || id_product === '') {
2343
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào id_product');
2344
- if (enable_return)
2345
- return true;
2346
- }
2347
- let barcodes = new Array();
2348
- let field_main = [['brand', 'string'], ['tax', 'number'], ['vat_reduction', 'number'], ['id_category', 'string'], ['img', 'string'], ['manylot', 'boolean'], ['manysize', 'boolean'],
2349
- ['name', 'string'], ['selling', 'boolean'], ['type', 'number'], ['units', 'object'], ['warning_number', 'number'], ['item_code', 'string'], ['days_exp_warning', 'number'],
2350
- ['days_import_warning', 'number'], ['lots', 'object'], ['describe', 'string'], ['delete_hidden', 'boolean'],
2351
- ['id_design_barcode', 'string'], ['id_design_barcode_lot', 'string'], ['number_column', 'number'], ['number_column_lot', 'number'], ['number_print', 'number'], ['number_print_lot', 'number']]; //sau này sẽ group phần designs này lại
2352
- for (const p in value) {
2353
- let check_duplicate = false;
2354
- for (const q in field_main) {
2355
- if (p === field_main[q][0]) {
2356
- check_duplicate = true;
2357
- if (typeof value[p] != field_main[q][1]) {
2358
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value', p);
2359
- if (enable_return)
2360
- return true;
2361
- }
2362
- }
2363
- }
2364
- if (!check_duplicate) {
2365
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value', p);
2366
- if (enable_return)
2367
- return true;
2368
- }
2369
- }
2370
- if (value.units) {
2371
- for (let j = 0; j < value.units.length; j++) {
2372
- let field_unit = [['barcode', 'string'], ['default', 'boolean'], ['price', 'number'], ['ratio', 'number'], ['unit', 'string']];
2373
- for (const p in value.units[j]) {
2374
- let check_duplicate = false;
2375
- for (const q in field_unit) {
2376
- if (p === field_unit[q][0]) {
2377
- check_duplicate = true;
2378
- if (typeof value.units[j][p] != field_unit[q][1]) {
2379
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(units)', p);
2380
- if (enable_return)
2381
- return true;
2382
- }
2383
- }
2384
- }
2385
- if (!check_duplicate) {
2386
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(units)', p);
2387
- if (enable_return)
2388
- return true;
2389
- }
2390
- }
2391
- if (value.units[j]['barcode'] != "")
2392
- barcodes.push(value.units[j]['barcode']);
2393
- for (const p in field_unit) {
2394
- let check_duplicate = false;
2395
- for (const q in value.units[j]) {
2396
- if (field_unit[p][0] === q) {
2397
- check_duplicate = true;
2398
- }
2399
- }
2400
- if (!check_duplicate) {
2401
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(units)', p);
2402
- if (enable_return)
2403
- return true;
2404
- }
2405
- }
2406
- }
2407
- }
2408
- if (value.lots) {
2409
- for (let j = 0; j < value.lots.length; j++) {
2410
- let field_lot = [['_id', 'string'], ['barcode', 'string'], ['date_exp', 'object'], ['date_mfg', 'object'], ['hidden', 'boolean'], ['lot_number', 'string']];
2411
- for (const p in value.lots[j]) {
2412
- let check_duplicate = false;
2413
- for (const q in field_lot) {
2414
- if (p === field_lot[q][0]) {
2415
- check_duplicate = true;
2416
- if (typeof value.lots[j][p] != field_lot[q][1]) {
2417
- console.log('Vui lòng kiểm tra, kiểu dữ liệu trong tham số truyền vào value(lots)', p);
2418
- if (enable_return)
2419
- return true;
2420
- }
2421
- }
2422
- }
2423
- if (!check_duplicate) {
2424
- console.log('Vui lòng kiểm tra, thừa trường trong tham số truyền vào value(lots)', p);
2425
- if (enable_return)
2426
- return true;
2427
- }
2428
- }
2429
- if (value.lots[j]['barcode'] != "")
2430
- barcodes.push(value.lots[j]['barcode']);
2431
- for (const p in field_lot) {
2432
- let check_duplicate = false;
2433
- for (const q in value.lots[j]) {
2434
- if (field_lot[p][0] === q) {
2435
- check_duplicate = true;
2436
- }
2437
- }
2438
- if (!check_duplicate) {
2439
- console.log('Vui lòng kiểm tra, thiếu trường trong tham số truyền vào value(lots)', p);
2440
- if (enable_return)
2441
- return true;
2442
- }
2443
- }
2444
- }
2445
- }
2446
- return false;
2447
- }
2448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcGFyYW1ldGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLXZoZnJhbWV3b3Jrcy9zcmMvbGliL2NoZWNrLXBhcmFtZXRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLG1DQUFtQyxDQUFDLE9BQVcsRUFBRSxlQUFtQjtJQUNsRiwyREFBMkQ7SUFDekQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBRyxPQUFPLENBQUMsUUFBUSxFQUFDLEVBQUMsaUJBQWlCO1FBQ3BDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuUCxLQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBQztZQUVyQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO2dCQUM3QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztvQkFDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixJQUFHLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrRUFBa0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDbkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpRUFBaUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEYsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBRUY7UUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUM7Z0JBQ3JCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztvQkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDRjtZQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25GLElBQUcsYUFBYTtvQkFBRSxPQUFPLElBQUksQ0FBQzthQUMvQjtTQUNGO1FBRUQsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDekMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEwsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDO2dCQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQztvQkFDekksQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDOUg7aUJBQUk7Z0JBQ0QsS0FBSSxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQ2hDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO3dCQUM3QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQzs0QkFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dDQUN2QixJQUFHLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQ0FDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwRUFBMEUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDM0YsSUFBRyxhQUFhO3dDQUFFLE9BQU8sSUFBSSxDQUFDO2lDQUMvQjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMxRixJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2dCQUNELEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUNoQyxJQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7NEJBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7eUJBQ3hCO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEVBQTBFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzNGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO29CQUMxQixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7d0JBQ2xELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDOzRCQUNuSSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNyQyxLQUFJLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ3pDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQzs0QkFDNUIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO2dDQUM3QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztvQ0FDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dDQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3dDQUN2QixJQUFHLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NENBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUZBQWlGLEVBQUUsQ0FBQyxDQUFDLENBQUM7NENBQ2xHLElBQUcsYUFBYTtnREFBRSxPQUFPLElBQUksQ0FBQzt5Q0FDL0I7cUNBQ0Y7aUNBQ0Y7NkJBQ0Y7NEJBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQ0FDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRkFBZ0YsRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDakcsSUFBRyxhQUFhO29DQUFFLE9BQU8sSUFBSSxDQUFDOzZCQUMvQjt5QkFDRjt3QkFDRCxJQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs0QkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDdkcsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7NEJBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQzs0QkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUN6QyxJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7b0NBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7aUNBQ3hCOzZCQUNGOzRCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0NBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUZBQWlGLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ2xHLElBQUcsYUFBYTtvQ0FBRSxPQUFPLElBQUksQ0FBQzs2QkFDL0I7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDO29CQUN6QixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7d0JBQ2pELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDcEksS0FBSSxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUN4QyxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7NEJBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztnQ0FDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7b0NBQ3ZCLElBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3Q0FDdkIsZUFBZSxHQUFHLElBQUksQ0FBQzt3Q0FDdkIsSUFBRyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRDQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLGdGQUFnRixFQUFFLENBQUMsQ0FBQyxDQUFDOzRDQUNqRyxJQUFHLGFBQWE7Z0RBQUUsT0FBTyxJQUFJLENBQUM7eUNBQy9CO3FDQUNGO2lDQUNGOzZCQUNGOzRCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0NBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0VBQStFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ2hHLElBQUcsYUFBYTtvQ0FBRSxPQUFPLElBQUksQ0FBQzs2QkFDL0I7eUJBQ0Y7d0JBQ0QsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7NEJBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JHLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDOzRCQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7NEJBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQztnQ0FDeEMsSUFBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO29DQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2lDQUN4Qjs2QkFDRjs0QkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO2dDQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGdGQUFnRixFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUNqRyxJQUFHLGFBQWE7b0NBQUUsT0FBTyxJQUFJLENBQUM7NkJBQy9CO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0o7U0FDRjtLQUVGO1NBQUksRUFBQywwQkFBMEI7UUFDOUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUM7WUFDbkwsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JMLElBQUcsT0FBTyxDQUFDLE9BQU8sRUFBQztZQUNqQixVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUM7Z0JBQ25MLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7Z0JBQ2hNLENBQUMscUJBQXFCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELEtBQUksTUFBTSxDQUFDLElBQUksT0FBTyxFQUFDO1lBQ3JCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7Z0JBQzdCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtFQUFrRSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNuRixPQUFPLEtBQUssQ0FBQzt5QkFDZDtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpRUFBaUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEYsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUM7Z0JBQ3JCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztvQkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDRjtZQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25GLElBQUcsYUFBYTtvQkFBRSxPQUFPLElBQUksQ0FBQzthQUMvQjtTQUNGO1FBQ0QsSUFBRyxPQUFPLENBQUMsS0FBSyxFQUFDO1lBQ2YsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO2dCQUN2QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFLLEtBQUksTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDOUIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM1QixJQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7d0JBQzdCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDOzRCQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0NBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0NBQ3ZCLElBQUcsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQ0FDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5RUFBeUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDMUYsSUFBRyxhQUFhO3dDQUFFLE9BQU8sSUFBSSxDQUFDO2lDQUMvQjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHdFQUF3RSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUN6RixJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2dCQUNELElBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO29CQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztvQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQzlCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzs0QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt5QkFDeEI7cUJBQ0Y7b0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQzt3QkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5RUFBeUUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUYsSUFBRyxhQUFhOzRCQUFFLE9BQU8sSUFBSSxDQUFDO3FCQUMvQjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUM7WUFDZCxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7Z0JBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDcEksS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUM3QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQzt3QkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7NEJBQ3ZCLElBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztnQ0FDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztnQ0FDdkIsSUFBRyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29DQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLHdFQUF3RSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUN6RixJQUFHLGFBQWE7d0NBQUUsT0FBTyxJQUFJLENBQUM7aUNBQy9COzZCQUNGO3lCQUNGO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUVBQXVFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3hGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDN0IsSUFBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDOzRCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO3lCQUN4QjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHdFQUF3RSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUN6RixJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFDO1FBQ3BDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FBQztnQkFDbkQsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsVUFBaUIsRUFBRSxVQUFjO0lBQ3hFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSSxFQUFFLEVBQUU7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25GLElBQUcsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUMzQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4TCxJQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUM7UUFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBQyxRQUFRLENBQUM7WUFDekksQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDOUg7U0FBSTtRQUNELEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO1lBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN2QixJQUFHLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdEYsSUFBRyxhQUFhOzRCQUFFLE9BQU8sSUFBSSxDQUFDO3FCQUMvQjtpQkFDRjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvRUFBb0UsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckYsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztZQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7Z0JBQ3hCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztvQkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDRjtZQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUVBQXFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLElBQUcsYUFBYTtvQkFBRSxPQUFPLElBQUksQ0FBQzthQUMvQjtTQUNGO1FBQ0QsSUFBRyxVQUFVLENBQUMsS0FBSyxFQUFDO1lBQ2xCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztnQkFDMUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7b0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDakMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQzt3QkFDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUN2QixJQUFHLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0NBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQzdGLElBQUcsYUFBYTtvQ0FBRSxPQUFPLElBQUksQ0FBQzs2QkFDL0I7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQzt3QkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyRUFBMkUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDNUYsSUFBRyxhQUFhOzRCQUFFLE9BQU8sSUFBSSxDQUFDO3FCQUMvQjtpQkFDRjtnQkFDRCxJQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUNqQyxJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7NEJBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7eUJBQ3hCO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkVBQTJFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzVGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsSUFBRyxVQUFVLENBQUMsSUFBSSxFQUFDO1lBQ2pCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztnQkFDekMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNwSSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQ2hDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7d0JBQ3ZCLElBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQzs0QkFDdkIsSUFBRyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLDJFQUEyRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUM1RixJQUFHLGFBQWE7b0NBQUUsT0FBTyxJQUFJLENBQUM7NkJBQy9CO3lCQUNGO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEVBQTBFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzNGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsSUFBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JGLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDaEMsSUFBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDOzRCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO3lCQUN4QjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLDJFQUEyRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1RixJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtLQUNKO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLGFBQW9CLEVBQUUsS0FBUztJQUN6RSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDekIsSUFBRyxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUksRUFBRSxFQUFFO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUN0RixJQUFHLGFBQWE7WUFBRSxPQUFPLElBQUksQ0FBQztLQUMvQjtJQUVELElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQztRQUN4SSxDQUFDLGtCQUFrQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUVsSSxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBQztRQUNuQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7WUFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFHLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDakYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7UUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0RBQStELEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBRyxhQUFhO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQy9CO0tBQ0Y7SUFFRCxJQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUM7UUFDYixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsRUFBQzt3QkFDdEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBRUY7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBRUY7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDekUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDdEcsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLGlDQUFpQztRQUNqQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDNUUsaUNBQWlDO0lBQ2pDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSSxFQUFFLEVBQUU7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25GLElBQUcsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUMzQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFNBQVMsQ0FBQztRQUM1SixDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUMsUUFBUSxDQUFDO1FBQ25LLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDO1FBQy9FLENBQUMscUJBQXFCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDO1FBQzFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBLHVDQUF1QztJQUV6UCxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBQztRQUNuQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7WUFDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFHLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDakYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7UUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO1lBQ2xCLElBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFNBQVMsRUFBQztnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEYsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLGlDQUFpQztRQUNqQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMzTSxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQzNCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7b0JBQ3ZCLElBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsRUFBQzs0QkFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQy9DO3dCQUNELElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDekUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDL0UsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLGlDQUFpQztRQUNqQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ3hHLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUNELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDekUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDdEcsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUgsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSx3Q0FBd0MsQ0FBQyxPQUFXLEVBQUUsZUFBbUI7SUFDckYsMkRBQTJEO0lBQzNELHdCQUF3QjtJQUN4QixzQkFBc0I7SUFDdEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBRyxPQUFPLENBQUMsUUFBUSxFQUFDLEVBQUMsaUJBQWlCO1FBQ3BDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDO1lBQ3BJLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFakosS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUM7WUFDckIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztnQkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ25GLElBQUcsYUFBYTtnQ0FBRSxPQUFPLElBQUksQ0FBQzt5QkFDL0I7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUVBQWlFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLElBQUcsYUFBYTtvQkFBRSxPQUFPLElBQUksQ0FBQzthQUMvQjtTQUVGO1FBQ0QsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7WUFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksT0FBTyxFQUFDO2dCQUNyQixJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7b0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7aUJBQ3hCO2FBQ0Y7WUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGtFQUFrRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRyxJQUFHLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDL0I7U0FDRjtRQUVELEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO1lBQ3pDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM1RyxLQUFJLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDaEMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixJQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7b0JBQzdCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO3dCQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7NEJBQ3ZCLElBQUcsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLDBFQUEwRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUMzRixJQUFHLGFBQWE7b0NBQUUsT0FBTyxJQUFJLENBQUM7NkJBQy9CO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUVBQXlFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFGLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO2dCQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNoQyxJQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7cUJBQ3hCO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEVBQTBFLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hHLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELElBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztnQkFDMUIsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO29CQUNsRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQzt3QkFDeEcsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUN6QyxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQzs0QkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7Z0NBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQ0FDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztvQ0FDdkIsSUFBRyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dDQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlGQUFpRixFQUFFLENBQUMsQ0FBQyxDQUFDO3dDQUNsRyxJQUFHLGFBQWE7NENBQUUsT0FBTyxJQUFJLENBQUM7cUNBQy9CO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7NEJBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0ZBQWdGLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ2pHLElBQUcsYUFBYTtnQ0FBRSxPQUFPLElBQUksQ0FBQzt5QkFDL0I7cUJBQ0Y7b0JBQ0QsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZHLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO3dCQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDekMsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO2dDQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDOzZCQUN4Qjt5QkFDRjt3QkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDOzRCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGlGQUFpRixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNqSCxJQUFHLGFBQWE7Z0NBQUUsT0FBTyxJQUFJLENBQUM7eUJBQy9CO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO1NBQUksRUFBQyw2QkFBNkI7UUFDakMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUM7WUFDcEksQ0FBQyxZQUFZLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDO1lBQ2hHLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekYsS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUM7WUFDckIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztnQkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ25GLE9BQU8sS0FBSyxDQUFDO3lCQUNkO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGlFQUFpRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixJQUFHLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDL0I7U0FDRjtRQUNELEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO1lBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBQztnQkFDckIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO2lCQUN4QjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrRUFBa0UsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEcsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxJQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUM7WUFDZixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7Z0JBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDL0ksS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUM5QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQzt3QkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7NEJBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztnQ0FDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztnQ0FDdkIsSUFBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29DQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUMxRixJQUFHLGFBQWE7d0NBQUUsT0FBTyxJQUFJLENBQUM7aUNBQy9COzZCQUNGO3lCQUNGO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3pGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsSUFBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDOUIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDOzRCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3lCQUN4QjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6RyxJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFDO1FBQ3BDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FBQztnQkFDbkQsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0NBQXdDLENBQUMsT0FBVyxFQUFFLGVBQW1CO0lBQ3ZGLDJEQUEyRDtJQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDdEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBRyxPQUFPLENBQUMsUUFBUSxFQUFDLEVBQUMsaUJBQWlCO1FBQ3BDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1TixLQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBQztZQUNyQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO2dCQUM3QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztvQkFDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixJQUFHLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrRUFBa0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDbkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpRUFBaUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEYsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBRUY7UUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUM7Z0JBQ3JCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztvQkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDRjtZQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xHLElBQUcsYUFBYTtvQkFBRSxPQUFPLElBQUksQ0FBQzthQUMvQjtTQUNGO1FBRUQsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDekMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEwsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDO2dCQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQztvQkFDdEssQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDakc7WUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDaEMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixJQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUM7b0JBQzdCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO3dCQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7NEJBQ3ZCLElBQUcsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLDBFQUEwRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUMzRixJQUFHLGFBQWE7b0NBQUUsT0FBTyxJQUFJLENBQUM7NkJBQy9CO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUVBQXlFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFGLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO2dCQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNoQyxJQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7cUJBQ3hCO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEVBQTBFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pHLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELElBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQztnQkFDMUIsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO29CQUNsRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQzt3QkFDbkksQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUN6QyxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQzs0QkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7Z0NBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQ0FDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztvQ0FDdkIsSUFBRyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dDQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlGQUFpRixFQUFFLENBQUMsQ0FBQyxDQUFDO3dDQUNsRyxJQUFHLGFBQWE7NENBQUUsT0FBTyxJQUFJLENBQUM7cUNBQy9CO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7NEJBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0ZBQWdGLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ2pHLElBQUcsYUFBYTtnQ0FBRSxPQUFPLElBQUksQ0FBQzt5QkFDL0I7cUJBQ0Y7b0JBQ0QsSUFBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZHLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO3dCQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDekMsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO2dDQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDOzZCQUN4Qjt5QkFDRjt3QkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDOzRCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGlGQUFpRixFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUNsRyxJQUFHLGFBQWE7Z0NBQUUsT0FBTyxJQUFJLENBQUM7eUJBQy9CO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxJQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUM7Z0JBQ3pCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztvQkFDakQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNwSSxLQUFJLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQzt3QkFDNUIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDOzRCQUM3QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQ0FDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29DQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO29DQUN2QixJQUFHLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0NBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0ZBQWdGLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0NBQ2pHLElBQUcsYUFBYTs0Q0FBRSxPQUFPLElBQUksQ0FBQztxQ0FDL0I7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQzs0QkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrRUFBK0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDaEcsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtvQkFDRCxJQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt3QkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDckcsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7d0JBQ3ZCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQzt3QkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUN4QyxJQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7Z0NBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7NkJBQ3hCO3lCQUNGO3dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7NEJBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0ZBQWdGLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ2pHLElBQUcsYUFBYTtnQ0FBRSxPQUFPLElBQUksQ0FBQzt5QkFDL0I7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0tBRUY7U0FBSSxFQUFDLDBCQUEwQjtRQUM5QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFNBQVMsQ0FBQztZQUM1SixDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDckwsSUFBRyxPQUFPLENBQUMsT0FBTyxFQUFDO1lBQ2pCLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFNBQVMsQ0FBQztnQkFDNUosQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7Z0JBQ2pLLENBQUMsa0JBQWtCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ25HO1FBQ0QsS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUM7WUFDckIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztnQkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ25GLE9BQU8sS0FBSyxDQUFDO3lCQUNkO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGlFQUFpRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixJQUFHLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDL0I7U0FDRjtRQUNELEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO1lBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBQztnQkFDckIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO2lCQUN4QjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrRUFBa0UsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEcsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxJQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUM7WUFDZixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7Z0JBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDMUssS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUM5QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQzt3QkFDN0IsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7NEJBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztnQ0FDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztnQ0FDdkIsSUFBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29DQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUMxRixJQUFHLGFBQWE7d0NBQUUsT0FBTyxJQUFJLENBQUM7aUNBQy9COzZCQUNGO3lCQUNGO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3pGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsSUFBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDOUIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDOzRCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3lCQUN4QjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6RyxJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELElBQUcsT0FBTyxDQUFDLElBQUksRUFBQztZQUNkLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztnQkFDdEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNwSSxLQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzdCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDO3dCQUM3QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQzs0QkFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dDQUN2QixJQUFHLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0NBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3pGLElBQUcsYUFBYTt3Q0FBRSxPQUFPLElBQUksQ0FBQztpQ0FDL0I7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQzt3QkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDeEYsSUFBRyxhQUFhOzRCQUFFLE9BQU8sSUFBSSxDQUFDO3FCQUMvQjtpQkFDRjtnQkFDRCxJQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDL0UsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7b0JBQ3ZCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUM3QixJQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7NEJBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7eUJBQ3hCO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZHLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsUUFBUSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUM7UUFDcEMsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO1lBQ3BDLElBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUNuRCxJQUFHLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDL0I7U0FDRjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFpQixFQUFFLFVBQWM7SUFDN0UsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUU1RyxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztRQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7WUFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFHLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7UUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0VBQW9FLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckYsSUFBRyxhQUFhO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQy9CO0tBQ0Y7SUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztRQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7WUFDeEIsSUFBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO2dCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO1NBQ0Y7UUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUVBQXFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEYsSUFBRyxhQUFhO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQy9CO0tBQ0Y7SUFDRCxJQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUM7UUFDbEIsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO1lBQzFDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDO2dCQUN4RyxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDakMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztvQkFDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixJQUFHLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7NEJBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzdGLElBQUcsYUFBYTtnQ0FBRSxPQUFPLElBQUksQ0FBQzt5QkFDL0I7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyRUFBMkUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1lBQ0QsSUFBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkYsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7Z0JBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNqQyxJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7cUJBQ3hCO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkVBQTJFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVGLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsVUFBaUIsRUFBRSxVQUFjO0lBQzdFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSSxFQUFFLEVBQUU7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25GLElBQUcsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUMzQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4TCxJQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUM7UUFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7WUFDdEssQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDakc7U0FBSTtRQUNELEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO1lBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN2QixJQUFHLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdEYsSUFBRyxhQUFhOzRCQUFFLE9BQU8sSUFBSSxDQUFDO3FCQUMvQjtpQkFDRjthQUNGO1lBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztnQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvRUFBb0UsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckYsSUFBRyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztZQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7Z0JBQ3hCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQztvQkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDRjtZQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUVBQXFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLElBQUcsYUFBYTtvQkFBRSxPQUFPLElBQUksQ0FBQzthQUMvQjtTQUNGO1FBQ0QsSUFBRyxVQUFVLENBQUMsS0FBSyxFQUFDO1lBQ2xCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztnQkFDMUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7b0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDakMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQzt3QkFDeEIsSUFBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUN2QixJQUFHLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0NBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQzdGLElBQUcsYUFBYTtvQ0FBRSxPQUFPLElBQUksQ0FBQzs2QkFDL0I7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQzt3QkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyRUFBMkUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDNUYsSUFBRyxhQUFhOzRCQUFFLE9BQU8sSUFBSSxDQUFDO3FCQUMvQjtpQkFDRjtnQkFDRCxJQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO3dCQUNqQyxJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7NEJBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7eUJBQ3hCO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkVBQTJFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzVGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsSUFBRyxVQUFVLENBQUMsSUFBSSxFQUFDO1lBQ2pCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztnQkFDekMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNwSSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQ2hDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7d0JBQ3ZCLElBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQzs0QkFDdkIsSUFBRyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dDQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLDJFQUEyRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUM1RixJQUFHLGFBQWE7b0NBQUUsT0FBTyxJQUFJLENBQUM7NkJBQy9CO3lCQUNGO3FCQUNGO29CQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEVBQTBFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzNGLElBQUcsYUFBYTs0QkFBRSxPQUFPLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsSUFBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JGLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDaEMsSUFBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDOzRCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO3lCQUN4QjtxQkFDRjtvQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLDJFQUEyRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1RixJQUFHLGFBQWE7NEJBQUUsT0FBTyxJQUFJLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtLQUNKO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLGFBQW9CLEVBQUUsS0FBUztJQUM5RSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDekIsSUFBRyxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUksRUFBRSxFQUFFO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUN0RixJQUFHLGFBQWE7WUFBRSxPQUFPLElBQUksQ0FBQztLQUMvQjtJQUVELElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRW5JLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztZQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQztnQkFDeEcsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQyxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQzVCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN4RixJQUFHLGFBQWE7Z0NBQUUsT0FBTyxJQUFJLENBQUM7eUJBQy9CO3FCQUNGO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0VBQXNFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZGLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELElBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzdFLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO2dCQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDNUIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsQ0FBQyxFQUFDO3dCQUN0QixlQUFlLEdBQUcsSUFBSSxDQUFDO3FCQUN4QjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FFRjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLGFBQW9CLEVBQUUsS0FBUztJQUM5RSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDekIsSUFBRyxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUksRUFBRSxFQUFFO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUN0RixJQUFHLGFBQWE7WUFBRSxPQUFPLElBQUksQ0FBQztLQUMvQjtJQUVELElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQztRQUNySyxDQUFDLGtCQUFrQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVyRyxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBQztRQUNuQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7WUFDdkIsSUFBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUN2QixlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFHLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDakYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7UUFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0RBQStELEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBRyxhQUFhO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQy9CO0tBQ0Y7SUFFRCxJQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUM7UUFDYixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsRUFBQzt3QkFDdEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBRUY7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBRUY7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDeEUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzlGLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDLFNBQVMsQ0FBQztRQUM1RyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUM7UUFDbEksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXJILEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLGlDQUFpQztRQUNqQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ3hHLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDeEUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDaEYsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLGlDQUFpQztRQUNqQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ25JLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDM0UsaUNBQWlDO0lBQ2pDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSSxFQUFFLEVBQUU7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25GLElBQUcsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUMzQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFNBQVMsQ0FBQztRQUM5RixDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7UUFDL0UsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDL0UsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsSUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxFQUFDO2dCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixJQUFHLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDL0I7U0FDRjtLQUNGO0lBRUQsSUFBRyxLQUFLLENBQUMsS0FBSyxFQUFDO1FBQ2IsaUNBQWlDO1FBQ2pDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQztnQkFDeEcsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQyxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQzVCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN4RixJQUFHLGFBQWE7Z0NBQUUsT0FBTyxJQUFJLENBQUM7eUJBQy9CO3FCQUNGO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0VBQXNFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZGLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELElBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzdFLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO2dCQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDNUIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO3dCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3FCQUN4QjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLFVBQWlCLEVBQUUsS0FBUztJQUMzRSxpQ0FBaUM7SUFDakMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDL0UsQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUM7UUFDbkQsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsSUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxFQUFDO2dCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixJQUFHLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDL0I7U0FDRjtLQUNGO0lBRUQsSUFBRyxLQUFLLENBQUMsS0FBSyxFQUFDO1FBQ2IsaUNBQWlDO1FBQ2pDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQztnQkFDbkksQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQyxLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQzVCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzRCQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN4RixJQUFHLGFBQWE7Z0NBQUUsT0FBTyxJQUFJLENBQUM7eUJBQy9CO3FCQUNGO2lCQUNGO2dCQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0VBQXNFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZGLElBQUcsYUFBYTt3QkFBRSxPQUFPLElBQUksQ0FBQztpQkFDL0I7YUFDRjtZQUNELElBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzdFLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO2dCQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztvQkFDNUIsSUFBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO3dCQUN4QixlQUFlLEdBQUcsSUFBSSxDQUFDO3FCQUN4QjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsSUFBRyxLQUFLLENBQUMsSUFBSSxFQUFDO1FBQ1osS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDO1lBQ3BDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN0SixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQzNCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsS0FBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUM7b0JBQ3ZCLElBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBRyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsRUFBQzs0QkFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQy9DO3dCQUNELElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDeEUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDL0UsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLGlDQUFpQztRQUNqQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBQyxRQUFRLENBQUM7Z0JBQ3hHLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUNELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFpQixFQUFFLEtBQVM7SUFDeEUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxLQUFJLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsSUFBRyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7S0FDL0I7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsU0FBUyxDQUFDO1FBQzVKLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFDbkssQ0FBQyxxQkFBcUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxTQUFTLENBQUM7UUFDdEcsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUEsdUNBQXVDO0lBRXpQLEtBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFDO1FBQ25CLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztZQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7Z0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtRQUNELElBQUcsQ0FBQyxlQUFlLEVBQUM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRixJQUFHLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDL0I7S0FDRjtJQUVELElBQUcsS0FBSyxDQUFDLEtBQUssRUFBQztRQUNiLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUgsS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksVUFBVSxFQUFDO29CQUN4QixJQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBQztnQkFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzVCLElBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELElBQUcsS0FBSyxDQUFDLElBQUksRUFBQztRQUNaLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEosS0FBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLEtBQUksTUFBTSxDQUFDLElBQUksU0FBUyxFQUFDO29CQUN2QixJQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZCLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLElBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkYsSUFBRyxhQUFhO2dDQUFFLE9BQU8sSUFBSSxDQUFDO3lCQUMvQjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFHLENBQUMsZUFBZSxFQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0RixJQUFHLGFBQWE7d0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQy9CO2FBQ0Y7WUFDRCxJQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBQztnQkFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixLQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQzNCLElBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDdkIsZUFBZSxHQUFHLElBQUksQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBQ0QsSUFBRyxDQUFDLGVBQWUsRUFBQztvQkFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkYsSUFBRyxhQUFhO3dCQUFFLE9BQU8sSUFBSSxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjaGVja1NhbGVzX2FkZFByb2R1Y3RBbmRTdWJzUHJvZHVjdChwcm9kdWN0OmFueSwgc3ViUHJvZHVjdEFycmF5OmFueSkgeyAgICBcclxuICAvL2NvbnNvbGUubG9nKCdoZWxsbyBjaGVja1NhbGVzX2FkZFByb2R1Y3RBbmRTdWJzUHJvZHVjdCcpO1xyXG4gICAgbGV0IGVuYWJsZV9yZXR1cm4gPSB0cnVlOyAgXHJcbiAgICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTtcclxuICAgIGlmKHByb2R1Y3QubWFueXNpemUpey8vbWFueXNpemUgPSB0cnVlXHJcbiAgICAgIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueXNpemUnLCdib29sZWFuJ10sIFsnbmFtZScsJ3N0cmluZyddLCBbJ3R5cGUnLCdudW1iZXInXSwgWydwb3NpdGlvbicsJ3N0cmluZyddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiBwcm9kdWN0KXtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX21haW4pe1xyXG4gICAgICAgICAgICBpZihwID09PSBmaWVsZF9tYWluW3FdWzBdKXtcclxuICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0W3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHByb2R1Y3Qpe1xyXG4gICAgICAgICAgaWYoZmllbGRfbWFpbltwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIFxyXG4gICAgICBmb3IobGV0IGk9MDsgaTxzdWJQcm9kdWN0QXJyYXkubGVuZ3RoOyBpKyspeyAgICAgICAgICAgIFxyXG4gICAgICAgIGxldCBmaWVsZF9zdWIgPSBbWydtYW55bG90JywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddXTtcclxuICAgICAgICBpZihzdWJQcm9kdWN0QXJyYXlbaV0ubWFueWxvdCl7XHJcbiAgICAgICAgICBmaWVsZF9zdWIgPSBbWydtYW55bG90JywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J10sIFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXV07XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBwIGluIHN1YlByb2R1Y3RBcnJheVtpXSl7XHJcbiAgICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmKHAuaW5kZXhPZignd2ViYXBwXycpID09PSAtMSl7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9zdWIpe1xyXG4gICAgICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF9zdWJbcV1bMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN1YlByb2R1Y3RBcnJheVtpXVtwXSAhPSBmaWVsZF9zdWJbcV1bMV0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5JywgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5JywgcCk7XHJcbiAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfc3ViKXtcclxuICAgICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdEFycmF5W2ldKXtcclxuICAgICAgICAgICAgICAgIGlmKGZpZWxkX3N1YltwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXknLCBwKTtcclxuICAgICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBpZihzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHMpe1xyXG4gICAgICAgICAgICAgIGZvcihsZXQgaj0wOyBqPHN1YlByb2R1Y3RBcnJheVtpXS51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncHJpY2VfaW1wb3J0JywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal0pe1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGlmKHAuaW5kZXhPZignd2ViYXBwXycpID09PSAtMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN1YlByb2R1Y3RBcnJheVtpXS51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3RBcnJheSh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICBpZihzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHN1YlByb2R1Y3RBcnJheVtpXS51bml0c1tqXVsnYmFyY29kZSddKTsgICAgXHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzKXtcclxuICAgICAgICAgICAgICBmb3IobGV0IGo9MDsgajxzdWJQcm9kdWN0QXJyYXlbaV0ubG90cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmllbGRfbG90ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RhdGVfZXhwJywnb2JqZWN0J10sIFsnZGF0ZV9tZmcnLCdvYmplY3QnXSwgWydoaWRkZW4nLCdib29sZWFuJ10sIFsnbG90X251bWJlcicsJ3N0cmluZyddXTtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBwIGluIHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBpZihwLmluZGV4T2YoJ3dlYmFwcF8nKSA9PT0gLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF9sb3RbcV1bMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdEFycmF5W2ldLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5KGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICBpZihzdWJQcm9kdWN0QXJyYXlbaV0ubG90c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2goc3ViUHJvZHVjdEFycmF5W2ldLmxvdHNbal1bJ2JhcmNvZGUnXSk7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICB9ZWxzZXsvL21hbnlzaXplID0gZmFsc2UgICAgICAgIFxyXG4gICAgICBsZXQgZmllbGRfbWFpbiA9IFtbJ2JyYW5kJywnc3RyaW5nJ10sIFsndGF4JywgJ251bWJlciddLCBbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlsb3QnLCdib29sZWFuJ10sIFsnbWFueXNpemUnLCdib29sZWFuJ10sIFsncG9zaXRpb24nLCdzdHJpbmcnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd0eXBlJywnbnVtYmVyJ10sIFsndW5pdHMnLCdvYmplY3QnXSwgWyd3YXJuaW5nX251bWJlcicsJ251bWJlciddLCBbJ2l0ZW1fY29kZScsJ3N0cmluZyddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ11dO1xyXG4gICAgICBpZihwcm9kdWN0Lm1hbnlsb3Qpe1xyXG4gICAgICAgIGZpZWxkX21haW4gPSBbWydicmFuZCcsJ3N0cmluZyddLCBbJ3RheCcsICdudW1iZXInXSwgWyd2YXRfcmVkdWN0aW9uJywnbnVtYmVyJ10sIFsnaWRfY2F0ZWdvcnknLCdzdHJpbmcnXSwgWydpbWcnLCdzdHJpbmcnXSwgWydtYW55bG90JywnYm9vbGVhbiddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLCBbJ3Bvc2l0aW9uJywnc3RyaW5nJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3R5cGUnLCdudW1iZXInXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J11dO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHByb2R1Y3QpeyAgICAgICAgICAgXHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHAuaW5kZXhPZignd2ViYXBwXycpID09PSAtMSl7XHJcbiAgICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9tYWluKXsgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYocCA9PT0gZmllbGRfbWFpbltxXVswXSl7XHJcbiAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RbcF0gIT0gZmllbGRfbWFpbltxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX21haW4pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBwcm9kdWN0KXtcclxuICAgICAgICAgIGlmKGZpZWxkX21haW5bcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYocHJvZHVjdC51bml0cyl7XHJcbiAgICAgICAgZm9yKGxldCBqPTA7IGo8cHJvZHVjdC51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncHJpY2VfaW1wb3J0JywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgWyd1bml0Jywnc3RyaW5nJ11dO1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHAgaW4gcHJvZHVjdC51bml0c1tqXSl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3VuaXRbcV1bMF0pe1xyXG4gICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdC51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBpZihwcm9kdWN0LnVuaXRzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaChwcm9kdWN0LnVuaXRzW2pdWydiYXJjb2RlJ10pO1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gcHJvZHVjdC51bml0c1tqXSl7XHJcbiAgICAgICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2R1Y3QubG90cyl7XHJcbiAgICAgICAgZm9yKGxldCBqPTA7IGo8cHJvZHVjdC5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgICAgIGxldCBmaWVsZF9sb3QgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGF0ZV9leHAnLCdvYmplY3QnXSwgWydkYXRlX21mZycsJ29iamVjdCddLCBbJ2hpZGRlbicsJ2Jvb2xlYW4nXSwgWydsb3RfbnVtYmVyJywnc3RyaW5nJ11dO1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHAgaW4gcHJvZHVjdC5sb3RzW2pdKXtcclxuICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZihwLmluZGV4T2YoJ3dlYmFwcF8nKSA9PT0gLTEpe1xyXG4gICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF9sb3RbcV1bMF0pe1xyXG4gICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdC5sb3RzW2pdW3BdICE9IGZpZWxkX2xvdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdChsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0KGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIGlmKHByb2R1Y3QubG90c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2gocHJvZHVjdC5sb3RzW2pdWydiYXJjb2RlJ10pO1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbG90KXtcclxuICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBwcm9kdWN0LmxvdHNbal0pe1xyXG4gICAgICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgIH0gICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgZm9yKGxldCBpPTA7IGk8YmFyY29kZXMubGVuZ3RoLTE7IGkrKyl7ICAgICAgICBcclxuICAgICAgZm9yKGxldCBqPWkrMTsgajxiYXJjb2Rlcy5sZW5ndGg7IGorKyl7ICAgICAgICAgIFxyXG4gICAgICAgIGlmKGJhcmNvZGVzW2ldID09PSBiYXJjb2Rlc1tqXSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBi4buLIHRyw7luZyBiYXJjb2RlJyk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gIFxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTYWxlc19hZGRTdWJQcm9kdWN0KGlkX3Byb2R1Y3Q6c3RyaW5nLCBzdWJQcm9kdWN0OmFueSl7ICAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgXHJcbiAgaWYoIWlkX3Byb2R1Y3QgfHwgaWRfcHJvZHVjdCA9PT0nJykge1xyXG4gICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gaWRfcHJvZHVjdCcpO1xyXG4gICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIGxldCBiYXJjb2RlcyA9IG5ldyBBcnJheSgpO1xyXG4gIGxldCBmaWVsZF9zdWIgPSBbWydtYW55bG90JywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddXTtcclxuICBpZihzdWJQcm9kdWN0Lm1hbnlsb3Qpe1xyXG4gICAgZmllbGRfc3ViID0gW1snbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sXHJcbiAgICAgICAgICAgICAgICBbJ2RheXNfZXhwX3dhcm5pbmcnLCdudW1iZXInXSwgWydkYXlzX2ltcG9ydF93YXJuaW5nJywnbnVtYmVyJ10sIFsnbG90cycsJ29iamVjdCddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ11dO1xyXG4gIH1lbHNle1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfc3ViKXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3N1YltxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzdWJQcm9kdWN0W3BdICE9IGZpZWxkX3N1YltxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3QnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9zdWIpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBzdWJQcm9kdWN0KXtcclxuICAgICAgICAgIGlmKGZpZWxkX3N1YltwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYoc3ViUHJvZHVjdC51bml0cyl7XHJcbiAgICAgICAgZm9yKGxldCBqPTA7IGo8c3ViUHJvZHVjdC51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncHJpY2VfaW1wb3J0JywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0LnVuaXRzW2pdKXtcclxuICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdC51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIGlmKHN1YlByb2R1Y3QudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHN1YlByb2R1Y3QudW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdC51bml0c1tqXSl7XHJcbiAgICAgICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoc3ViUHJvZHVjdC5sb3RzKXtcclxuICAgICAgICBmb3IobGV0IGo9MDsgajxzdWJQcm9kdWN0LmxvdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0LmxvdHNbal0pe1xyXG4gICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdC5sb3RzW2pdW3BdICE9IGZpZWxkX2xvdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3QobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBpZihzdWJQcm9kdWN0LmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHN1YlByb2R1Y3QubG90c1tqXVsnYmFyY29kZSddKTtcclxuICAgICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdC5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfSAgXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTYWxlc191cGRhdGVTdWJQcm9kdWN0KGlkX3N1YnByb2R1Y3Q6c3RyaW5nLCB2YWx1ZTphbnkpeyAgICBcclxuICBsZXQgZW5hYmxlX3JldHVybiA9IHRydWU7IFxyXG4gIGlmKCFpZF9zdWJwcm9kdWN0IHx8IGlkX3N1YnByb2R1Y3QgPT09JycpIHtcclxuICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIGlkX3N1YnByb2R1Y3QnKTtcclxuICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7ICBcclxuICBsZXQgZmllbGRfc3ViID0gW1snbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sXHJcbiAgICAgICAgICAgICAgICAgICBbJ2RheXNfZXhwX3dhcm5pbmcnLCdudW1iZXInXSwgWydkYXlzX2ltcG9ydF93YXJuaW5nJywnbnVtYmVyJ10sIFsnbG90cycsJ29iamVjdCddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ11dO1xyXG4gIFxyXG4gIGZvcihjb25zdCBwIGluIHZhbHVlKXtcclxuICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3N1Yil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX3N1YltxXVswXSl7XHJcbiAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICBpZih0eXBlb2YgdmFsdWVbcF0gIT0gZmllbGRfc3ViW3FdWzFdKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICB9ICAgICAgICAgICAgICBcclxuICB9IFxyXG4gIFxyXG4gIGlmKHZhbHVlLnVuaXRzKXtcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3ByaWNlMicsJ251bWJlciddLCBbJ3ByaWNlX2ltcG9ydCcsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10pOyAgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF09PT1xKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTsgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBcclxuICAgIH1cclxuICB9XHJcbiAgaWYodmFsdWUubG90cyl7XHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ19pZCcsJ3N0cmluZyddLCBbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSk7ICAgICAgXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfbG90W3BdWzBdID09PSBxKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTsgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcblxyXG4gICAgfVxyXG4gIH0gXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTYWxlc191cGRhdGVQcm9kdWN0X1R5cGUzKGlkX3Byb2R1Y3Q6c3RyaW5nLCB2YWx1ZTphbnkpeyAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgIFxyXG4gIGlmKCFpZF9wcm9kdWN0IHx8IGlkX3Byb2R1Y3QgPT09JycpIHtcclxuICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIGlkX3Byb2R1Y3QnKTtcclxuICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTsgIFxyXG4gIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWydtYW55c2l6ZScsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3R5cGUnLCdudW1iZXInXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J10sIFsncG9zaXRpb24nLCdzdHJpbmcnXSxbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgWydpZF9kZXNpZ25fYmFyY29kZScsICdzdHJpbmcnXSwgWydpZF9kZXNpZ25fYmFyY29kZV9sb3QnLCAnc3RyaW5nJ10sIFsnbnVtYmVyX2NvbHVtbicsICdudW1iZXInXSwgWydudW1iZXJfY29sdW1uX2xvdCcsICdudW1iZXInXSwgWydudW1iZXJfcHJpbnQnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50X2xvdCcsICdudW1iZXInXV07Ly9zYXUgbsOgeSBz4bq9IGdyb3VwIHBo4bqnbiBkZXNpZ25zIG7DoHkgbOG6oWlcclxuICBcclxuICBmb3IoY29uc3QgcCBpbiB2YWx1ZSl7XHJcbiAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9tYWluKXtcclxuICAgICAgaWYocCA9PT0gZmllbGRfbWFpbltxXVswXSl7XHJcbiAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICBpZih0eXBlb2YgdmFsdWVbcF0gIT0gZmllbGRfbWFpbltxXVsxXSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZighY2hlY2tfZHVwbGljYXRlKXsgICAgICBcclxuICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlJywgcCk7XHJcbiAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlOyAgICAgICAgICAgXHJcbiAgICB9ICAgICAgICAgICAgICBcclxuICB9IFxyXG4gIFxyXG4gIGlmKHZhbHVlLnVuaXRzKXtcclxuICAgIC8vY29uc29sZS5sb2coJy0tLS12YWx1ZScsIHZhbHVlKVxyXG4gICAgZm9yKGxldCBqPTA7IGo8dmFsdWUudW5pdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncHJpY2VfaW1wb3J0JywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsndW5pdCcsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3VuaXRbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZih2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2godmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS51bml0c1tqXSl7XHJcbiAgICAgICAgICBpZihmaWVsZF91bml0W3BdWzBdID09PSBxKXsgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICAgXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmKHZhbHVlLmxvdHMpe1xyXG4gICAgZm9yKGxldCBqPTA7IGo8dmFsdWUubG90cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgIGxldCBmaWVsZF9sb3QgPSBbWydfaWQnLCdzdHJpbmcnXSwgWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGF0ZV9leHAnLCdvYmplY3QnXSwgWydkYXRlX21mZycsJ29iamVjdCddLCBbJ2hpZGRlbicsJ2Jvb2xlYW4nXSwgWydsb3RfbnVtYmVyJywnc3RyaW5nJ11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbG90KXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX2xvdFtxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS5sb3RzW2pdW3BdICE9IGZpZWxkX2xvdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZih2YWx1ZS5sb3RzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaCh2YWx1ZS5sb3RzW2pdWydiYXJjb2RlJ10pOyAgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbG90KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUubG90c1tqXSl7XHJcbiAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgfSAgICAgICBcclxuICAgIH1cclxuICB9IFxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2FsZXNfdXBkYXRlUHJvZHVjdF9UeXBlM19mdyhpZF9wcm9kdWN0OnN0cmluZywgdmFsdWU6YW55KXsgIFxyXG4gIC8vY29uc29sZS5sb2coJy0tdmFsdWUnLCB2YWx1ZSk7IFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgIFxyXG4gIGlmKCFpZF9wcm9kdWN0IHx8IGlkX3Byb2R1Y3QgPT09JycpIHtcclxuICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIGlkX3Byb2R1Y3QnKTtcclxuICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTsgIFxyXG4gIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWydtYW55c2l6ZScsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3R5cGUnLCdudW1iZXInXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICBbJ3F1YW50aXR5JywnbnVtYmVyJ10sIFsncXVhbnRpdHlfYnJhbmNoJywnb2JqZWN0J10sWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnZGF5c19pbXBvcnRfd2FybmluZycsJ251bWJlciddLCBbJ2xvdHMnLCdvYmplY3QnXSwgWydwb3NpdGlvbicsJ3N0cmluZyddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnaWRfZGVzaWduX2JhcmNvZGUnLCAnc3RyaW5nJ10sIFsnaWRfZGVzaWduX2JhcmNvZGVfbG90JywgJ3N0cmluZyddLCBbJ251bWJlcl9jb2x1bW4nLCAnbnVtYmVyJ10sIFsnbnVtYmVyX2NvbHVtbl9sb3QnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludF9sb3QnLCAnbnVtYmVyJ11dOy8vc2F1IG7DoHkgc+G6vSBncm91cCBwaOG6p24gZGVzaWducyBuw6B5IGzhuqFpXHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZW9mIHZhbHVlW3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgIGlmKHZhbHVlW3BdWydpbnZlbnRvcnknXSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfSAgICAgICAgICAgICAgXHJcbiAgfSBcclxuICBcclxuICBpZih2YWx1ZS51bml0cyl7XHJcbiAgICAvL2NvbnNvbGUubG9nKCctLS0tdmFsdWUnLCB2YWx1ZSlcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3ByaWNlMicsJ251bWJlciddLCBbJ3ByaWNlX2ltcG9ydCcsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10pOyAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7ICAgICAgICAgICBcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICBpZih2YWx1ZS5sb3RzKXtcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLmxvdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfbG90ID0gW1snX2lkJywnc3RyaW5nJ10sIFsnYmFyY29kZScsJ3N0cmluZyddLCBbJ2RhdGVfZXhwJywnb2JqZWN0J10sIFsnZGF0ZV9tZmcnLCdvYmplY3QnXSwgWydoaWRkZW4nLCdib29sZWFuJ10sIFsnbG90X251bWJlcicsJ3N0cmluZyddLCBbJ3F1YW50aXR5JywnbnVtYmVyJ10sIFsncXVhbnRpdHlfYnJhbmNoJywnb2JqZWN0J11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbG90KXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX2xvdFtxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKChwID09PSAnZGF0ZV9leHAnKXx8KHAgPT09ICdkYXRlX21mZycpKXtcclxuICAgICAgICAgICAgICB2YWx1ZS5sb3RzW2pdW3BdID0gbmV3IERhdGUodmFsdWUubG90c1tqXVtwXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH0gXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTYWxlc191cGRhdGVQcm9kdWN0X1R5cGUyKGlkX3Byb2R1Y3Q6c3RyaW5nLCB2YWx1ZTphbnkpeyAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgIFxyXG4gIGlmKCFpZF9wcm9kdWN0IHx8IGlkX3Byb2R1Y3QgPT09JycpIHtcclxuICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIGlkX3Byb2R1Y3QnKTtcclxuICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTsgIFxyXG4gIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWydtYW55c2l6ZScsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3R5cGUnLCdudW1iZXInXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J10sWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnaWRfZGVzaWduX2JhcmNvZGUnLCAnc3RyaW5nJ10sIFsnaWRfZGVzaWduX2JhcmNvZGVfbG90JywgJ3N0cmluZyddLCBbJ251bWJlcl9jb2x1bW4nLCAnbnVtYmVyJ10sIFsnbnVtYmVyX2NvbHVtbl9sb3QnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludF9sb3QnLCAnbnVtYmVyJ11dOy8vc2F1IG7DoHkgc+G6vSBncm91cCBwaOG6p24gZGVzaWducyBuw6B5IGzhuqFpXHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZW9mIHZhbHVlW3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgIH0gICAgICAgICAgICAgIFxyXG4gIH0gXHJcbiAgXHJcbiAgaWYodmFsdWUudW5pdHMpe1xyXG4gICAgLy9jb25zb2xlLmxvZygnLS0tLXZhbHVlJywgdmFsdWUpXHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydwcmljZTInLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyd1bml0Jywnc3RyaW5nJ11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiB2YWx1ZS51bml0c1tqXSl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfdW5pdFtxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaCh2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddKTsgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgICBcclxuICAgIH1cclxuICB9XHJcbiAgaWYodmFsdWUubG90cyl7XHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ19pZCcsJ3N0cmluZyddLCBbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH0gXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1NhbGVzX3VwZGF0ZVByb2R1Y3RfVHlwZTUoaWRfcHJvZHVjdDpzdHJpbmcsIHZhbHVlOmFueSl7ICAgXHJcbiAgbGV0IGVuYWJsZV9yZXR1cm4gPSB0cnVlOyAgXHJcbiAgaWYoIWlkX3Byb2R1Y3QgfHwgaWRfcHJvZHVjdCA9PT0nJykge1xyXG4gICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gaWRfcHJvZHVjdCcpO1xyXG4gICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIGxldCBiYXJjb2RlcyA9IG5ldyBBcnJheSgpOyAgXHJcbiAgbGV0IGZpZWxkX21haW4gPSBbWydicmFuZCcsJ3N0cmluZyddLCBbJ3RheCcsICdudW1iZXInXSwgWyd2YXRfcmVkdWN0aW9uJywnbnVtYmVyJ10sIFsnaWRfY2F0ZWdvcnknLCdzdHJpbmcnXSwgWydpbWcnLCdzdHJpbmcnXSwgWydtYW55bG90JywnYm9vbGVhbiddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndHlwZScsJ251bWJlciddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkYXlzX2V4cF93YXJuaW5nJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgIFsnZGF5c19pbXBvcnRfd2FybmluZycsJ251bWJlciddLCBbJ2xvdHMnLCdvYmplY3QnXSwgWydkZXNjcmliZScsJ3N0cmluZyddLFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ2lkX2Rlc2lnbl9iYXJjb2RlJywgJ3N0cmluZyddLCBbJ2lkX2Rlc2lnbl9iYXJjb2RlX2xvdCcsICdzdHJpbmcnXSwgWydudW1iZXJfY29sdW1uJywgJ251bWJlciddLCBbJ251bWJlcl9jb2x1bW5fbG90JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludCcsICdudW1iZXInXSwgWydudW1iZXJfcHJpbnRfbG90JywgJ251bWJlciddXTsvL3NhdSBuw6B5IHPhur0gZ3JvdXAgcGjhuqduIGRlc2lnbnMgbsOgeSBs4bqhaVxyXG4gIFxyXG4gIGZvcihjb25zdCBwIGluIHZhbHVlKXtcclxuICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgIGZvcihjb25zdCBxIGluIGZpZWxkX21haW4pe1xyXG4gICAgICBpZihwID09PSBmaWVsZF9tYWluW3FdWzBdKXtcclxuICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGVvZiB2YWx1ZVtwXSAhPSBmaWVsZF9tYWluW3FdWzFdKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICB9ICAgICAgICAgICAgICBcclxuICB9IFxyXG4gIFxyXG4gIGlmKHZhbHVlLnVuaXRzKXsgICAgXHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10pOyAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgICBcclxuICAgIH1cclxuICB9XHJcbiAgaWYodmFsdWUubG90cyl7XHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ19pZCcsJ3N0cmluZyddLCBbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH0gXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDYWZlX2FkZFByb2R1Y3RBbmRTdWJzUHJvZHVjdF90eXBlMShwcm9kdWN0OmFueSwgc3ViUHJvZHVjdEFycmF5OmFueSkgey8vdHlwZTEga28gY8OzIGxvdCAgICBcclxuICAgIC8vY29uc29sZS5sb2coJ2hlbGxvIGNoZWNrU2FsZXNfYWRkUHJvZHVjdEFuZFN1YnNQcm9kdWN0Jyk7XHJcbiAgICAvL2RlbGV0ZSBwcm9kdWN0LnByaWNlMjtcclxuICAgIC8vZGVsZXRlIHByb2R1Y3QudW5pdDtcclxuICAgIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgIFxyXG4gICAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7XHJcbiAgICBpZihwcm9kdWN0Lm1hbnlzaXplKXsvL21hbnlzaXplID0gdHJ1ZVxyXG4gICAgICBsZXQgZmllbGRfbWFpbiA9IFtbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWyd0eXBlJywnbnVtYmVyJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsncHJvcGVydGllcycsJ29iamVjdCddLCBbJ3RvcHBpbmdzJywnb2JqZWN0J10sIFsndGltZV93YXJuaW5nJywnbnVtYmVyJ10sIFsnZGVzY3JpYmUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddXTsgICAgICAgICAgIFxyXG5cclxuICAgICAgZm9yKGNvbnN0IHAgaW4gcHJvZHVjdCl7ICAgICAgICBcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX21haW4pe1xyXG4gICAgICAgICAgICBpZihwID09PSBmaWVsZF9tYWluW3FdWzBdKXtcclxuICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0W3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHByb2R1Y3Qpe1xyXG4gICAgICAgICAgaWYoZmllbGRfbWFpbltwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0JywgZmllbGRfbWFpbltwXVswXSk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIFxyXG4gICAgICBmb3IobGV0IGk9MDsgaTxzdWJQcm9kdWN0QXJyYXkubGVuZ3RoOyBpKyspeyAgICAgICAgICAgIFxyXG4gICAgICAgIGxldCBmaWVsZF9zdWIgPSBbWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ11dOyAgICAgICAgICAgICAgICBcclxuICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0QXJyYXlbaV0pe1xyXG4gICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfc3ViKXtcclxuICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF9zdWJbcV1bMF0pe1xyXG4gICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzdWJQcm9kdWN0QXJyYXlbaV1bcF0gIT0gZmllbGRfc3ViW3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5JywgcCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXknLCBwKTtcclxuICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICB9IFxyXG4gICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3N1Yil7XHJcbiAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICBmb3IoY29uc3QgcSBpbiBzdWJQcm9kdWN0QXJyYXlbaV0pe1xyXG4gICAgICAgICAgICBpZihmaWVsZF9zdWJbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3RBcnJheScsZmllbGRfc3ViW3BdWzBdKTtcclxuICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICB9IFxyXG4gICAgICAgIGlmKHN1YlByb2R1Y3RBcnJheVtpXS51bml0cyl7XHJcbiAgICAgICAgICBmb3IobGV0IGo9MDsgajxzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsndW5pdCcsJ3N0cmluZyddXTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHAgaW4gc3ViUHJvZHVjdEFycmF5W2ldLnVuaXRzW2pdKXtcclxuICAgICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgaWYoc3ViUHJvZHVjdEFycmF5W2ldLnVuaXRzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaChzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICAgICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdEFycmF5W2ldLnVuaXRzW2pdKXtcclxuICAgICAgICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5KHVuaXRzKScsIGZpZWxkX3VuaXRbcF1bMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICB9ICAgICAgXHJcbiAgICB9ZWxzZXsvL21hbnlzaXplID0gZmFsc2UgICAgICAgICAgIFxyXG4gICAgICBsZXQgZmllbGRfbWFpbiA9IFtbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWyd0eXBlJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3Byb3BlcnRpZXMnLCdvYmplY3QnXSwgWyd0b3BwaW5ncycsJ29iamVjdCddLCBbJ3RpbWVfd2FybmluZycsJ251bWJlciddLCBbJ2Rlc2NyaWJlJywnc3RyaW5nJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd1bml0cycsJ29iamVjdCddLFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHByb2R1Y3QpeyAgICAgICAgICBcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX21haW4peyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihwID09PSBmaWVsZF9tYWluW3FdWzBdKXtcclxuICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFtwXSAhPSBmaWVsZF9tYWluW3FdWzFdKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QnLCBwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHByb2R1Y3Qpe1xyXG4gICAgICAgICAgaWYoZmllbGRfbWFpbltwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0JywgZmllbGRfbWFpbltwXVswXSk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZihwcm9kdWN0LnVuaXRzKXtcclxuICAgICAgICBmb3IobGV0IGo9MDsgajxwcm9kdWN0LnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydwcmljZTInLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICBmb3IoY29uc3QgcCBpbiBwcm9kdWN0LnVuaXRzW2pdKXtcclxuICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZihwLmluZGV4T2YoJ3dlYmFwcF8nKSA9PT0gLTEpe1xyXG4gICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgICAgICAgaWYocCA9PT0gZmllbGRfdW5pdFtxXVswXSl7XHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0LnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIGlmKHByb2R1Y3QudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHByb2R1Y3QudW5pdHNbal1bJ2JhcmNvZGUnXSk7XHJcbiAgICAgICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBwcm9kdWN0LnVuaXRzW2pdKXtcclxuICAgICAgICAgICAgICBpZihmaWVsZF91bml0W3BdWzBdID09PSBxKXtcclxuICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCh1bml0cyknLCBmaWVsZF91bml0W3BdWzBdKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICAgXHJcbiAgICB9ICAgIFxyXG4gICAgZm9yKGxldCBpPTA7IGk8YmFyY29kZXMubGVuZ3RoLTE7IGkrKyl7ICAgICAgICBcclxuICAgICAgZm9yKGxldCBqPWkrMTsgajxiYXJjb2Rlcy5sZW5ndGg7IGorKyl7ICAgICAgICAgIFxyXG4gICAgICAgIGlmKGJhcmNvZGVzW2ldID09PSBiYXJjb2Rlc1tqXSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBi4buLIHRyw7luZyBiYXJjb2RlJyk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gIFxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDYWZlX2FkZFByb2R1Y3RBbmRTdWJzUHJvZHVjdF90eXBlMyhwcm9kdWN0OmFueSwgc3ViUHJvZHVjdEFycmF5OmFueSkgeyAgICBcclxuICAvL2NvbnNvbGUubG9nKCdoZWxsbyBjaGVja1NhbGVzX2FkZFByb2R1Y3RBbmRTdWJzUHJvZHVjdCcpO1xyXG4gICAgZGVsZXRlIHByb2R1Y3QucHJpY2UyO1xyXG4gICAgbGV0IGVuYWJsZV9yZXR1cm4gPSB0cnVlOyAgXHJcbiAgICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTtcclxuICAgIGlmKHByb2R1Y3QubWFueXNpemUpey8vbWFueXNpemUgPSB0cnVlXHJcbiAgICAgIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueXNpemUnLCdib29sZWFuJ10sIFsnbmFtZScsJ3N0cmluZyddLCBbJ3R5cGUnLCdudW1iZXInXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddXTsgICAgICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBwcm9kdWN0KXsgICAgICAgIFxyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZihwLmluZGV4T2YoJ3dlYmFwcF8nKSA9PT0gLTEpe1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgICAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RbcF0gIT0gZmllbGRfbWFpbltxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9tYWluKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gcHJvZHVjdCl7XHJcbiAgICAgICAgICBpZihmaWVsZF9tYWluW3BdWzBdID09PSBxKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QnLCBmaWVsZF9tYWluW3BdWzBdKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBcclxuICAgICAgXHJcbiAgICAgIGZvcihsZXQgaT0wOyBpPHN1YlByb2R1Y3RBcnJheS5sZW5ndGg7IGkrKyl7ICAgICAgICAgICAgXHJcbiAgICAgICAgbGV0IGZpZWxkX3N1YiA9IFtbJ21hbnlsb3QnLCdib29sZWFuJ10sIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndW5pdHMnLCdvYmplY3QnXSwgWyd3YXJuaW5nX251bWJlcicsJ251bWJlciddLCBbJ2l0ZW1fY29kZScsJ3N0cmluZyddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ11dO1xyXG4gICAgICAgIGlmKHN1YlByb2R1Y3RBcnJheVtpXS5tYW55bG90KXtcclxuICAgICAgICAgIGZpZWxkX3N1YiA9IFtbJ21hbnlsb3QnLCdib29sZWFuJ10sIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndW5pdHMnLCdvYmplY3QnXSwgWyd3YXJuaW5nX251bWJlcicsJ251bWJlciddLCBbJ2l0ZW1fY29kZScsJ3N0cmluZyddLCBbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBbJ2RheXNfZXhwX3dhcm5pbmcnLCdudW1iZXInXSwgWydkYXlzX2ltcG9ydF93YXJuaW5nJywnbnVtYmVyJ10sIFsnbG90cycsJ29iamVjdCddXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGNvbnN0IHAgaW4gc3ViUHJvZHVjdEFycmF5W2ldKXtcclxuICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgIGlmKHAuaW5kZXhPZignd2ViYXBwXycpID09PSAtMSl7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3N1Yil7XHJcbiAgICAgICAgICAgICAgaWYocCA9PT0gZmllbGRfc3ViW3FdWzBdKXtcclxuICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdEFycmF5W2ldW3BdICE9IGZpZWxkX3N1YltxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3RBcnJheScsIHApO1xyXG4gICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdEFycmF5JywgcCk7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSBcclxuICAgICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9zdWIpe1xyXG4gICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdEFycmF5W2ldKXtcclxuICAgICAgICAgICAgaWYoZmllbGRfc3ViW3BdWzBdID09PSBxKXtcclxuICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXknLCBmaWVsZF9zdWJbcF1bMF0pO1xyXG4gICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgaWYoc3ViUHJvZHVjdEFycmF5W2ldLnVuaXRzKXtcclxuICAgICAgICAgIGZvcihsZXQgaj0wOyBqPHN1YlByb2R1Y3RBcnJheVtpXS51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydwcmljZTInLCdudW1iZXInXSwgWydwcmljZV9pbXBvcnQnLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyd1bml0Jywnc3RyaW5nJ11dO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal0pe1xyXG4gICAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZihwLmluZGV4T2YoJ3dlYmFwcF8nKSA9PT0gLTEpe1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3VuaXRbcV1bMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN1YlByb2R1Y3RBcnJheVtpXS51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3RBcnJheSh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBpZihzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHN1YlByb2R1Y3RBcnJheVtpXS51bml0c1tqXVsnYmFyY29kZSddKTsgICAgXHJcbiAgICAgICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBzdWJQcm9kdWN0QXJyYXlbaV0udW5pdHNbal0pe1xyXG4gICAgICAgICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzKXtcclxuICAgICAgICAgIGZvcihsZXQgaj0wOyBqPHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBwIGluIHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgICAgICAgIGlmKHAgPT09IGZpZWxkX2xvdFtxXVswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdEFycmF5W2ldLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3RBcnJheShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3RBcnJheShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBpZihzdWJQcm9kdWN0QXJyYXlbaV0ubG90c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2goc3ViUHJvZHVjdEFycmF5W2ldLmxvdHNbal1bJ2JhcmNvZGUnXSk7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGZvcihjb25zdCBxIGluIHN1YlByb2R1Y3RBcnJheVtpXS5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0QXJyYXkobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1lbHNley8vbWFueXNpemUgPSBmYWxzZSAgICAgICAgXHJcbiAgICAgIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWydtYW55c2l6ZScsJ2Jvb2xlYW4nXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndHlwZScsJ251bWJlciddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddXTtcclxuICAgICAgaWYocHJvZHVjdC5tYW55bG90KXtcclxuICAgICAgICBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWydtYW55c2l6ZScsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICAgIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndHlwZScsJ251bWJlciddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgWydkYXlzX2V4cF93YXJuaW5nJywnbnVtYmVyJ10sIFsnZGF5c19pbXBvcnRfd2FybmluZycsJ251bWJlciddLCBbJ2xvdHMnLCdvYmplY3QnXV07XHJcbiAgICAgIH1cclxuICAgICAgZm9yKGNvbnN0IHAgaW4gcHJvZHVjdCl7ICAgICAgICAgIFxyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZihwLmluZGV4T2YoJ3dlYmFwcF8nKSA9PT0gLTEpe1xyXG4gICAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0W3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9tYWluKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gcHJvZHVjdCl7XHJcbiAgICAgICAgICBpZihmaWVsZF9tYWluW3BdWzBdID09PSBxKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QnLCBmaWVsZF9tYWluW3BdWzBdKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHByb2R1Y3QudW5pdHMpe1xyXG4gICAgICAgIGZvcihsZXQgaj0wOyBqPHByb2R1Y3QudW5pdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3ByaWNlMicsJ251bWJlciddLCBbJ3ByaWNlX2ltcG9ydCcsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFsndW5pdCcsJ3N0cmluZyddXTtcclxuICAgICAgICAgIGZvcihjb25zdCBwIGluIHByb2R1Y3QudW5pdHNbal0pe1xyXG4gICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmKHAuaW5kZXhPZignd2ViYXBwXycpID09PSAtMSl7XHJcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3QudW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgaWYocHJvZHVjdC51bml0c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2gocHJvZHVjdC51bml0c1tqXVsnYmFyY29kZSddKTtcclxuICAgICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBxIGluIHByb2R1Y3QudW5pdHNbal0pe1xyXG4gICAgICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0KHVuaXRzKScsIGZpZWxkX3VuaXRbcF1bMF0pO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZihwcm9kdWN0LmxvdHMpe1xyXG4gICAgICAgIGZvcihsZXQgaj0wOyBqPHByb2R1Y3QubG90cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICBsZXQgZmllbGRfbG90ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RhdGVfZXhwJywnb2JqZWN0J10sIFsnZGF0ZV9tZmcnLCdvYmplY3QnXSwgWydoaWRkZW4nLCdib29sZWFuJ10sIFsnbG90X251bWJlcicsJ3N0cmluZyddXTtcclxuICAgICAgICAgIGZvcihjb25zdCBwIGluIHByb2R1Y3QubG90c1tqXSl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYocC5pbmRleE9mKCd3ZWJhcHBfJykgPT09IC0xKXtcclxuICAgICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3QubG90c1tqXVtwXSAhPSBmaWVsZF9sb3RbcV1bMV0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHByb2R1Y3QobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gcHJvZHVjdChsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBpZihwcm9kdWN0LmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHByb2R1Y3QubG90c1tqXVsnYmFyY29kZSddKTtcclxuICAgICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gcHJvZHVjdC5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBwcm9kdWN0KGxvdHMpJywgZmllbGRfbG90W3BdWzBdKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgIH0gICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgZm9yKGxldCBpPTA7IGk8YmFyY29kZXMubGVuZ3RoLTE7IGkrKyl7ICAgICAgICBcclxuICAgICAgZm9yKGxldCBqPWkrMTsgajxiYXJjb2Rlcy5sZW5ndGg7IGorKyl7ICAgICAgICAgIFxyXG4gICAgICAgIGlmKGJhcmNvZGVzW2ldID09PSBiYXJjb2Rlc1tqXSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBi4buLIHRyw7luZyBiYXJjb2RlJyk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gIFxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDYWZlX2FkZFN1YlByb2R1Y3RfdHlwZTEoaWRfcHJvZHVjdDpzdHJpbmcsIHN1YlByb2R1Y3Q6YW55KXsgICAgXHJcbiAgbGV0IGVuYWJsZV9yZXR1cm4gPSB0cnVlOyBcclxuICBpZighaWRfcHJvZHVjdCB8fCBpZF9wcm9kdWN0ID09PScnKSB7XHJcbiAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBpZF9wcm9kdWN0Jyk7XHJcbiAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7XHJcbiAgbGV0IGZpZWxkX3N1YiA9IFtbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXV07XHJcblxyXG4gIGZvcihjb25zdCBwIGluIHN1YlByb2R1Y3Qpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfc3ViKXtcclxuICAgICAgaWYocCA9PT0gZmllbGRfc3ViW3FdWzBdKXtcclxuICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBzdWJQcm9kdWN0W3BdICE9IGZpZWxkX3N1YltxXVsxXSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCcsIHApO1xyXG4gICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgIH0gICAgICAgICAgICAgIFxyXG4gIH0gXHJcbiAgZm9yKGNvbnN0IHAgaW4gZmllbGRfc3ViKXtcclxuICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgIGZvcihjb25zdCBxIGluIHN1YlByb2R1Y3Qpe1xyXG4gICAgICBpZihmaWVsZF9zdWJbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3QnLCBwKTtcclxuICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICB9ICAgICAgICAgICAgICBcclxuICB9IFxyXG4gIGlmKHN1YlByb2R1Y3QudW5pdHMpe1xyXG4gICAgZm9yKGxldCBqPTA7IGo8c3ViUHJvZHVjdC51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydwcmljZTInLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyd1bml0Jywnc3RyaW5nJ11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0LnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHN1YlByb2R1Y3QudW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYoc3ViUHJvZHVjdC51bml0c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2goc3ViUHJvZHVjdC51bml0c1tqXVsnYmFyY29kZSddKTsgICAgXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBzdWJQcm9kdWN0LnVuaXRzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IFxyXG4gICAgfVxyXG4gIH0gIFxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ2FmZV9hZGRTdWJQcm9kdWN0X3R5cGUzKGlkX3Byb2R1Y3Q6c3RyaW5nLCBzdWJQcm9kdWN0OmFueSl7ICAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgXHJcbiAgaWYoIWlkX3Byb2R1Y3QgfHwgaWRfcHJvZHVjdCA9PT0nJykge1xyXG4gICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gaWRfcHJvZHVjdCcpO1xyXG4gICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIGxldCBiYXJjb2RlcyA9IG5ldyBBcnJheSgpO1xyXG4gIGxldCBmaWVsZF9zdWIgPSBbWydtYW55bG90JywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddXTtcclxuICBpZihzdWJQcm9kdWN0Lm1hbnlsb3Qpe1xyXG4gICAgZmllbGRfc3ViID0gW1snbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sIFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J11dO1xyXG4gIH1lbHNle1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfc3ViKXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3N1YltxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzdWJQcm9kdWN0W3BdICE9IGZpZWxkX3N1YltxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCcsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3QnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9zdWIpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBzdWJQcm9kdWN0KXtcclxuICAgICAgICAgIGlmKGZpZWxkX3N1YltwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0JywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYoc3ViUHJvZHVjdC51bml0cyl7XHJcbiAgICAgICAgZm9yKGxldCBqPTA7IGo8c3ViUHJvZHVjdC51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncHJpY2VfaW1wb3J0JywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0LnVuaXRzW2pdKXtcclxuICAgICAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdC51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIGlmKHN1YlByb2R1Y3QudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHN1YlByb2R1Y3QudW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdC51bml0c1tqXSl7XHJcbiAgICAgICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gc3ViUHJvZHVjdCh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoc3ViUHJvZHVjdC5sb3RzKXtcclxuICAgICAgICBmb3IobGV0IGo9MDsgajxzdWJQcm9kdWN0LmxvdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgICAgICBmb3IoY29uc3QgcCBpbiBzdWJQcm9kdWN0LmxvdHNbal0pe1xyXG4gICAgICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygc3ViUHJvZHVjdC5sb3RzW2pdW3BdICE9IGZpZWxkX2xvdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHN1YlByb2R1Y3QobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBpZihzdWJQcm9kdWN0LmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHN1YlByb2R1Y3QubG90c1tqXVsnYmFyY29kZSddKTtcclxuICAgICAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHEgaW4gc3ViUHJvZHVjdC5sb3RzW2pdKXtcclxuICAgICAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBzdWJQcm9kdWN0KGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfSAgXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDYWZlX3VwZGF0ZVN1YlByb2R1Y3RfdHlwZTEoaWRfc3VicHJvZHVjdDpzdHJpbmcsIHZhbHVlOmFueSl7ICAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgXHJcbiAgaWYoIWlkX3N1YnByb2R1Y3QgfHwgaWRfc3VicHJvZHVjdCA9PT0nJykge1xyXG4gICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gaWRfc3VicHJvZHVjdCcpO1xyXG4gICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTsgIFxyXG4gIGxldCBmaWVsZF9zdWIgPSBbWydtYW55bG90JywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXV07XHJcbiAgICAgICAgICAgICAgICAgICAgIFxyXG4gIGZvcihjb25zdCBwIGluIHZhbHVlKXtcclxuICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3N1Yil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX3N1YltxXVswXSl7XHJcbiAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICBpZih0eXBlb2YgdmFsdWVbcF0gIT0gZmllbGRfc3ViW3FdWzFdKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICB9ICAgICAgICAgICAgICBcclxuICB9IFxyXG4gIFxyXG4gIGlmKHZhbHVlLnVuaXRzKXtcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3ByaWNlMicsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10pOyAgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF09PT1xKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTsgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDYWZlX3VwZGF0ZVN1YlByb2R1Y3RfdHlwZTMoaWRfc3VicHJvZHVjdDpzdHJpbmcsIHZhbHVlOmFueSl7ICAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgXHJcbiAgaWYoIWlkX3N1YnByb2R1Y3QgfHwgaWRfc3VicHJvZHVjdCA9PT0nJykge1xyXG4gICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gaWRfc3VicHJvZHVjdCcpO1xyXG4gICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTsgIFxyXG4gIGxldCBmaWVsZF9zdWIgPSBbWydtYW55bG90JywnYm9vbGVhbiddLCBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgWydkYXlzX2V4cF93YXJuaW5nJywnbnVtYmVyJ10sIFsnZGF5c19pbXBvcnRfd2FybmluZycsJ251bWJlciddLCBbJ2xvdHMnLCdvYmplY3QnXV07XHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfc3ViKXtcclxuICAgICAgaWYocCA9PT0gZmllbGRfc3ViW3FdWzBdKXtcclxuICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGVvZiB2YWx1ZVtwXSAhPSBmaWVsZF9zdWJbcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgIH0gICAgICAgICAgICAgIFxyXG4gIH0gXHJcbiAgXHJcbiAgaWYodmFsdWUudW5pdHMpe1xyXG4gICAgZm9yKGxldCBqPTA7IGo8dmFsdWUudW5pdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncHJpY2VfaW1wb3J0JywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsndW5pdCcsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3VuaXRbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZih2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2godmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXT09PXEpe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlOyAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICBpZih2YWx1ZS5sb3RzKXtcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLmxvdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfbG90ID0gW1snX2lkJywnc3RyaW5nJ10sIFsnYmFyY29kZScsJ3N0cmluZyddLCBbJ2RhdGVfZXhwJywnb2JqZWN0J10sIFsnZGF0ZV9tZmcnLCdvYmplY3QnXSwgWydoaWRkZW4nLCdib29sZWFuJ10sIFsnbG90X251bWJlcicsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUubG90c1tqXSl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF9sb3RbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUubG90c1tqXVtwXSAhPSBmaWVsZF9sb3RbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUubG90c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2godmFsdWUubG90c1tqXVsnYmFyY29kZSddKTsgICAgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbG90KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUubG90c1tqXSl7XHJcbiAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuXHJcbiAgICB9XHJcbiAgfSBcclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NhZmVfdXBkYXRlUHJvZHVjdF9UeXBlMShpZF9wcm9kdWN0OnN0cmluZywgdmFsdWU6YW55KXsgICBcclxuICBsZXQgZW5hYmxlX3JldHVybiA9IHRydWU7ICBcclxuICBpZighaWRfcHJvZHVjdCB8fCBpZF9wcm9kdWN0ID09PScnKSB7XHJcbiAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBpZF9wcm9kdWN0Jyk7XHJcbiAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7ICBcclxuICBsZXQgZmllbGRfbWFpbiA9IFtbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndHlwZScsJ251bWJlciddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXSwgIFxyXG4gICAgICAgICAgICAgICAgICAgIFsnaWRfZGVzaWduX2JhcmNvZGUnLCAnc3RyaW5nJ10sIFsnaWRfZGVzaWduX2JhcmNvZGVfbG90JywgJ3N0cmluZyddLCBbJ251bWJlcl9jb2x1bW4nLCAnbnVtYmVyJ10sIFsnbnVtYmVyX2NvbHVtbl9sb3QnLCAnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgIFsnbnVtYmVyX3ByaW50JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludF9sb3QnLCAnbnVtYmVyJ11dOy8vc2F1IG7DoHkgc+G6vSBncm91cCBwaOG6p24gZGVzaWducyBuw6B5IGzhuqFpXHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZW9mIHZhbHVlW3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7ICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTsgICAgICAgICAgIFxyXG4gICAgfSAgICAgICAgICAgICAgXHJcbiAgfSBcclxuICBcclxuICBpZih2YWx1ZS51bml0cyl7XHJcbiAgICAvL2NvbnNvbGUubG9nKCctLS0tdmFsdWUnLCB2YWx1ZSlcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3ByaWNlMicsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10pOyAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7ICAgICAgICAgICBcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NhZmVfdXBkYXRlUHJvZHVjdF9UeXBlMyhpZF9wcm9kdWN0OnN0cmluZywgdmFsdWU6YW55KXsgICBcclxuICBsZXQgZW5hYmxlX3JldHVybiA9IHRydWU7ICBcclxuICBpZighaWRfcHJvZHVjdCB8fCBpZF9wcm9kdWN0ID09PScnKSB7XHJcbiAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBpZF9wcm9kdWN0Jyk7XHJcbiAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7ICBcclxuICBsZXQgZmllbGRfbWFpbiA9IFtbJ2JyYW5kJywnc3RyaW5nJ10sIFsndGF4JywgJ251bWJlciddLCBbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlsb3QnLCdib29sZWFuJ10sIFsnbWFueXNpemUnLCdib29sZWFuJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd0eXBlJywnbnVtYmVyJ10sIFsndW5pdHMnLCdvYmplY3QnXSwgWyd3YXJuaW5nX251bWJlcicsJ251bWJlciddLCBbJ2l0ZW1fY29kZScsJ3N0cmluZyddLCBbJ2RheXNfZXhwX3dhcm5pbmcnLCdudW1iZXInXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J10sIFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ2lkX2Rlc2lnbl9iYXJjb2RlJywgJ3N0cmluZyddLCBbJ2lkX2Rlc2lnbl9iYXJjb2RlX2xvdCcsICdzdHJpbmcnXSwgWydudW1iZXJfY29sdW1uJywgJ251bWJlciddLCBbJ251bWJlcl9jb2x1bW5fbG90JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludCcsICdudW1iZXInXSwgWydudW1iZXJfcHJpbnRfbG90JywgJ251bWJlciddXTsvL3NhdSBuw6B5IHPhur0gZ3JvdXAgcGjhuqduIGRlc2lnbnMgbsOgeSBs4bqhaVxyXG4gIFxyXG4gIGZvcihjb25zdCBwIGluIHZhbHVlKXtcclxuICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgIGZvcihjb25zdCBxIGluIGZpZWxkX21haW4pe1xyXG4gICAgICBpZihwID09PSBmaWVsZF9tYWluW3FdWzBdKXtcclxuICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGVvZiB2YWx1ZVtwXSAhPSBmaWVsZF9tYWluW3FdWzFdKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKCFjaGVja19kdXBsaWNhdGUpeyAgICAgIFxyXG4gICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7ICAgICAgICAgICBcclxuICAgIH0gICAgICAgICAgICAgIFxyXG4gIH0gXHJcbiAgXHJcbiAgaWYodmFsdWUudW5pdHMpe1xyXG4gICAgLy9jb25zb2xlLmxvZygnLS0tLXZhbHVlJywgdmFsdWUpXHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydwcmljZTInLCdudW1iZXInXSwgWydwcmljZV9pbXBvcnQnLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyd1bml0Jywnc3RyaW5nJ11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiB2YWx1ZS51bml0c1tqXSl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfdW5pdFtxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaCh2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddKTsgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgICBcclxuICAgIH1cclxuICB9XHJcbiAgaWYodmFsdWUubG90cyl7XHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ19pZCcsJ3N0cmluZyddLCBbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH0gXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDYWZlX3VwZGF0ZVByb2R1Y3RfVHlwZTFfZncoaWRfcHJvZHVjdDpzdHJpbmcsIHZhbHVlOmFueSl7ICBcclxuICAvL2NvbnNvbGUubG9nKCctLXZhbHVlJywgdmFsdWUpOyBcclxuICBsZXQgZW5hYmxlX3JldHVybiA9IHRydWU7ICBcclxuICBpZighaWRfcHJvZHVjdCB8fCBpZF9wcm9kdWN0ID09PScnKSB7XHJcbiAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBpZF9wcm9kdWN0Jyk7XHJcbiAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7ICBcclxuICBsZXQgZmllbGRfbWFpbiA9IFtbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndHlwZScsJ251bWJlciddLCBbJ3VuaXRzJywnb2JqZWN0J10sXHJcbiAgICAgICAgICAgICAgICAgICAgWydxdWFudGl0eScsJ251bWJlciddLCBbJ3F1YW50aXR5X2JyYW5jaCcsJ29iamVjdCddLFsnZGVsZXRlX2hpZGRlbicsJ2Jvb2xlYW4nXSwgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgWydpZF9kZXNpZ25fYmFyY29kZScsICdzdHJpbmcnXSwgWydpZF9kZXNpZ25fYmFyY29kZV9sb3QnLCAnc3RyaW5nJ10sIFsnbnVtYmVyX2NvbHVtbicsICdudW1iZXInXSwgWydudW1iZXJfY29sdW1uX2xvdCcsICdudW1iZXInXSwgWydudW1iZXJfcHJpbnQnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50X2xvdCcsICdudW1iZXInXV07Ly9zYXUgbsOgeSBz4bq9IGdyb3VwIHBo4bqnbiBkZXNpZ25zIG7DoHkgbOG6oWlcclxuICBcclxuICBmb3IoY29uc3QgcCBpbiB2YWx1ZSl7XHJcbiAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9tYWluKXtcclxuICAgICAgaWYocCA9PT0gZmllbGRfbWFpbltxXVswXSl7XHJcbiAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICBpZih0eXBlb2YgdmFsdWVbcF0gIT0gZmllbGRfbWFpbltxXVsxXSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgaWYodmFsdWVbcF1bJ2ludmVudG9yeSddID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9ICAgICAgICAgICAgICBcclxuICB9IFxyXG4gIFxyXG4gIGlmKHZhbHVlLnVuaXRzKXtcclxuICAgIC8vY29uc29sZS5sb2coJy0tLS12YWx1ZScsIHZhbHVlKVxyXG4gICAgZm9yKGxldCBqPTA7IGo8dmFsdWUudW5pdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfdW5pdCA9IFtbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkZWZhdWx0JywnYm9vbGVhbiddLCBbJ3ByaWNlJywnbnVtYmVyJ10sIFsncHJpY2UyJywnbnVtYmVyJ10sIFsncmF0aW8nLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsndW5pdCcsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3VuaXRbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZih2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2godmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS51bml0c1tqXSl7XHJcbiAgICAgICAgICBpZihmaWVsZF91bml0W3BdWzBdID09PSBxKXsgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgICAgXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ2FmZV91cGRhdGVQcm9kdWN0X1R5cGUzX2Z3KGlkX3Byb2R1Y3Q6c3RyaW5nLCB2YWx1ZTphbnkpeyAgXHJcbiAgLy9jb25zb2xlLmxvZygnLS12YWx1ZScsIHZhbHVlKTsgXHJcbiAgbGV0IGVuYWJsZV9yZXR1cm4gPSB0cnVlOyAgXHJcbiAgaWYoIWlkX3Byb2R1Y3QgfHwgaWRfcHJvZHVjdCA9PT0nJykge1xyXG4gICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gaWRfcHJvZHVjdCcpO1xyXG4gICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIGxldCBiYXJjb2RlcyA9IG5ldyBBcnJheSgpOyAgXHJcbiAgbGV0IGZpZWxkX21haW4gPSBbWydicmFuZCcsJ3N0cmluZyddLCBbJ3RheCcsICdudW1iZXInXSwgWyd2YXRfcmVkdWN0aW9uJywnbnVtYmVyJ10sIFsnaWRfY2F0ZWdvcnknLCdzdHJpbmcnXSwgWydpbWcnLCdzdHJpbmcnXSwgWydtYW55bG90JywnYm9vbGVhbiddLCBbJ21hbnlzaXplJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnbmFtZScsJ3N0cmluZyddLCBbJ3NlbGxpbmcnLCdib29sZWFuJ10sIFsndHlwZScsJ251bWJlciddLCBbJ3VuaXRzJywnb2JqZWN0J10sIFsnd2FybmluZ19udW1iZXInLCdudW1iZXInXSwgWydpdGVtX2NvZGUnLCdzdHJpbmcnXSwgWydkYXlzX2V4cF93YXJuaW5nJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgIFsncXVhbnRpdHknLCdudW1iZXInXSwgWydxdWFudGl0eV9icmFuY2gnLCdvYmplY3QnXSxbJ2RlbGV0ZV9oaWRkZW4nLCdib29sZWFuJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgWydkYXlzX2ltcG9ydF93YXJuaW5nJywnbnVtYmVyJ10sIFsnbG90cycsJ29iamVjdCddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnaWRfZGVzaWduX2JhcmNvZGUnLCAnc3RyaW5nJ10sIFsnaWRfZGVzaWduX2JhcmNvZGVfbG90JywgJ3N0cmluZyddLCBbJ251bWJlcl9jb2x1bW4nLCAnbnVtYmVyJ10sIFsnbnVtYmVyX2NvbHVtbl9sb3QnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludF9sb3QnLCAnbnVtYmVyJ11dOy8vc2F1IG7DoHkgc+G6vSBncm91cCBwaOG6p24gZGVzaWducyBuw6B5IGzhuqFpXHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZW9mIHZhbHVlW3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgIGlmKHZhbHVlW3BdWydpbnZlbnRvcnknXSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfSAgICAgICAgICAgICAgXHJcbiAgfSBcclxuICBcclxuICBpZih2YWx1ZS51bml0cyl7XHJcbiAgICAvL2NvbnNvbGUubG9nKCctLS0tdmFsdWUnLCB2YWx1ZSlcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3ByaWNlMicsJ251bWJlciddLCBbJ3ByaWNlX2ltcG9ydCcsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3VuaXQnLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF91bml0W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnVuaXRzW2pdW3BdICE9IGZpZWxkX3VuaXRbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10pOyAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfdW5pdFtwXVswXSA9PT0gcSl7ICAgICAgICAgICBcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICBpZih2YWx1ZS5sb3RzKXtcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLmxvdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfbG90ID0gW1snX2lkJywnc3RyaW5nJ10sIFsnYmFyY29kZScsJ3N0cmluZyddLCBbJ2RhdGVfZXhwJywnb2JqZWN0J10sIFsnZGF0ZV9tZmcnLCdvYmplY3QnXSwgWydoaWRkZW4nLCdib29sZWFuJ10sIFsnbG90X251bWJlcicsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUubG90c1tqXSl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF9sb3RbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZigocCA9PT0gJ2RhdGVfZXhwJyl8fChwID09PSAnZGF0ZV9tZmcnKSl7XHJcbiAgICAgICAgICAgICAgdmFsdWUubG90c1tqXVtwXSA9IG5ldyBEYXRlKHZhbHVlLmxvdHNbal1bcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS5sb3RzW2pdW3BdICE9IGZpZWxkX2xvdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZih2YWx1ZS5sb3RzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaCh2YWx1ZS5sb3RzW2pdWydiYXJjb2RlJ10pOyAgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfbG90KXtcclxuICAgICAgICBsZXQgY2hlY2tfZHVwbGljYXRlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IHEgaW4gdmFsdWUubG90c1tqXSl7XHJcbiAgICAgICAgICBpZihmaWVsZF9sb3RbcF1bMF0gPT09IHEpe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGhp4bq/dSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgfSAgICAgICBcclxuICAgIH1cclxuICB9IFxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ2FmZV91cGRhdGVQcm9kdWN0X1R5cGUyKGlkX3Byb2R1Y3Q6c3RyaW5nLCB2YWx1ZTphbnkpeyAgIFxyXG4gIGxldCBlbmFibGVfcmV0dXJuID0gdHJ1ZTsgIFxyXG4gIGlmKCFpZF9wcm9kdWN0IHx8IGlkX3Byb2R1Y3QgPT09JycpIHtcclxuICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIGlkX3Byb2R1Y3QnKTtcclxuICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBsZXQgYmFyY29kZXMgPSBuZXcgQXJyYXkoKTsgIFxyXG4gIGxldCBmaWVsZF9tYWluID0gW1snYnJhbmQnLCdzdHJpbmcnXSwgWyd0YXgnLCAnbnVtYmVyJ10sIFsndmF0X3JlZHVjdGlvbicsJ251bWJlciddLCBbJ2lkX2NhdGVnb3J5Jywnc3RyaW5nJ10sIFsnaW1nJywnc3RyaW5nJ10sIFsnbWFueWxvdCcsJ2Jvb2xlYW4nXSwgWydtYW55c2l6ZScsJ2Jvb2xlYW4nXSxcclxuICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCdzdHJpbmcnXSwgWydzZWxsaW5nJywnYm9vbGVhbiddLCBbJ3R5cGUnLCdudW1iZXInXSwgWyd1bml0cycsJ29iamVjdCddLCBbJ3dhcm5pbmdfbnVtYmVyJywnbnVtYmVyJ10sIFsnaXRlbV9jb2RlJywnc3RyaW5nJ10sIFsnZGF5c19leHBfd2FybmluZycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICBbJ2RheXNfaW1wb3J0X3dhcm5pbmcnLCdudW1iZXInXSwgWydsb3RzJywnb2JqZWN0J10sWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnaWRfZGVzaWduX2JhcmNvZGUnLCAnc3RyaW5nJ10sIFsnaWRfZGVzaWduX2JhcmNvZGVfbG90JywgJ3N0cmluZyddLCBbJ251bWJlcl9jb2x1bW4nLCAnbnVtYmVyJ10sIFsnbnVtYmVyX2NvbHVtbl9sb3QnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludF9sb3QnLCAnbnVtYmVyJ11dOy8vc2F1IG7DoHkgc+G6vSBncm91cCBwaOG6p24gZGVzaWducyBuw6B5IGzhuqFpXHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZW9mIHZhbHVlW3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgIH0gICAgICAgICAgICAgIFxyXG4gIH0gXHJcbiAgXHJcbiAgaWYodmFsdWUudW5pdHMpe1xyXG4gICAgLy9jb25zb2xlLmxvZygnLS0tLXZhbHVlJywgdmFsdWUpXHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS51bml0cy5sZW5ndGg7IGorKyl7XHJcbiAgICAgIGxldCBmaWVsZF91bml0ID0gW1snYmFyY29kZScsJ3N0cmluZyddLCBbJ2RlZmF1bHQnLCdib29sZWFuJ10sIFsncHJpY2UnLCdudW1iZXInXSwgWydwcmljZTInLCdudW1iZXInXSwgWydyYXRpbycsJ251bWJlciddLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyd1bml0Jywnc3RyaW5nJ11dO1xyXG4gICAgICBmb3IoY29uc3QgcCBpbiB2YWx1ZS51bml0c1tqXSl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfdW5pdFtxXVswXSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS51bml0c1tqXVtwXSAhPSBmaWVsZF91bml0W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY2hlY2tfZHVwbGljYXRlKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLnVuaXRzW2pdWydiYXJjb2RlJ10gIT0gXCJcIikgYmFyY29kZXMucHVzaCh2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddKTsgICBcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gZmllbGRfdW5pdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLnVuaXRzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX3VuaXRbcF1bMF0gPT09IHEpeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZSh1bml0cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgICBcclxuICAgIH1cclxuICB9XHJcbiAgaWYodmFsdWUubG90cyl7XHJcbiAgICBmb3IobGV0IGo9MDsgajx2YWx1ZS5sb3RzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX2xvdCA9IFtbJ19pZCcsJ3N0cmluZyddLCBbJ2JhcmNvZGUnLCdzdHJpbmcnXSwgWydkYXRlX2V4cCcsJ29iamVjdCddLCBbJ2RhdGVfbWZnJywnb2JqZWN0J10sIFsnaGlkZGVuJywnYm9vbGVhbiddLCBbJ2xvdF9udW1iZXInLCdzdHJpbmcnXV07XHJcbiAgICAgIGZvcihjb25zdCBwIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgICAgaWYocCA9PT0gZmllbGRfbG90W3FdWzBdKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLmxvdHNbal1bcF0gIT0gZmllbGRfbG90W3FdWzFdKXtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aOG7q2EgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSAhPSBcIlwiKSBiYXJjb2Rlcy5wdXNoKHZhbHVlLmxvdHNbal1bJ2JhcmNvZGUnXSk7ICAgIFxyXG4gICAgICBmb3IoY29uc3QgcCBpbiBmaWVsZF9sb3Qpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS5sb3RzW2pdKXtcclxuICAgICAgICAgIGlmKGZpZWxkX2xvdFtwXVswXSA9PT0gcSl7XHJcbiAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVja19kdXBsaWNhdGUpe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCB0aGnhur91IHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZShsb3RzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH0gXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NhZmVfdXBkYXRlUHJvZHVjdF9UeXBlNShpZF9wcm9kdWN0OnN0cmluZywgdmFsdWU6YW55KXsgICBcclxuICBsZXQgZW5hYmxlX3JldHVybiA9IHRydWU7ICBcclxuICBpZighaWRfcHJvZHVjdCB8fCBpZF9wcm9kdWN0ID09PScnKSB7XHJcbiAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIGtp4buDdSBk4buvIGxp4buHdSB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyBpZF9wcm9kdWN0Jyk7XHJcbiAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgbGV0IGJhcmNvZGVzID0gbmV3IEFycmF5KCk7ICBcclxuICBsZXQgZmllbGRfbWFpbiA9IFtbJ2JyYW5kJywnc3RyaW5nJ10sIFsndGF4JywgJ251bWJlciddLCBbJ3ZhdF9yZWR1Y3Rpb24nLCdudW1iZXInXSwgWydpZF9jYXRlZ29yeScsJ3N0cmluZyddLCBbJ2ltZycsJ3N0cmluZyddLCBbJ21hbnlsb3QnLCdib29sZWFuJ10sIFsnbWFueXNpemUnLCdib29sZWFuJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgWyduYW1lJywnc3RyaW5nJ10sIFsnc2VsbGluZycsJ2Jvb2xlYW4nXSwgWyd0eXBlJywnbnVtYmVyJ10sIFsndW5pdHMnLCdvYmplY3QnXSwgWyd3YXJuaW5nX251bWJlcicsJ251bWJlciddLCBbJ2l0ZW1fY29kZScsJ3N0cmluZyddLCBbJ2RheXNfZXhwX3dhcm5pbmcnLCdudW1iZXInXSwgXHJcbiAgICAgICAgICAgICAgICAgICAgWydkYXlzX2ltcG9ydF93YXJuaW5nJywnbnVtYmVyJ10sIFsnbG90cycsJ29iamVjdCddLCBbJ2Rlc2NyaWJlJywnc3RyaW5nJ10sWydkZWxldGVfaGlkZGVuJywnYm9vbGVhbiddLFxyXG4gICAgICAgICAgICAgICAgICAgIFsnaWRfZGVzaWduX2JhcmNvZGUnLCAnc3RyaW5nJ10sIFsnaWRfZGVzaWduX2JhcmNvZGVfbG90JywgJ3N0cmluZyddLCBbJ251bWJlcl9jb2x1bW4nLCAnbnVtYmVyJ10sIFsnbnVtYmVyX2NvbHVtbl9sb3QnLCAnbnVtYmVyJ10sIFsnbnVtYmVyX3ByaW50JywgJ251bWJlciddLCBbJ251bWJlcl9wcmludF9sb3QnLCAnbnVtYmVyJ11dOy8vc2F1IG7DoHkgc+G6vSBncm91cCBwaOG6p24gZGVzaWducyBuw6B5IGzhuqFpXHJcbiAgXHJcbiAgZm9yKGNvbnN0IHAgaW4gdmFsdWUpe1xyXG4gICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgZm9yKGNvbnN0IHEgaW4gZmllbGRfbWFpbil7XHJcbiAgICAgIGlmKHAgPT09IGZpZWxkX21haW5bcV1bMF0pe1xyXG4gICAgICAgIGNoZWNrX2R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZW9mIHZhbHVlW3BdICE9IGZpZWxkX21haW5bcV1bMV0pe1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUnLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwgdGjhu6thIHRyxrDhu51uZyB0cm9uZyB0aGFtIHPhu5EgdHJ1eeG7gW4gdsOgbyB2YWx1ZScsIHApO1xyXG4gICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgIH0gICAgICAgICAgICAgIFxyXG4gIH0gXHJcbiAgXHJcbiAgaWYodmFsdWUudW5pdHMpeyAgICBcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLnVuaXRzLmxlbmd0aDsgaisrKXtcclxuICAgICAgbGV0IGZpZWxkX3VuaXQgPSBbWydiYXJjb2RlJywnc3RyaW5nJ10sIFsnZGVmYXVsdCcsJ2Jvb2xlYW4nXSwgWydwcmljZScsJ251bWJlciddLCBbJ3JhdGlvJywnbnVtYmVyJ10sIFsndW5pdCcsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUudW5pdHNbal0pe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiBmaWVsZF91bml0KXtcclxuICAgICAgICAgIGlmKHAgPT09IGZpZWxkX3VuaXRbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudW5pdHNbal1bcF0gIT0gZmllbGRfdW5pdFtxXVsxXSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Z1aSBsw7JuZyBraeG7g20gdHJhLCBraeG7g3UgZOG7ryBsaeG7h3UgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUodW5pdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICB9IFxyXG4gICAgICBpZih2YWx1ZS51bml0c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2godmFsdWUudW5pdHNbal1bJ2JhcmNvZGUnXSk7ICAgXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX3VuaXQpe1xyXG4gICAgICAgIGxldCBjaGVja19kdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IoY29uc3QgcSBpbiB2YWx1ZS51bml0c1tqXSl7XHJcbiAgICAgICAgICBpZihmaWVsZF91bml0W3BdWzBdID09PSBxKXsgICAgICAgICAgICBcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKHVuaXRzKScsIHApO1xyXG4gICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICBpZih2YWx1ZS5sb3RzKXtcclxuICAgIGZvcihsZXQgaj0wOyBqPHZhbHVlLmxvdHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICBsZXQgZmllbGRfbG90ID0gW1snX2lkJywnc3RyaW5nJ10sIFsnYmFyY29kZScsJ3N0cmluZyddLCBbJ2RhdGVfZXhwJywnb2JqZWN0J10sIFsnZGF0ZV9tZmcnLCdvYmplY3QnXSwgWydoaWRkZW4nLCdib29sZWFuJ10sIFsnbG90X251bWJlcicsJ3N0cmluZyddXTtcclxuICAgICAgZm9yKGNvbnN0IHAgaW4gdmFsdWUubG90c1tqXSl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgICBpZihwID09PSBmaWVsZF9sb3RbcV1bMF0pe1xyXG4gICAgICAgICAgICBjaGVja19kdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUubG90c1tqXVtwXSAhPSBmaWVsZF9sb3RbcV1bMV0pe1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWdWkgbMOybmcga2nhu4NtIHRyYSwga2nhu4N1IGThu68gbGnhu4d1IHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICAgICAgaWYoZW5hYmxlX3JldHVybikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRo4burYSB0csaw4budbmcgdHJvbmcgdGhhbSBz4buRIHRydXnhu4FuIHbDoG8gdmFsdWUobG90cyknLCBwKTtcclxuICAgICAgICAgIGlmKGVuYWJsZV9yZXR1cm4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgICBcclxuICAgICAgfSBcclxuICAgICAgaWYodmFsdWUubG90c1tqXVsnYmFyY29kZSddICE9IFwiXCIpIGJhcmNvZGVzLnB1c2godmFsdWUubG90c1tqXVsnYmFyY29kZSddKTsgICAgXHJcbiAgICAgIGZvcihjb25zdCBwIGluIGZpZWxkX2xvdCl7XHJcbiAgICAgICAgbGV0IGNoZWNrX2R1cGxpY2F0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvcihjb25zdCBxIGluIHZhbHVlLmxvdHNbal0pe1xyXG4gICAgICAgICAgaWYoZmllbGRfbG90W3BdWzBdID09PSBxKXtcclxuICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlID0gdHJ1ZTsgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWNoZWNrX2R1cGxpY2F0ZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVnVpIGzDsm5nIGtp4buDbSB0cmEsIHRoaeG6v3UgdHLGsOG7nW5nIHRyb25nIHRoYW0gc+G7kSB0cnV54buBbiB2w6BvIHZhbHVlKGxvdHMpJywgcCk7XHJcbiAgICAgICAgICBpZihlbmFibGVfcmV0dXJuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gICAgICAgXHJcbiAgICB9XHJcbiAgfSBcclxuICByZXR1cm4gZmFsc2U7XHJcbn0iXX0=