@wppconnect/server 2.2.1 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/dist/config.js +2 -2
- package/dist/controller/catalogController.js +3 -11
- package/dist/controller/groupController.js +309 -104
- package/dist/controller/labelsController.js +67 -13
- package/dist/controller/messageController.js +282 -89
- package/dist/controller/miscController.js +27 -14
- package/dist/controller/orderController.js +22 -7
- package/dist/controller/sessionController.js +1 -11
- package/dist/controller/statusController.js +67 -14
- package/dist/swagger.json +1182 -893
- package/dist/util/functions.js +4 -7
- package/dist/util/tokenStore/model/token.js +10 -11
- package/package.json +8 -8
|
@@ -41,14 +41,30 @@ async function sendMessage(req, res) {
|
|
|
41
41
|
#swagger.parameters["session"] = {
|
|
42
42
|
schema: 'NERDWHATS_AMERICA'
|
|
43
43
|
}
|
|
44
|
-
#swagger.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
#swagger.requestBody = {
|
|
45
|
+
required: true,
|
|
46
|
+
"@content": {
|
|
47
|
+
"application/json": {
|
|
48
|
+
schema: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
$phone: { type: "string" },
|
|
52
|
+
$isGroup: { type: "boolean" },
|
|
53
|
+
$message: { type: "string" }
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
examples: {
|
|
57
|
+
"Default": {
|
|
58
|
+
value: {
|
|
59
|
+
phone: '5521999999999',
|
|
60
|
+
isGroup: false,
|
|
61
|
+
message: 'Hello, welcome to WPPConnect'
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
}
|
|
50
67
|
}
|
|
51
|
-
}
|
|
52
68
|
*/
|
|
53
69
|
const { phone, message } = req.body;
|
|
54
70
|
|
|
@@ -79,16 +95,34 @@ async function sendFile(req, res) {
|
|
|
79
95
|
#swagger.parameters["session"] = {
|
|
80
96
|
schema: 'NERDWHATS_AMERICA'
|
|
81
97
|
}
|
|
82
|
-
#swagger.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
#swagger.requestBody = {
|
|
99
|
+
required: true,
|
|
100
|
+
"@content": {
|
|
101
|
+
"application/json": {
|
|
102
|
+
schema: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties: {
|
|
105
|
+
"phone": { type: "string" },
|
|
106
|
+
"isGroup": { type: "boolean" },
|
|
107
|
+
"filename": { type: "string" },
|
|
108
|
+
"caption": { type: "string" },
|
|
109
|
+
"base64": { type: "string" }
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
examples: {
|
|
113
|
+
"Default": {
|
|
114
|
+
value: {
|
|
115
|
+
"phone": "5521999999999",
|
|
116
|
+
"isGroup": false,
|
|
117
|
+
"filename": "file name lol",
|
|
118
|
+
"caption": "caption for my file",
|
|
119
|
+
"base64": "<base64> string"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
90
124
|
}
|
|
91
|
-
|
|
125
|
+
}
|
|
92
126
|
*/
|
|
93
127
|
const { phone, path, base64, filename = 'file', message, caption } = req.body;
|
|
94
128
|
|
|
@@ -130,15 +164,32 @@ async function sendVoice(req, res) {
|
|
|
130
164
|
#swagger.parameters["session"] = {
|
|
131
165
|
schema: 'NERDWHATS_AMERICA'
|
|
132
166
|
}
|
|
133
|
-
#swagger.
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
167
|
+
#swagger.requestBody = {
|
|
168
|
+
required: true,
|
|
169
|
+
"@content": {
|
|
170
|
+
"application/json": {
|
|
171
|
+
schema: {
|
|
172
|
+
type: "object",
|
|
173
|
+
properties: {
|
|
174
|
+
"phone": { type: "string" },
|
|
175
|
+
"isGroup": { type: "boolean" },
|
|
176
|
+
"path": { type: "string" },
|
|
177
|
+
"quotedMessageId": { type: "string" }
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
examples: {
|
|
181
|
+
"Default": {
|
|
182
|
+
value: {
|
|
183
|
+
"phone": "5521999999999",
|
|
184
|
+
"isGroup": false,
|
|
185
|
+
"path": "<path_file>",
|
|
186
|
+
"quotedMessageId": "message Id"
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
142
193
|
*/
|
|
143
194
|
const {
|
|
144
195
|
phone,
|
|
@@ -180,14 +231,30 @@ async function sendVoice64(req, res) {
|
|
|
180
231
|
#swagger.parameters["session"] = {
|
|
181
232
|
schema: 'NERDWHATS_AMERICA'
|
|
182
233
|
}
|
|
183
|
-
#swagger.
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
234
|
+
#swagger.requestBody = {
|
|
235
|
+
required: true,
|
|
236
|
+
"@content": {
|
|
237
|
+
"application/json": {
|
|
238
|
+
schema: {
|
|
239
|
+
type: "object",
|
|
240
|
+
properties: {
|
|
241
|
+
"phone": { type: "string" },
|
|
242
|
+
"isGroup": { type: "boolean" },
|
|
243
|
+
"base64Ptt": { type: "string" }
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
examples: {
|
|
247
|
+
"Default": {
|
|
248
|
+
value: {
|
|
249
|
+
"phone": "5521999999999",
|
|
250
|
+
"isGroup": false,
|
|
251
|
+
"base64Ptt": "<base64_string>"
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
191
258
|
*/
|
|
192
259
|
const { phone, base64Ptt } = req.body;
|
|
193
260
|
|
|
@@ -217,15 +284,32 @@ async function sendLinkPreview(req, res) {
|
|
|
217
284
|
#swagger.parameters["session"] = {
|
|
218
285
|
schema: 'NERDWHATS_AMERICA'
|
|
219
286
|
}
|
|
220
|
-
#swagger.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
287
|
+
#swagger.requestBody = {
|
|
288
|
+
required: true,
|
|
289
|
+
"@content": {
|
|
290
|
+
"application/json": {
|
|
291
|
+
schema: {
|
|
292
|
+
type: "object",
|
|
293
|
+
properties: {
|
|
294
|
+
"phone": { type: "string" },
|
|
295
|
+
"isGroup": { type: "boolean" },
|
|
296
|
+
"url": { type: "string" },
|
|
297
|
+
"caption": { type: "string" }
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
examples: {
|
|
301
|
+
"Default": {
|
|
302
|
+
value: {
|
|
303
|
+
"phone": "5521999999999",
|
|
304
|
+
"isGroup": false,
|
|
305
|
+
"url": "http://www.link.com",
|
|
306
|
+
"caption": "Text for describe link"
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
229
313
|
*/
|
|
230
314
|
const { phone, url, caption } = req.body;
|
|
231
315
|
|
|
@@ -255,17 +339,36 @@ async function sendLocation(req, res) {
|
|
|
255
339
|
#swagger.parameters["session"] = {
|
|
256
340
|
schema: 'NERDWHATS_AMERICA'
|
|
257
341
|
}
|
|
258
|
-
#swagger.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
342
|
+
#swagger.requestBody = {
|
|
343
|
+
required: true,
|
|
344
|
+
"@content": {
|
|
345
|
+
"application/json": {
|
|
346
|
+
schema: {
|
|
347
|
+
type: "object",
|
|
348
|
+
properties: {
|
|
349
|
+
"phone": { type: "string" },
|
|
350
|
+
"isGroup": { type: "boolean" },
|
|
351
|
+
"lat": { type: "string" },
|
|
352
|
+
"lng": { type: "string" },
|
|
353
|
+
"title": { type: "string" },
|
|
354
|
+
"address": { type: "string" }
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
examples: {
|
|
358
|
+
"Default": {
|
|
359
|
+
value: {
|
|
360
|
+
"phone": "5521999999999",
|
|
361
|
+
"isGroup": false,
|
|
362
|
+
"lat": "-89898322",
|
|
363
|
+
"lng": "-545454",
|
|
364
|
+
"title": "Rio de Janeiro",
|
|
365
|
+
"address": "Av. N. S. de Copacabana, 25, Copacabana"
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
269
372
|
*/
|
|
270
373
|
const { phone, lat, lng, title, address } = req.body;
|
|
271
374
|
|
|
@@ -432,12 +535,33 @@ async function sendStatusText(req, res) {
|
|
|
432
535
|
#swagger.parameters["session"] = {
|
|
433
536
|
schema: 'NERDWHATS_AMERICA'
|
|
434
537
|
}
|
|
435
|
-
#swagger.
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
538
|
+
#swagger.requestBody = {
|
|
539
|
+
required: true,
|
|
540
|
+
content: {
|
|
541
|
+
'application/json': {
|
|
542
|
+
schema: {
|
|
543
|
+
type: 'object',
|
|
544
|
+
properties: {
|
|
545
|
+
phone: { type: 'string' },
|
|
546
|
+
isGroup: { type: 'boolean' },
|
|
547
|
+
message: { type: 'string' },
|
|
548
|
+
messageId: { type: 'string' }
|
|
549
|
+
},
|
|
550
|
+
required: ['phone', 'isGroup', 'message']
|
|
551
|
+
},
|
|
552
|
+
examples: {
|
|
553
|
+
Default: {
|
|
554
|
+
value: {
|
|
555
|
+
phone: '5521999999999',
|
|
556
|
+
isGroup: false,
|
|
557
|
+
message: 'Reply to message',
|
|
558
|
+
messageId: '<id_message>'
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
439
563
|
}
|
|
440
|
-
|
|
564
|
+
}
|
|
441
565
|
*/
|
|
442
566
|
const { message } = req.body;
|
|
443
567
|
|
|
@@ -463,15 +587,32 @@ async function replyMessage(req, res) {
|
|
|
463
587
|
#swagger.parameters["session"] = {
|
|
464
588
|
schema: 'NERDWHATS_AMERICA'
|
|
465
589
|
}
|
|
466
|
-
#swagger.
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
590
|
+
#swagger.requestBody = {
|
|
591
|
+
required: true,
|
|
592
|
+
"@content": {
|
|
593
|
+
"application/json": {
|
|
594
|
+
schema: {
|
|
595
|
+
type: "object",
|
|
596
|
+
properties: {
|
|
597
|
+
"phone": { type: "string" },
|
|
598
|
+
"isGroup": { type: "boolean" },
|
|
599
|
+
"message": { type: "string" },
|
|
600
|
+
"messageId": { type: "string" }
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
examples: {
|
|
604
|
+
"Default": {
|
|
605
|
+
value: {
|
|
606
|
+
"phone": "5521999999999",
|
|
607
|
+
"isGroup": false,
|
|
608
|
+
"message": "Reply to message",
|
|
609
|
+
"messageId": "<id_message>"
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}
|
|
473
614
|
}
|
|
474
|
-
|
|
615
|
+
}
|
|
475
616
|
*/
|
|
476
617
|
const { phone, message, messageId } = req.body;
|
|
477
618
|
|
|
@@ -500,15 +641,33 @@ async function sendMentioned(req, res) {
|
|
|
500
641
|
#swagger.parameters["session"] = {
|
|
501
642
|
schema: 'NERDWHATS_AMERICA'
|
|
502
643
|
}
|
|
503
|
-
#swagger.
|
|
504
|
-
|
|
644
|
+
#swagger.requestBody = {
|
|
645
|
+
required: true,
|
|
646
|
+
"@content": {
|
|
647
|
+
"application/json": {
|
|
505
648
|
schema: {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
649
|
+
type: "object",
|
|
650
|
+
properties: {
|
|
651
|
+
"phone": { type: "string" },
|
|
652
|
+
"isGroup": { type: "boolean" },
|
|
653
|
+
"message": { type: "string" },
|
|
654
|
+
"mentioned": { type: "array", items: { type: "string" } }
|
|
655
|
+
},
|
|
656
|
+
required: ["phone", "message", "mentioned"]
|
|
657
|
+
},
|
|
658
|
+
examples: {
|
|
659
|
+
"Default": {
|
|
660
|
+
value: {
|
|
661
|
+
"phone": "5521999999999",
|
|
662
|
+
"isGroup": true,
|
|
663
|
+
"message": "Your text message",
|
|
664
|
+
"mentioned": ["@556593077171@c.us"]
|
|
665
|
+
}
|
|
666
|
+
}
|
|
510
667
|
}
|
|
511
|
-
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
512
671
|
*/
|
|
513
672
|
const { phone, message, mentioned } = req.body;
|
|
514
673
|
|
|
@@ -542,14 +701,31 @@ async function sendImageAsSticker(req, res) {
|
|
|
542
701
|
#swagger.parameters["session"] = {
|
|
543
702
|
schema: 'NERDWHATS_AMERICA'
|
|
544
703
|
}
|
|
545
|
-
#swagger.
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
704
|
+
#swagger.requestBody = {
|
|
705
|
+
required: true,
|
|
706
|
+
"@content": {
|
|
707
|
+
"application/json": {
|
|
708
|
+
schema: {
|
|
709
|
+
type: "object",
|
|
710
|
+
properties: {
|
|
711
|
+
"phone": { type: "string" },
|
|
712
|
+
"isGroup": { type: "boolean" },
|
|
713
|
+
"path": { type: "string" }
|
|
714
|
+
},
|
|
715
|
+
required: ["phone", "path"]
|
|
716
|
+
},
|
|
717
|
+
examples: {
|
|
718
|
+
"Default": {
|
|
719
|
+
value: {
|
|
720
|
+
"phone": "5521999999999",
|
|
721
|
+
"isGroup": true,
|
|
722
|
+
"path": "<path_file>"
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
551
727
|
}
|
|
552
|
-
|
|
728
|
+
}
|
|
553
729
|
*/
|
|
554
730
|
const { phone, path } = req.body;
|
|
555
731
|
|
|
@@ -584,14 +760,31 @@ async function sendImageAsStickerGif(req, res) {
|
|
|
584
760
|
#swagger.parameters["session"] = {
|
|
585
761
|
schema: 'NERDWHATS_AMERICA'
|
|
586
762
|
}
|
|
587
|
-
#swagger.
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
763
|
+
#swagger.requestBody = {
|
|
764
|
+
required: true,
|
|
765
|
+
content: {
|
|
766
|
+
'application/json': {
|
|
767
|
+
schema: {
|
|
768
|
+
type: 'object',
|
|
769
|
+
properties: {
|
|
770
|
+
phone: { type: 'string' },
|
|
771
|
+
isGroup: { type: 'boolean' },
|
|
772
|
+
path: { type: 'string' },
|
|
773
|
+
},
|
|
774
|
+
required: ['phone', 'path'],
|
|
775
|
+
},
|
|
776
|
+
examples: {
|
|
777
|
+
'Default': {
|
|
778
|
+
value: {
|
|
779
|
+
phone: '5521999999999',
|
|
780
|
+
isGroup: true,
|
|
781
|
+
path: '<path_file>',
|
|
782
|
+
},
|
|
783
|
+
},
|
|
784
|
+
},
|
|
785
|
+
},
|
|
786
|
+
},
|
|
787
|
+
}
|
|
595
788
|
*/
|
|
596
789
|
const { phone, path } = req.body;
|
|
597
790
|
|
|
@@ -616,4 +809,4 @@ async function sendImageAsStickerGif(req, res) {
|
|
|
616
809
|
returnError(req, res, error);
|
|
617
810
|
}
|
|
618
811
|
}
|
|
619
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsInJldHVybkVycm9yIiwicmVxIiwicmVzIiwiZXJyb3IiLCJsb2dnZXIiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsInJldHVyblN1Y2VzcyIsImRhdGEiLCJyZXNwb25zZSIsIm1hcHBlciIsInNlbmRNZXNzYWdlIiwicGhvbmUiLCJib2R5Iiwib3B0aW9ucyIsInJlc3VsdHMiLCJjb250YXRvIiwicHVzaCIsImNsaWVudCIsInNlbmRUZXh0IiwibGVuZ3RoIiwiaW8iLCJlbWl0Iiwic2VuZEZpbGUiLCJwYXRoIiwiYmFzZTY0IiwiZmlsZW5hbWUiLCJjYXB0aW9uIiwiZmlsZSIsInNlbmQiLCJwYXRoRmlsZSIsIm1zZyIsInVubGlua0FzeW5jIiwic2VuZFZvaWNlIiwicXVvdGVkTWVzc2FnZUlkIiwic2VuZFB0dCIsInNlbmRWb2ljZTY0IiwiYmFzZTY0UHR0Iiwic2VuZFB0dEZyb21CYXNlNjQiLCJzZW5kTGlua1ByZXZpZXciLCJ1cmwiLCJzZW5kTG9jYXRpb24iLCJsYXQiLCJsbmciLCJ0aXRsZSIsImFkZHJlc3MiLCJuYW1lIiwic2VuZEJ1dHRvbnMiLCJjb250YWN0Iiwic2VuZExpc3RNZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJzZWN0aW9ucyIsImJ1dHRvblRleHQiLCJzZW5kUG9sbE1lc3NhZ2UiLCJjaG9pY2VzIiwic2VuZFN0YXR1c1RleHQiLCJyZXBseU1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJyZXBseSIsInRvIiwic2VuZE1lbnRpb25lZCIsIm1lbnRpb25lZCIsInNlbmRJbWFnZUFzU3RpY2tlciIsInNlbmRJbWFnZUFzU3RpY2tlckdpZiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL21lc3NhZ2VDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBXUFBDb25uZWN0IFRlYW1cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcblxuaW1wb3J0IHsgdW5saW5rQXN5bmMgfSBmcm9tICcuLi91dGlsL2Z1bmN0aW9ucyc7XG5cbmZ1bmN0aW9uIHJldHVybkVycm9yKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgZXJyb3I6IGFueSkge1xuICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICBtZXNzYWdlOiAnRXJybyBhbyBlbnZpYXIgYSBtZW5zYWdlbS4nLFxuICAgIGVycm9yOiBlcnJvcixcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHVyblN1Y2VzcyhyZXM6IGFueSwgZGF0YTogYW55KSB7XG4gIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiBkYXRhLCBtYXBwZXI6ICdyZXR1cm4nIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZE1lc3NhZ2UocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm9ialwiXSA9IHtcbiAgICAgIGluOiAnYm9keScsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgJHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICRtZXNzYWdlOiAnSGVsbG8sIHdlbGNvbWUgdG8gV1BQQ29ubmVjdCcsXG4gICAgICAgICRpc0dyb3VwOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgbWVzc2FnZSB9ID0gcmVxLmJvZHk7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHJlcS5ib2R5Lm9wdGlvbnMgfHwge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRUZXh0KGNvbnRhdG8sIG1lc3NhZ2UsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJlcS5pby5lbWl0KCdtZW5zYWdlbS1lbnZpYWRhJywgcmVzdWx0cyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEZpbGUocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm9ialwiXSA9IHtcbiAgICAgIGluOiAnYm9keScsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgJHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICRpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgJGZpbGVuYW1lOiAnZmlsZSBuYW1lIGxvbCcsXG4gICAgICAgICRjYXB0aW9uOiAnY2FwdGlvbiBmb3IgbXkgZmlsZScsXG4gICAgICAgICRiYXNlNjQ6ICc8YmFzZTY0PiBzdHJpbmcnLFxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBwYXRoLCBiYXNlNjQsIGZpbGVuYW1lID0gJ2ZpbGUnLCBtZXNzYWdlLCBjYXB0aW9uIH0gPSByZXEuYm9keTtcblxuICBpZiAoIXBhdGggJiYgIXJlcS5maWxlICYmICFiYXNlNjQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdTZW5kaW5nIHRoZSBmaWxlIGlzIG1hbmRhdG9yeScsXG4gICAgfSk7XG5cbiAgY29uc3QgcGF0aEZpbGUgPSBwYXRoIHx8IGJhc2U2NCB8fCByZXEuZmlsZT8ucGF0aDtcbiAgY29uc3QgbXNnID0gbWVzc2FnZSB8fCBjYXB0aW9uO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIGF3YWl0IHJlcS5jbGllbnQuc2VuZEZpbGUoY29udGF0bywgcGF0aEZpbGUsIHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgY2FwdGlvbjogbXNnLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIGlmIChyZXEuZmlsZSkgYXdhaXQgdW5saW5rQXN5bmMocGF0aEZpbGUpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRWb2ljZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wib2JqXCJdID0ge1xuICAgICAgaW46ICdib2R5JyxcbiAgICAgIHNjaGVtYToge1xuICAgICAgICAkcGhvbmU6ICc1NTIxOTk5OTk5OTk5JyxcbiAgICAgICAgJGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAkcGF0aDogJzxwYXRoX2ZpbGU+JyxcbiAgICAgICAgJHF1b3RlZE1lc3NhZ2VJZDogdW5kZWZpbmVkLFxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7XG4gICAgcGhvbmUsXG4gICAgcGF0aCxcbiAgICBmaWxlbmFtZSA9ICdWb2ljZSBBdWRpbycsXG4gICAgbWVzc2FnZSxcbiAgICBxdW90ZWRNZXNzYWdlSWQsXG4gIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRQdHQoXG4gICAgICAgICAgY29udGF0byxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgcXVvdGVkTWVzc2FnZUlkXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kVm9pY2U2NChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wib2JqXCJdID0ge1xuICAgICAgaW46ICdib2R5JyxcbiAgICAgIHNjaGVtYToge1xuICAgICAgICAkcGhvbmU6ICc1NTIxOTk5OTk5OTk5JyxcbiAgICAgICAgJGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAkYmFzZTY0UHR0OiAnPGJhc2U2NF9zdHJpbmc+JyxcbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgYmFzZTY0UHR0IH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRQdHRGcm9tQmFzZTY0KGNvbnRhdG8sIGJhc2U2NFB0dCwgJ1ZvaWNlIEF1ZGlvJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kTGlua1ByZXZpZXcocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm9ialwiXSA9IHtcbiAgICAgIGluOiAnYm9keScsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgJHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICRpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgJHVybDogJ2h0dHA6Ly93d3cubGluay5jb20nLFxuICAgICAgICAkY2FwdGlvbjogJ1RleHQgZm9yIGRlc2NyaWJlIGxpbmsnLFxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCB1cmwsIGNhcHRpb24gfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIGF3YWl0IHJlcS5jbGllbnQuc2VuZExpbmtQcmV2aWV3KGAke2NvbnRhdG99YCwgdXJsLCBjYXB0aW9uKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRMb2NhdGlvbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wib2JqXCJdID0ge1xuICAgICAgaW46ICdib2R5JyxcbiAgICAgIHNjaGVtYToge1xuICAgICAgICAkcGhvbmU6ICc1NTIxOTk5OTk5OTk5JyxcbiAgICAgICAgJGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAkbGF0OiAnLTg5ODk4MzIyJyxcbiAgICAgICAgJGxuZzogJy01NDU0NTQnLFxuICAgICAgICAkdGl0bGU6ICdSaW8gZGUgSmFuZWlybycsXG4gICAgICAgICRhZGRyZXNzOiAnQXYuIE4uIFMuIGRlIENvcGFjYWJhbmEsIDI1LCBDb3BhY2FiYW5hJyxcbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgbGF0LCBsbmcsIHRpdGxlLCBhZGRyZXNzIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRMb2NhdGlvbihjb250YXRvLCB7XG4gICAgICAgICAgbGF0OiBsYXQsXG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgICBuYW1lOiB0aXRsZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kQnV0dG9ucyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQScsXG4gICAgIH1cbiAgICAgI3N3YWdnZXIuZGVwcmVjYXRlZD10cnVlXG4gICAqL1xuICBjb25zdCB7IHBob25lLCBtZXNzYWdlLCBvcHRpb25zIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjb250YWN0IG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kVGV4dChjb250YWN0LCBtZXNzYWdlLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJldHVybkVycm9yKHJlcSwgcmVzLCAnRXJyb3Igc2VuZGluZyBtZXNzYWdlIHdpdGggYnV0dG9ucycpO1xuXG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcGhvbmUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRMaXN0TWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQScsXG4gICAgIH1cbiAgICAgI3N3YWdnZXIuZGVwcmVjYXRlZD10cnVlXG4gICAqL1xuICBjb25zdCB7XG4gICAgcGhvbmUsXG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBzZWN0aW9ucyxcbiAgICBidXR0b25UZXh0ID0gJ1NFTEVDSU9ORSBVTUEgT1DDh8ODTycsXG4gIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjb250YWN0IG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIGF3YWl0IHJlcS5jbGllbnQuc2VuZExpc3RNZXNzYWdlKGNvbnRhY3QsIHtcbiAgICAgICAgICBidXR0b25UZXh0OiBidXR0b25UZXh0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICBzZWN0aW9uczogc2VjdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXR1cm5FcnJvcihyZXEsIHJlcywgJ0Vycm9yIHNlbmRpbmcgbGlzdCBidXR0b25zJyk7XG5cbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kUG9sbE1lc3NhZ2UocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiB7IHR5cGU6IFwiYXJyYXlcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyB0eXBlOiBcIm9iamVjdFwiIH0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTogJzU1MjE5OTk5OTk5OTknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BvbGwgbmFtZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFsnT3B0aW9uIDEnLCAnT3B0aW9uIDInLCAnT3B0aW9uIDMnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVDb3VudDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIG5hbWUsIGNob2ljZXMsIG9wdGlvbnMgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgYXdhaXQgcmVxLmNsaWVudC5zZW5kUG9sbE1lc3NhZ2UoY29udGFjdCwgbmFtZSwgY2hvaWNlcywgb3B0aW9ucylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJldHVybkVycm9yKHJlcSwgcmVzLCAnRXJyb3Igc2VuZGluZyBwb2xsIG1lc3NhZ2UnKTtcblxuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTdGF0dXNUZXh0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJvYmpcIl0gPSB7XG4gICAgICBpbjogJ2JvZHknLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgICRtZXNzYWdlOiAnUG9zdCB0ZXh0IHN0YXR1cycsXG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgbWVzc2FnZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kVGV4dCgnc3RhdHVzQGJyb2FkY2FzdCcsIG1lc3NhZ2UpKTtcblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbHlNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJvYmpcIl0gPSB7XG4gICAgICBpbjogJ2JvZHknLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgICRwaG9uZTogJzU1MjE5OTk5OTk5OTknLFxuICAgICAgICAkaXNHcm91cDogZmFsc2UsXG4gICAgICAgICRtZXNzYWdlOiAnUmVwbHkgdG8gbWVzc2FnZScsXG4gICAgICAgICRtZXNzYWdlSWQ6ICc8aWRfbWVzc2FnZT4nLFxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBtZXNzYWdlLCBtZXNzYWdlSWQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5yZXBseShjb250YXRvLCBtZXNzYWdlLCBtZXNzYWdlSWQpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJlcS5pby5lbWl0KCdtZW5zYWdlbS1lbnZpYWRhJywgeyBtZXNzYWdlOiBtZXNzYWdlLCB0bzogcGhvbmUgfSk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZE1lbnRpb25lZChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wib2JqXCJdID0ge1xuICAgICAgaW46ICdib2R5JyxcbiAgICAgIHNjaGVtYToge1xuICAgICAgICAkcGhvbmU6ICc1NTIxOTk5OTk5OTk5JyxcbiAgICAgICAgJGlzR3JvdXA6IHRydWUsXG4gICAgICAgICRtZXNzYWdlOiAnWW91ciB0ZXh0IG1lc3NhZ2UnLFxuICAgICAgICAkbWVudGlvbmVkOiBbXCJANTU2NTkzMDc3MTcxQGMudXNcIl0sXG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2UsIG1lbnRpb25lZCB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc2VuZE1lbnRpb25lZChcbiAgICAgICAgYCR7Y29udGF0b31gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBtZW50aW9uZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNlbmQgbWVzc2FnZSBtZW50aW9uZWQnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEltYWdlQXNTdGlja2VyKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJvYmpcIl0gPSB7XG4gICAgICBpbjogJ2JvZHknLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgICRwaG9uZTogJzU1MjE5OTk5OTk5OTknLFxuICAgICAgICAkaXNHcm91cDogdHJ1ZSxcbiAgICAgICAgJHBhdGg6ICc8cGF0aF9maWxlPicsXG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHBhdGggfSA9IHJlcS5ib2R5O1xuXG4gIGlmICghcGF0aCAmJiAhcmVxLmZpbGUpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdTZW5kaW5nIHRoZSBmaWxlIGlzIG1hbmRhdG9yeScsXG4gICAgfSk7XG5cbiAgY29uc3QgcGF0aEZpbGUgPSBwYXRoIHx8IHJlcS5maWxlPy5wYXRoO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kSW1hZ2VBc1N0aWNrZXIoY29udGF0bywgcGF0aEZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIGlmIChyZXEuZmlsZSkgYXdhaXQgdW5saW5rQXN5bmMocGF0aEZpbGUpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kSW1hZ2VBc1N0aWNrZXJHaWYocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm9ialwiXSA9IHtcbiAgICAgIGluOiAnYm9keScsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgJHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICRpc0dyb3VwOiB0cnVlLFxuICAgICAgICAkcGF0aDogJzxwYXRoX2ZpbGU+JyxcbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgcGF0aCB9ID0gcmVxLmJvZHk7XG5cbiAgaWYgKCFwYXRoICYmICFyZXEuZmlsZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ1NlbmRpbmcgdGhlIGZpbGUgaXMgbWFuZGF0b3J5JyxcbiAgICB9KTtcblxuICBjb25zdCBwYXRoRmlsZSA9IHBhdGggfHwgcmVxLmZpbGU/LnBhdGg7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRJbWFnZUFzU3RpY2tlckdpZihjb250YXRvLCBwYXRoRmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgaWYgKHJlcS5maWxlKSBhd2FpdCB1bmxpbmtBc3luYyhwYXRoRmlsZSk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBLHNCQUFnRCxDQWxCaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBTUEsU0FBU0MsV0FBV0Es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
|
|
812
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsInJldHVybkVycm9yIiwicmVxIiwicmVzIiwiZXJyb3IiLCJsb2dnZXIiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsInJldHVyblN1Y2VzcyIsImRhdGEiLCJyZXNwb25zZSIsIm1hcHBlciIsInNlbmRNZXNzYWdlIiwicGhvbmUiLCJib2R5Iiwib3B0aW9ucyIsInJlc3VsdHMiLCJjb250YXRvIiwicHVzaCIsImNsaWVudCIsInNlbmRUZXh0IiwibGVuZ3RoIiwiaW8iLCJlbWl0Iiwic2VuZEZpbGUiLCJwYXRoIiwiYmFzZTY0IiwiZmlsZW5hbWUiLCJjYXB0aW9uIiwiZmlsZSIsInNlbmQiLCJwYXRoRmlsZSIsIm1zZyIsInVubGlua0FzeW5jIiwic2VuZFZvaWNlIiwicXVvdGVkTWVzc2FnZUlkIiwic2VuZFB0dCIsInNlbmRWb2ljZTY0IiwiYmFzZTY0UHR0Iiwic2VuZFB0dEZyb21CYXNlNjQiLCJzZW5kTGlua1ByZXZpZXciLCJ1cmwiLCJzZW5kTG9jYXRpb24iLCJsYXQiLCJsbmciLCJ0aXRsZSIsImFkZHJlc3MiLCJuYW1lIiwic2VuZEJ1dHRvbnMiLCJjb250YWN0Iiwic2VuZExpc3RNZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJzZWN0aW9ucyIsImJ1dHRvblRleHQiLCJzZW5kUG9sbE1lc3NhZ2UiLCJjaG9pY2VzIiwic2VuZFN0YXR1c1RleHQiLCJyZXBseU1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJyZXBseSIsInRvIiwic2VuZE1lbnRpb25lZCIsIm1lbnRpb25lZCIsInNlbmRJbWFnZUFzU3RpY2tlciIsInNlbmRJbWFnZUFzU3RpY2tlckdpZiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL21lc3NhZ2VDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBXUFBDb25uZWN0IFRlYW1cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcblxuaW1wb3J0IHsgdW5saW5rQXN5bmMgfSBmcm9tICcuLi91dGlsL2Z1bmN0aW9ucyc7XG5cbmZ1bmN0aW9uIHJldHVybkVycm9yKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgZXJyb3I6IGFueSkge1xuICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICBtZXNzYWdlOiAnRXJybyBhbyBlbnZpYXIgYSBtZW5zYWdlbS4nLFxuICAgIGVycm9yOiBlcnJvcixcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHVyblN1Y2VzcyhyZXM6IGFueSwgZGF0YTogYW55KSB7XG4gIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiBkYXRhLCBtYXBwZXI6ICdyZXR1cm4nIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZE1lc3NhZ2UocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAkcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgICRpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgJG1lc3NhZ2U6IHsgdHlwZTogXCJzdHJpbmdcIiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICBwaG9uZTogJzU1MjE5OTk5OTk5OTknLFxuICAgICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSGVsbG8sIHdlbGNvbWUgdG8gV1BQQ29ubmVjdCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2UgfSA9IHJlcS5ib2R5O1xuXG4gIGNvbnN0IG9wdGlvbnMgPSByZXEuYm9keS5vcHRpb25zIHx8IHt9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kVGV4dChjb250YXRvLCBtZXNzYWdlLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICByZXEuaW8uZW1pdCgnbWVuc2FnZW0tZW52aWFkYScsIHJlc3VsdHMpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRGaWxlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBcInBob25lXCI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICBcImZpbGVuYW1lXCI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcImNhcHRpb25cIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiYmFzZTY0XCI6IHsgdHlwZTogXCJzdHJpbmdcIiB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGhvbmVcIjogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZpbGVuYW1lXCI6IFwiZmlsZSBuYW1lIGxvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXB0aW9uXCI6IFwiY2FwdGlvbiBmb3IgbXkgZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYXNlNjRcIjogXCI8YmFzZTY0PiBzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgcGF0aCwgYmFzZTY0LCBmaWxlbmFtZSA9ICdmaWxlJywgbWVzc2FnZSwgY2FwdGlvbiB9ID0gcmVxLmJvZHk7XG5cbiAgaWYgKCFwYXRoICYmICFyZXEuZmlsZSAmJiAhYmFzZTY0KVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnU2VuZGluZyB0aGUgZmlsZSBpcyBtYW5kYXRvcnknLFxuICAgIH0pO1xuXG4gIGNvbnN0IHBhdGhGaWxlID0gcGF0aCB8fCBiYXNlNjQgfHwgcmVxLmZpbGU/LnBhdGg7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UgfHwgY2FwdGlvbjtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRGaWxlKGNvbnRhdG8sIHBhdGhGaWxlLCB7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIGNhcHRpb246IG1zZyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICBpZiAocmVxLmZpbGUpIGF3YWl0IHVubGlua0FzeW5jKHBhdGhGaWxlKTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kVm9pY2UocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGhvbmVcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJxdW90ZWRNZXNzYWdlSWRcIjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaG9uZVwiOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCI6IFwiPHBhdGhfZmlsZT5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInF1b3RlZE1lc3NhZ2VJZFwiOiBcIm1lc3NhZ2UgSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgKi9cbiAgY29uc3Qge1xuICAgIHBob25lLFxuICAgIHBhdGgsXG4gICAgZmlsZW5hbWUgPSAnVm9pY2UgQXVkaW8nLFxuICAgIG1lc3NhZ2UsXG4gICAgcXVvdGVkTWVzc2FnZUlkLFxuICB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgYXdhaXQgcmVxLmNsaWVudC5zZW5kUHR0KFxuICAgICAgICAgIGNvbnRhdG8sXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHF1b3RlZE1lc3NhZ2VJZFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFZvaWNlNjQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGhvbmVcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYXNlNjRQdHRcIjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaG9uZVwiOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiYXNlNjRQdHRcIjogXCI8YmFzZTY0X3N0cmluZz5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgYmFzZTY0UHR0IH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRQdHRGcm9tQmFzZTY0KGNvbnRhdG8sIGJhc2U2NFB0dCwgJ1ZvaWNlIEF1ZGlvJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kTGlua1ByZXZpZXcocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGhvbmVcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1cmxcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhcHRpb25cIjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaG9uZVwiOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzR3JvdXBcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1cmxcIjogXCJodHRwOi8vd3d3LmxpbmsuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXB0aW9uXCI6IFwiVGV4dCBmb3IgZGVzY3JpYmUgbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCB1cmwsIGNhcHRpb24gfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIGF3YWl0IHJlcS5jbGllbnQuc2VuZExpbmtQcmV2aWV3KGAke2NvbnRhdG99YCwgdXJsLCBjYXB0aW9uKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRMb2NhdGlvbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJwaG9uZVwiOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNHcm91cFwiOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxhdFwiOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG5nXCI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aXRsZVwiOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBob25lXCI6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNHcm91cFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhdFwiOiBcIi04OTg5ODMyMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibG5nXCI6IFwiLTU0NTQ1NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogXCJSaW8gZGUgSmFuZWlyb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiBcIkF2LiBOLiBTLiBkZSBDb3BhY2FiYW5hLCAyNSwgQ29wYWNhYmFuYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBsYXQsIGxuZywgdGl0bGUsIGFkZHJlc3MgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIGF3YWl0IHJlcS5jbGllbnQuc2VuZExvY2F0aW9uKGNvbnRhdG8sIHtcbiAgICAgICAgICBsYXQ6IGxhdCxcbiAgICAgICAgICBsbmc6IGxuZyxcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICAgIG5hbWU6IHRpdGxlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRCdXR0b25zKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJyxcbiAgICAgfVxuICAgICAjc3dhZ2dlci5kZXByZWNhdGVkPXRydWVcbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2UsIG9wdGlvbnMgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRUZXh0KGNvbnRhY3QsIG1lc3NhZ2UsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmV0dXJuRXJyb3IocmVxLCByZXMsICdFcnJvciBzZW5kaW5nIG1lc3NhZ2Ugd2l0aCBidXR0b25zJyk7XG5cbiAgICByZXR1cm5TdWNlc3MocmVzLCBwaG9uZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZExpc3RNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJyxcbiAgICAgfVxuICAgICAjc3dhZ2dlci5kZXByZWNhdGVkPXRydWVcbiAgICovXG4gIGNvbnN0IHtcbiAgICBwaG9uZSxcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIHNlY3Rpb25zLFxuICAgIGJ1dHRvblRleHQgPSAnU0VMRUNJT05FIFVNQSBPUMOHw4NPJyxcbiAgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgYXdhaXQgcmVxLmNsaWVudC5zZW5kTGlzdE1lc3NhZ2UoY29udGFjdCwge1xuICAgICAgICAgIGJ1dHRvblRleHQ6IGJ1dHRvblRleHQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJldHVybkVycm9yKHJlcSwgcmVzLCAnRXJyb3Igc2VuZGluZyBsaXN0IGJ1dHRvbnMnKTtcblxuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRQb2xsTWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IHsgdHlwZTogXCJhcnJheVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7IHR5cGU6IFwib2JqZWN0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUG9sbCBuYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydPcHRpb24gMScsICdPcHRpb24gMicsICdPcHRpb24gMyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZUNvdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgbmFtZSwgY2hvaWNlcywgb3B0aW9ucyB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29udGFjdCBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRQb2xsTWVzc2FnZShjb250YWN0LCBuYW1lLCBjaG9pY2VzLCBvcHRpb25zKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmV0dXJuRXJyb3IocmVxLCByZXMsICdFcnJvciBzZW5kaW5nIHBvbGwgbWVzc2FnZScpO1xuXG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFN0YXR1c1RleHQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHsgdHlwZTogJ3N0cmluZycgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3Bob25lJywgJ2lzR3JvdXAnLCAnbWVzc2FnZSddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgRGVmYXVsdDoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1JlcGx5IHRvIG1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogJzxpZF9tZXNzYWdlPidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICovXG4gIGNvbnN0IHsgbWVzc2FnZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kVGV4dCgnc3RhdHVzQGJyb2FkY2FzdCcsIG1lc3NhZ2UpKTtcblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbHlNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIFwicGhvbmVcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIFwiaXNHcm91cFwiOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIFwibWVzc2FnZVwiOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgXCJtZXNzYWdlSWRcIjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIFwicGhvbmVcIjogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgXCJpc0dyb3VwXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwibWVzc2FnZVwiOiBcIlJlcGx5IHRvIG1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcIm1lc3NhZ2VJZFwiOiBcIjxpZF9tZXNzYWdlPlwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBtZXNzYWdlLCBtZXNzYWdlSWQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5yZXBseShjb250YXRvLCBtZXNzYWdlLCBtZXNzYWdlSWQpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJlcS5pby5lbWl0KCdtZW5zYWdlbS1lbnZpYWRhJywgeyBtZXNzYWdlOiBtZXNzYWdlLCB0bzogcGhvbmUgfSk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZE1lbnRpb25lZChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgcmVxdWlyZWQ6IHRydWUsXG4gIFwiQGNvbnRlbnRcIjoge1xuICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIFwicGhvbmVcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgXCJpc0dyb3VwXCI6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICBcIm1lc3NhZ2VcIjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgXCJtZW50aW9uZWRcIjogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbXCJwaG9uZVwiLCBcIm1lc3NhZ2VcIiwgXCJtZW50aW9uZWRcIl1cbiAgICAgIH0sXG4gICAgICBleGFtcGxlczoge1xuICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBcInBob25lXCI6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgXCJpc0dyb3VwXCI6IHRydWUsXG4gICAgICAgICAgICBcIm1lc3NhZ2VcIjogXCJZb3VyIHRleHQgbWVzc2FnZVwiLFxuICAgICAgICAgICAgXCJtZW50aW9uZWRcIjogW1wiQDU1NjU5MzA3NzE3MUBjLnVzXCJdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBtZXNzYWdlLCBtZW50aW9uZWQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnNlbmRNZW50aW9uZWQoXG4gICAgICAgIGAke2NvbnRhdG99YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbWVudGlvbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZW5kIG1lc3NhZ2UgbWVudGlvbmVkJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRJbWFnZUFzU3RpY2tlcihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBcInBob25lXCI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBcImlzR3JvdXBcIjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBcInBhdGhcIjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogW1wicGhvbmVcIiwgXCJwYXRoXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBcInBob25lXCI6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIFwiaXNHcm91cFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwicGF0aFwiOiBcIjxwYXRoX2ZpbGU+XCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHBhdGggfSA9IHJlcS5ib2R5O1xuXG4gIGlmICghcGF0aCAmJiAhcmVxLmZpbGUpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdTZW5kaW5nIHRoZSBmaWxlIGlzIG1hbmRhdG9yeScsXG4gICAgfSk7XG5cbiAgY29uc3QgcGF0aEZpbGUgPSBwYXRoIHx8IHJlcS5maWxlPy5wYXRoO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kSW1hZ2VBc1N0aWNrZXIoY29udGF0bywgcGF0aEZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIGlmIChyZXEuZmlsZSkgYXdhaXQgdW5saW5rQXN5bmMocGF0aEZpbGUpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kSW1hZ2VBc1N0aWNrZXJHaWYocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICAgICAgcGF0aDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3Bob25lJywgJ3BhdGgnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICAnRGVmYXVsdCc6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogJzU1MjE5OTk5OTk5OTknLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWUsXG4gICAgICAgICAgICAgICAgcGF0aDogJzxwYXRoX2ZpbGU+JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgcGF0aCB9ID0gcmVxLmJvZHk7XG5cbiAgaWYgKCFwYXRoICYmICFyZXEuZmlsZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ1NlbmRpbmcgdGhlIGZpbGUgaXMgbWFuZGF0b3J5JyxcbiAgICB9KTtcblxuICBjb25zdCBwYXRoRmlsZSA9IHBhdGggfHwgcmVxLmZpbGU/LnBhdGg7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRJbWFnZUFzU3RpY2tlckdpZihjb250YXRvLCBwYXRoRmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgaWYgKHJlcS5maWxlKSBhd2FpdCB1bmxpbmtBc3luYyhwYXRoRmlsZSk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBLHNCQUFnRCxDQWxCaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBTUEsU0FBU0MsV0FBV0EsQ0FBQ0MsR0FBWSxFQUFFQyxHQUFhLEVBQUVDLEtBQVUsRUFBRSxDQUM1REYsR0FBRyxDQUFDRyxNQUFNLENBQUNELEtBQUssQ0FBQ0EsS0FBSyxDQUFDLENBQ3ZCRCxHQUFHLENBQUNHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQ25CRCxNQUFNLEVBQUUsT0FBTyxFQUNmRSxPQUFPLEVBQUUsNEJBQTRCLEVBQ3JDSixLQUFLLEVBQUVBLEtBQUssQ0FDZCxDQUFDLENBQUMsQ0FDSixDQUVBLGVBQWVLLFlBQVlBLENBQUNOLEdBQVEsRUFBRU8sSUFBUyxFQUFFLENBQy9DUCxHQUFHLENBQUNHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxTQUFTLEVBQUVLLFFBQVEsRUFBRUQsSUFBSSxFQUFFRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUMvRTtBQUVPLGVBQWVDLFdBQVdBLENBQUNYLEdBQVksRUFBRUMsR0FBYSxFQUFFO0VBQzdEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
|