aboutsummaryrefslogtreecommitdiff
path: root/notebooks/Lincoln_Business_Clusters.ipynb
blob: c01526e40de050692d1f46202b829e9ce8a1dc07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting package metadata (current_repodata.json): ...working... done\n",
      "Solving environment: ...working... done\n",
      "\n",
      "# All requested packages already installed.\n",
      "\n",
      "Requirement already satisfied: geopy in c:\\users\\my_user\\anaconda3\\lib\\site-packages (2.0.0)\n",
      "Requirement already satisfied: geographiclib<2,>=1.49 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from geopy) (1.50)\n",
      "Requirement already satisfied: folium in c:\\users\\my_user\\anaconda3\\lib\\site-packages (0.11.0)\n",
      "Requirement already satisfied: numpy in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from folium) (1.18.1)\n",
      "Requirement already satisfied: jinja2>=2.9 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from folium) (2.11.1)\n",
      "Requirement already satisfied: branca>=0.3.0 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from folium) (0.4.1)\n",
      "Requirement already satisfied: requests in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from folium) (2.22.0)\n",
      "Requirement already satisfied: MarkupSafe>=0.23 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from jinja2>=2.9->folium) (1.1.1)\n",
      "Requirement already satisfied: idna<2.9,>=2.5 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from requests->folium) (2.8)\n",
      "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from requests->folium) (1.25.8)\n",
      "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from requests->folium) (3.0.4)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\my_user\\anaconda3\\lib\\site-packages (from requests->folium) (2019.11.28)\n"
     ]
    }
   ],
   "source": [
    "# Optionally, install needed libraries\n",
    "!conda install -c conda-forge geocoder --yes\n",
    "!pip install geopy\n",
    "!pip install folium"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import the necessary libraries\n",
    "import pandas as pd\n",
    "import requests\n",
    "import folium\n",
    "import math\n",
    "import json\n",
    "from pandas.io.json import json_normalize\n",
    "from sklearn.cluster import KMeans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1ID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFs0MC44MDY4NjIsIC05Ni42ODE2NzldLAogICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgICAgICAgICAgICAgem9vbTogMTIsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl9kMjg1ODRlZWM3ZjI0ODkwYjk0YzdhMzFiMGIxNDdhNyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x22da030c748>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Define the latitude and longitude of Lincoln, then map the results\n",
    "latitude = 40.806862\n",
    "longitude = -96.681679\n",
    "map_LNK = folium.Map(location=[latitude, longitude], zoom_start=12)\n",
    "    \n",
    "map_LNK"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Important: The Foursquare API only returns 100 venues at a time using this endpoint.\n",
    "Pull data back in 3 groups to get all 232 results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Foursquare API credentials\n",
    "CLIENT_ID = 'MPMD3J0GGDV0HKDJFEDRK0USSGW0MQUD0DMN3C4ZAMWT2XTN'\n",
    "CLIENT_SECRET = 'YVCSGVSCX02EFWITMI3RDOTUSJEHV4APRMLBFCN5CKWXCTPJ'\n",
    "VERSION = '20180604'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'https://api.foursquare.com/v2/venues/explore?&client_id=MPMD3J0GGDV0HKDJFEDRK0USSGW0MQUD0DMN3C4ZAMWT2XTN&client_secret=YVCSGVSCX02EFWITMI3RDOTUSJEHV4APRMLBFCN5CKWXCTPJ&v=20180604&ll=40.806862,-96.681679&radius=10000&limit=100'"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set up the URL to fetch the first 100 results\n",
    "LIMIT = 100\n",
    "radius = 10000\n",
    "url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}'.format(\n",
    "    CLIENT_ID, \n",
    "    CLIENT_SECRET, \n",
    "    VERSION, \n",
    "    latitude, \n",
    "    longitude, \n",
    "    radius, \n",
    "    LIMIT)\n",
    "url"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fetch the first 100 results\n",
    "results = requests.get(url).json()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "232"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Determine the total number of results needed to fetch\n",
    "totalResults = results['response']['totalResults']\n",
    "totalResults"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'https://api.foursquare.com/v2/venues/explore?&client_id=MPMD3J0GGDV0HKDJFEDRK0USSGW0MQUD0DMN3C4ZAMWT2XTN&client_secret=YVCSGVSCX02EFWITMI3RDOTUSJEHV4APRMLBFCN5CKWXCTPJ&v=20180604&ll=40.806862,-96.681679&radius=10000&limit=100&offset=100'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set up the URL to fetch the second 100 results (101-200)\n",
    "LIMIT = 100\n",
    "offset = 100\n",
    "radius = 10000\n",
    "url2 = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}&offset={}'.format(\n",
    "    CLIENT_ID, \n",
    "    CLIENT_SECRET, \n",
    "    VERSION, \n",
    "    latitude, \n",
    "    longitude, \n",
    "    radius, \n",
    "    LIMIT,\n",
    "    offset)\n",
    "url2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fetch the second 100 results (101-200)\n",
    "results2 = requests.get(url2).json()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'https://api.foursquare.com/v2/venues/explore?&client_id=MPMD3J0GGDV0HKDJFEDRK0USSGW0MQUD0DMN3C4ZAMWT2XTN&client_secret=YVCSGVSCX02EFWITMI3RDOTUSJEHV4APRMLBFCN5CKWXCTPJ&v=20180604&ll=40.806862,-96.681679&radius=10000&limit=100&offset=200'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set up the URL to fetch the final results (201 - 232)\n",
    "LIMIT = 100\n",
    "offset = 200\n",
    "radius = 10000\n",
    "url3 = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}&offset={}'.format(\n",
    "    CLIENT_ID, \n",
    "    CLIENT_SECRET, \n",
    "    VERSION, \n",
    "    latitude, \n",
    "    longitude, \n",
    "    radius, \n",
    "    LIMIT,\n",
    "    offset)\n",
    "url3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fetch the final results (201 - 232)\n",
    "results3 = requests.get(url3).json()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# This function will extract the category of the venue from the API dictionary\n",
    "def get_category_type(row):\n",
    "    try:\n",
    "        categories_list = row['categories']\n",
    "    except:\n",
    "        categories_list = row['venue.categories']\n",
    "        \n",
    "    if len(categories_list) == 0:\n",
    "        return None\n",
    "    else:\n",
    "        return categories_list[0]['name']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\my_user\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>categories</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Sunken Gardens</td>\n",
       "      <td>Garden</td>\n",
       "      <td>40.802319</td>\n",
       "      <td>-96.683149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lincoln Children's Zoo</td>\n",
       "      <td>Zoo</td>\n",
       "      <td>40.800463</td>\n",
       "      <td>-96.680036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Honest Abe's Burgers &amp; Freedom</td>\n",
       "      <td>Burger Joint</td>\n",
       "      <td>40.814234</td>\n",
       "      <td>-96.701008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Yia Yia's</td>\n",
       "      <td>Pizza Place</td>\n",
       "      <td>40.813599</td>\n",
       "      <td>-96.700540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Antelope Park</td>\n",
       "      <td>Park</td>\n",
       "      <td>40.796821</td>\n",
       "      <td>-96.674826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>Jack's Bar &amp; Grill</td>\n",
       "      <td>Bar</td>\n",
       "      <td>40.813895</td>\n",
       "      <td>-96.709815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>Trade A Tape Comic Book Center</td>\n",
       "      <td>Comic Shop</td>\n",
       "      <td>40.812996</td>\n",
       "      <td>-96.708490</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>Mazatlan</td>\n",
       "      <td>Mexican Restaurant</td>\n",
       "      <td>40.815196</td>\n",
       "      <td>-96.625641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>Rosie's</td>\n",
       "      <td>Bar</td>\n",
       "      <td>40.765226</td>\n",
       "      <td>-96.700645</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>Buzzard Billy's</td>\n",
       "      <td>Cajun / Creole Restaurant</td>\n",
       "      <td>40.815546</td>\n",
       "      <td>-96.710123</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                              name                 categories        lat  \\\n",
       "0                   Sunken Gardens                     Garden  40.802319   \n",
       "1           Lincoln Children's Zoo                        Zoo  40.800463   \n",
       "2   Honest Abe's Burgers & Freedom               Burger Joint  40.814234   \n",
       "3                        Yia Yia's                Pizza Place  40.813599   \n",
       "4                    Antelope Park                       Park  40.796821   \n",
       "..                             ...                        ...        ...   \n",
       "95              Jack's Bar & Grill                        Bar  40.813895   \n",
       "96  Trade A Tape Comic Book Center                 Comic Shop  40.812996   \n",
       "97                        Mazatlan         Mexican Restaurant  40.815196   \n",
       "98                         Rosie's                        Bar  40.765226   \n",
       "99                 Buzzard Billy's  Cajun / Creole Restaurant  40.815546   \n",
       "\n",
       "          lng  \n",
       "0  -96.683149  \n",
       "1  -96.680036  \n",
       "2  -96.701008  \n",
       "3  -96.700540  \n",
       "4  -96.674826  \n",
       "..        ...  \n",
       "95 -96.709815  \n",
       "96 -96.708490  \n",
       "97 -96.625641  \n",
       "98 -96.700645  \n",
       "99 -96.710123  \n",
       "\n",
       "[100 rows x 4 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get the first 100 venues\n",
    "venues = results['response']['groups'][0]['items']\n",
    "nearby_venues = json_normalize(venues)\n",
    "\n",
    "# filter columns\n",
    "filtered_columns = ['venue.name', 'venue.categories', 'venue.location.lat', 'venue.location.lng']\n",
    "nearby_venues = nearby_venues.loc[:, filtered_columns]\n",
    "\n",
    "# filter the category for each row\n",
    "nearby_venues['venue.categories'] = nearby_venues.apply(get_category_type, axis=1)\n",
    "\n",
    "# clean columns\n",
    "nearby_venues.columns = [col.split(\".\")[-1] for col in nearby_venues.columns]\n",
    "nearby_venues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\my_user\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>categories</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Sunken Gardens</td>\n",
       "      <td>Garden</td>\n",
       "      <td>40.802319</td>\n",
       "      <td>-96.683149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lincoln Children's Zoo</td>\n",
       "      <td>Zoo</td>\n",
       "      <td>40.800463</td>\n",
       "      <td>-96.680036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Honest Abe's Burgers &amp; Freedom</td>\n",
       "      <td>Burger Joint</td>\n",
       "      <td>40.814234</td>\n",
       "      <td>-96.701008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Yia Yia's</td>\n",
       "      <td>Pizza Place</td>\n",
       "      <td>40.813599</td>\n",
       "      <td>-96.700540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Antelope Park</td>\n",
       "      <td>Park</td>\n",
       "      <td>40.796821</td>\n",
       "      <td>-96.674826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>Engine House Cafe</td>\n",
       "      <td>American Restaurant</td>\n",
       "      <td>40.857195</td>\n",
       "      <td>-96.637721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>Marcus Edgewood Cinema</td>\n",
       "      <td>Movie Theater</td>\n",
       "      <td>40.760190</td>\n",
       "      <td>-96.642499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>Victoria's Secret</td>\n",
       "      <td>Lingerie Store</td>\n",
       "      <td>40.742087</td>\n",
       "      <td>-96.679395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>Pancho Villa Mexican Grill</td>\n",
       "      <td>Mexican Restaurant</td>\n",
       "      <td>40.860718</td>\n",
       "      <td>-96.640711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>Popeyes Louisiana Kitchen</td>\n",
       "      <td>Fried Chicken Joint</td>\n",
       "      <td>40.768581</td>\n",
       "      <td>-96.624462</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>200 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                              name           categories        lat        lng\n",
       "0                   Sunken Gardens               Garden  40.802319 -96.683149\n",
       "1           Lincoln Children's Zoo                  Zoo  40.800463 -96.680036\n",
       "2   Honest Abe's Burgers & Freedom         Burger Joint  40.814234 -96.701008\n",
       "3                        Yia Yia's          Pizza Place  40.813599 -96.700540\n",
       "4                    Antelope Park                 Park  40.796821 -96.674826\n",
       "..                             ...                  ...        ...        ...\n",
       "95               Engine House Cafe  American Restaurant  40.857195 -96.637721\n",
       "96          Marcus Edgewood Cinema        Movie Theater  40.760190 -96.642499\n",
       "97               Victoria's Secret       Lingerie Store  40.742087 -96.679395\n",
       "98      Pancho Villa Mexican Grill   Mexican Restaurant  40.860718 -96.640711\n",
       "99       Popeyes Louisiana Kitchen  Fried Chicken Joint  40.768581 -96.624462\n",
       "\n",
       "[200 rows x 4 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get the second 100 venues\n",
    "venues2 = results2['response']['groups'][0]['items']\n",
    "nearby_venues2 = json_normalize(venues2) # flatten JSON\n",
    "\n",
    "# filter columns\n",
    "filtered_columns2 = ['venue.name', 'venue.categories', 'venue.location.lat', 'venue.location.lng']\n",
    "nearby_venues2 = nearby_venues2.loc[:, filtered_columns]\n",
    "\n",
    "# filter the category for each row\n",
    "nearby_venues2['venue.categories'] = nearby_venues2.apply(get_category_type, axis=1)\n",
    "\n",
    "# clean columns\n",
    "nearby_venues2.columns = [col.split(\".\")[-1] for col in nearby_venues.columns]\n",
    "\n",
    "nearby_venues = nearby_venues.append(nearby_venues2)\n",
    "nearby_venues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\my_user\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>categories</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Sunken Gardens</td>\n",
       "      <td>Garden</td>\n",
       "      <td>40.802319</td>\n",
       "      <td>-96.683149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lincoln Children's Zoo</td>\n",
       "      <td>Zoo</td>\n",
       "      <td>40.800463</td>\n",
       "      <td>-96.680036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Honest Abe's Burgers &amp; Freedom</td>\n",
       "      <td>Burger Joint</td>\n",
       "      <td>40.814234</td>\n",
       "      <td>-96.701008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Yia Yia's</td>\n",
       "      <td>Pizza Place</td>\n",
       "      <td>40.813599</td>\n",
       "      <td>-96.700540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Antelope Park</td>\n",
       "      <td>Park</td>\n",
       "      <td>40.796821</td>\n",
       "      <td>-96.674826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227</th>\n",
       "      <td>PepperJax Grill</td>\n",
       "      <td>American Restaurant</td>\n",
       "      <td>40.738810</td>\n",
       "      <td>-96.680150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>228</th>\n",
       "      <td>ALDI</td>\n",
       "      <td>Grocery Store</td>\n",
       "      <td>40.723974</td>\n",
       "      <td>-96.681705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229</th>\n",
       "      <td>Crete Carrier/Shaffer Trucking</td>\n",
       "      <td>Building</td>\n",
       "      <td>40.816108</td>\n",
       "      <td>-96.795131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>230</th>\n",
       "      <td>Hampton Inn &amp; Suites</td>\n",
       "      <td>Hotel</td>\n",
       "      <td>40.887348</td>\n",
       "      <td>-96.678617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>Super Saver</td>\n",
       "      <td>Supermarket</td>\n",
       "      <td>40.878144</td>\n",
       "      <td>-96.735121</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>232 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                               name           categories        lat        lng\n",
       "0                    Sunken Gardens               Garden  40.802319 -96.683149\n",
       "1            Lincoln Children's Zoo                  Zoo  40.800463 -96.680036\n",
       "2    Honest Abe's Burgers & Freedom         Burger Joint  40.814234 -96.701008\n",
       "3                         Yia Yia's          Pizza Place  40.813599 -96.700540\n",
       "4                     Antelope Park                 Park  40.796821 -96.674826\n",
       "..                              ...                  ...        ...        ...\n",
       "227                 PepperJax Grill  American Restaurant  40.738810 -96.680150\n",
       "228                            ALDI        Grocery Store  40.723974 -96.681705\n",
       "229  Crete Carrier/Shaffer Trucking             Building  40.816108 -96.795131\n",
       "230            Hampton Inn & Suites                Hotel  40.887348 -96.678617\n",
       "231                     Super Saver          Supermarket  40.878144 -96.735121\n",
       "\n",
       "[232 rows x 4 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get the rest of the venues\n",
    "venues3 = results3['response']['groups'][0]['items']\n",
    "nearby_venues3 = json_normalize(venues3) # flatten JSON\n",
    "\n",
    "# filter columns\n",
    "filtered_columns3 = ['venue.name', 'venue.categories', 'venue.location.lat', 'venue.location.lng']\n",
    "nearby_venues3 = nearby_venues3.loc[:, filtered_columns]\n",
    "\n",
    "# filter the category for each row\n",
    "nearby_venues3['venue.categories'] = nearby_venues3.apply(get_category_type, axis=1)\n",
    "\n",
    "# clean columns\n",
    "nearby_venues3.columns = [col.split(\".\")[-1] for col in nearby_venues3.columns]\n",
    "\n",
    "nearby_venues = nearby_venues.append(nearby_venues3)\n",
    "nearby_venues = nearby_venues.reset_index(drop=True)\n",
    "nearby_venues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1ID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFs0MC44MDY4NjIsIC05Ni42ODE2NzldLAogICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgICAgICAgICAgICAgem9vbTogMTIsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl9kMjg1ODRlZWM3ZjI0ODkwYjk0YzdhMzFiMGIxNDdhNyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxYTQxZWYwYjA2MTRjMjNhODQzNzVlODAzNzBlZWRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAyMzE4OTE3NTAyMjM0LCAtOTYuNjgzMTQ4NTIwNjM0OTddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjc5YTQzMWRhMzY0NDc5Mjk4ZWFmYjViNDU4Y2IyNmQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y5NWI5OTcyMThjZjRmY2M5NGE4YWY5ODgzZWYwZjk3ID0gJChgPGRpdiBpZD0iaHRtbF9mOTViOTk3MjE4Y2Y0ZmNjOTRhOGFmOTg4M2VmMGY5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3Vua2VuIEdhcmRlbnMgKEdhcmRlbik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjc5YTQzMWRhMzY0NDc5Mjk4ZWFmYjViNDU4Y2IyNmQuc2V0Q29udGVudChodG1sX2Y5NWI5OTcyMThjZjRmY2M5NGE4YWY5ODgzZWYwZjk3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wMWE0MWVmMGIwNjE0YzIzYTg0Mzc1ZTgwMzcwZWVkYy5iaW5kUG9wdXAocG9wdXBfZjc5YTQzMWRhMzY0NDc5Mjk4ZWFmYjViNDU4Y2IyNmQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNzBkYjA5MWMwMDRhYzZhN2M2OTY0YjRkNjkyZTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAwNDYyODkyMTE0MjA0LCAtOTYuNjgwMDM2MzI0ODE0NjddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzk4NTNiOWM4ZTA0NDYzODlkODQzNGJlMTdiYzliMTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzJhZTM2MDI1MzBiNTQ0OWQ4ODVjMzkzMTBiOTBiYWVmID0gJChgPGRpdiBpZD0iaHRtbF8yYWUzNjAyNTMwYjU0NDlkODg1YzM5MzEwYjkwYmFlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGluY29sbiBDaGlsZHJlbiYjMzk7cyBab28gKFpvbyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzk4NTNiOWM4ZTA0NDYzODlkODQzNGJlMTdiYzliMTQuc2V0Q29udGVudChodG1sXzJhZTM2MDI1MzBiNTQ0OWQ4ODVjMzkzMTBiOTBiYWVmKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yYjcwZGIwOTFjMDA0YWM2YTdjNjk2NGI0ZDY5MmU2NS5iaW5kUG9wdXAocG9wdXBfYzk4NTNiOWM4ZTA0NDYzODlkODQzNGJlMTdiYzliMTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjNDE5ZjBmM2VlMDRlMjliYzczMzdmMjZjZjkzYzY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0MjMzOTU4Njc0NTg1LCAtOTYuNzAxMDA3OTEyMjkxNjRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMGRmMTllMmIzN2I3NDA1MDk2ZmQ4YTg0YTg0NzFiOTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzAwNzkyYjIxMTI5MDRlYTQ5YjI1YzBjYTkzMTAyMTdiID0gJChgPGRpdiBpZD0iaHRtbF8wMDc5MmIyMTEyOTA0ZWE0OWIyNWMwY2E5MzEwMjE3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9uZXN0IEFiZSYjMzk7cyBCdXJnZXJzICZhbXA7IEZyZWVkb20gKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMGRmMTllMmIzN2I3NDA1MDk2ZmQ4YTg0YTg0NzFiOTMuc2V0Q29udGVudChodG1sXzAwNzkyYjIxMTI5MDRlYTQ5YjI1YzBjYTkzMTAyMTdiKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hYzQxOWYwZjNlZTA0ZTI5YmM3MzM3ZjI2Y2Y5M2M2OC5iaW5kUG9wdXAocG9wdXBfMGRmMTllMmIzN2I3NDA1MDk2ZmQ4YTg0YTg0NzFiOTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhYzAzMWM3ZGNkOTQ2Njk4Yjk0ZTYyNmQ4ZDg1NTQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzNTk5NDA4MjU4NzcsIC05Ni43MDA1Mzk4NzEzNTM3NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mNDUyZGIwYzE5ZDM0MTlmODdkYjhlODU3MjI2ZTEzMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYmI2Yjk2ZTc1ZDM0NGJmZGI0NTkzMWEyZjEzMjUyZjcgPSAkKGA8ZGl2IGlkPSJodG1sX2JiNmI5NmU3NWQzNDRiZmRiNDU5MzFhMmYxMzI1MmY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ZaWEgWWlhJiMzOTtzIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjQ1MmRiMGMxOWQzNDE5Zjg3ZGI4ZTg1NzIyNmUxMzIuc2V0Q29udGVudChodG1sX2JiNmI5NmU3NWQzNDRiZmRiNDU5MzFhMmYxMzI1MmY3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lYWMwMzFjN2RjZDk0NjY5OGI5NGU2MjZkOGQ4NTU0NC5iaW5kUG9wdXAocG9wdXBfZjQ1MmRiMGMxOWQzNDE5Zjg3ZGI4ZTg1NzIyNmUxMzIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4ZmNlNGQxYmY2NDRhMmRhNmY1ZjJjNWYxNDQxYjk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk2ODIwNzc0Nzk4Nzc1LCAtOTYuNjc0ODI1OTIxMDMyMzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZThhMWIzOTgyYWY2NGIyMDllMDYwNDRhZGI0NGIxYmUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkyNWZlMTg5YmUwZDRhZDE4YjA5ZDAzNzkyNGEzNDY3ID0gJChgPGRpdiBpZD0iaHRtbF85MjVmZTE4OWJlMGQ0YWQxOGIwOWQwMzc5MjRhMzQ2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW50ZWxvcGUgUGFyayAoUGFyayk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZThhMWIzOTgyYWY2NGIyMDllMDYwNDRhZGI0NGIxYmUuc2V0Q29udGVudChodG1sXzkyNWZlMTg5YmUwZDRhZDE4YjA5ZDAzNzkyNGEzNDY3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85OGZjZTRkMWJmNjQ0YTJkYTZmNWYyYzVmMTQ0MWI5NS5iaW5kUG9wdXAocG9wdXBfZThhMWIzOTgyYWY2NGIyMDllMDYwNDRhZGI0NGIxYmUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjY2FlODNiZjYzODRhZTdiZWZhMjM3NGE5NzU2ZDFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0OTI1MTMwNjE0NDU1LCAtOTYuNzAyMTcwMjE1NzY0MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hNzA0ZDhkZTRmZDk0MjVmYTBlMDY2NzllOTBmZTljMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjQwYTJlZDc1YzE5NGVhNTk4ZjgzM2MyMDM0NjEwNjkgPSAkKGA8ZGl2IGlkPSJodG1sX2I0MGEyZWQ3NWMxOTRlYTU5OGY4MzNjMjAzNDYxMDY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CaXNvbiBXaXRjaGVzIChTYW5kd2ljaCBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTcwNGQ4ZGU0ZmQ5NDI1ZmEwZTA2Njc5ZTkwZmU5YzIuc2V0Q29udGVudChodG1sX2I0MGEyZWQ3NWMxOTRlYTU5OGY4MzNjMjAzNDYxMDY5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lY2NhZTgzYmY2Mzg0YWU3YmVmYTIzNzRhOTc1NmQxZS5iaW5kUG9wdXAocG9wdXBfYTcwNGQ4ZGU0ZmQ5NDI1ZmEwZTA2Njc5ZTkwZmU5YzIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkZGI3MzMwZjMyMDQwZmI5Yjg3ZGNkYjlkN2Q2NGE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzNzc3LCAtOTYuNzAwMDQ2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzIxMjZlN2NkODI5NDRjNTc4ZWFhMjY1NmQyYTUyMzBjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yZDBhMzE3NmI1OTY0NDkyYTc2OWE4NWQ4N2JhMDJhMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmQwYTMxNzZiNTk2NDQ5MmE3NjlhODVkODdiYTAyYTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1enp5JiMzOTtzIFRhY28gU2hvcCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yMTI2ZTdjZDgyOTQ0YzU3OGVhYTI2NTZkMmE1MjMwYy5zZXRDb250ZW50KGh0bWxfMmQwYTMxNzZiNTk2NDQ5MmE3NjlhODVkODdiYTAyYTEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzZkZGI3MzMwZjMyMDQwZmI5Yjg3ZGNkYjlkN2Q2NGE5LmJpbmRQb3B1cChwb3B1cF8yMTI2ZTdjZDgyOTQ0YzU3OGVhYTI2NTZkMmE1MjMwYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk3MDI4NzUzODVkNGJiY2E0YzEzMjU5YmRjMWVmNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTE4ODAxMzI2NDkwNSwgLTk2LjY4MTQ1NTQ5MzcyMzY2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzg1MGRjYzNjNTZiYjRkNzk4ZDhiNGEzNzM4ZDcwNzRiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lZWU2ZDU1NDk4Yzk0NDA2YjZhNTEzNzhhNmJhOGQ5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWVlNmQ1NTQ5OGM5NDQwNmI2YTUxMzc4YTZiYThkOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpZXphbm8mIzM5O3MgKEl0YWxpYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODUwZGNjM2M1NmJiNGQ3OThkOGI0YTM3MzhkNzA3NGIuc2V0Q29udGVudChodG1sX2VlZTZkNTU0OThjOTQ0MDZiNmE1MTM3OGE2YmE4ZDlkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jOTcwMjg3NTM4NWQ0YmJjYTRjMTMyNTliZGMxZWY2OC5iaW5kUG9wdXAocG9wdXBfODUwZGNjM2M1NmJiNGQ3OThkOGI0YTM3MzhkNzA3NGIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlOTczNDUyNzg2NTQ0Mzk5ZWMzMmI5MDQwNDBjZjI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEwMjgwMjkyOTMwNDYsIC05Ni42OTA0MTA5NDE2MTE1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVhNDU4NjBhMjhjNzQ3OTQ4N2Q5ZGZlNDRlNjU3ZjRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80MjU5ZWQzNWRhMTg0MDgxYTc2ZjBmZTA4ZTRjMTU2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDI1OWVkMzVkYTE4NDA4MWE3NmYwZmUwOGU0YzE1NmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNaWxsIEAgVGVsZWdyYXBoIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNWE0NTg2MGEyOGM3NDc5NDg3ZDlkZmU0NGU2NTdmNGUuc2V0Q29udGVudChodG1sXzQyNTllZDM1ZGExODQwODFhNzZmMGZlMDhlNGMxNTZiKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yZTk3MzQ1Mjc4NjU0NDM5OWVjMzJiOTA0MDQwY2YyOC5iaW5kUG9wdXAocG9wdXBfNWE0NTg2MGEyOGM3NDc5NDg3ZDlkZmU0NGU2NTdmNGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1YjRiNDQ2NGVlNjQ3YjRhZGRjOTMwY2RhMDUzYjY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0MjMyMTc2MjA4NSwgLTk2LjcwNzYxMDY1ODc0Mjc4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNlYTY0OTJkZjYxMDRmN2M5ZDI0MjQxZDI1YmIwOTVjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83YmYzNzEzZDE4Y2M0ZGQ0OWE3MmRhYzBlNDUwZDlkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2JmMzcxM2QxOGNjNGRkNDlhNzJkYWMwZTQ1MGQ5ZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJsdWUgT3JjaGlkIChUaGFpIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzNlYTY0OTJkZjYxMDRmN2M5ZDI0MjQxZDI1YmIwOTVjLnNldENvbnRlbnQoaHRtbF83YmYzNzEzZDE4Y2M0ZGQ0OWE3MmRhYzBlNDUwZDlkOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTViNGI0NDY0ZWU2NDdiNGFkZGM5MzBjZGEwNTNiNjguYmluZFBvcHVwKHBvcHVwXzNlYTY0OTJkZjYxMDRmN2M5ZDI0MjQxZDI1YmIwOTVjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZDlhMjMwY2RiYTE0NmJkYjUzZWEyODc5ZDVjMjEyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMDc3NDIsIC05Ni43MDY2NzQ2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2NhZDM4ZWVmY2ViZDQ1ZjliNzc4M2RkNDI1NTdhNzMzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMmMzNzk2NzEzODA0ODk0YTNhZjJlNTFkZjI4MTFmZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjJjMzc5NjcxMzgwNDg5NGEzYWYyZTUxZGYyODExZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVuIEfDonRlYXUgKEZyZW5jaCBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jYWQzOGVlZmNlYmQ0NWY5Yjc3ODNkZDQyNTU3YTczMy5zZXRDb250ZW50KGh0bWxfZjJjMzc5NjcxMzgwNDg5NGEzYWYyZTUxZGYyODExZmUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2JkOWEyMzBjZGJhMTQ2YmRiNTNlYTI4NzlkNWMyMTJjLmJpbmRQb3B1cChwb3B1cF9jYWQzOGVlZmNlYmQ0NWY5Yjc3ODNkZDQyNTU3YTczMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDdjMzIzM2RkNmQ4NDgxZmFmOWQ1Zjg3ZDY2M2RiMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjA1Nzk4MzM5NTIxMywgLTk2LjcwNjAwODk3MzYwMzc3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc1ZTMyZTliMWQ1MjRmOGZhMmY5MjcyZGUxYWY3NTMwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xM2U0ZjdkOWJhMWI0ZmI0OWRkZjYwNmE3MzgzNWVmYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTNlNGY3ZDliYTFiNGZiNDlkZGY2MDZhNzM4MzVlZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1lbW9yaWFsIFN0YWRpdW0gKENvbGxlZ2UgRm9vdGJhbGwgRmllbGQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc1ZTMyZTliMWQ1MjRmOGZhMmY5MjcyZGUxYWY3NTMwLnNldENvbnRlbnQoaHRtbF8xM2U0ZjdkOWJhMWI0ZmI0OWRkZjYwNmE3MzgzNWVmYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNDdjMzIzM2RkNmQ4NDgxZmFmOWQ1Zjg3ZDY2M2RiMDUuYmluZFBvcHVwKHBvcHVwXzc1ZTMyZTliMWQ1MjRmOGZhMmY5MjcyZGUxYWY3NTMwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGE2MGZmMjA3MWE0ZjkzYmU5ZTQyY2E2OWFiYmNhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDgwNTg0ODE0MjA0LCAtOTYuNzA5ODI5MTYwNzM4MzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzA4N2JiYzc3NzNlNGRiZjg1YTM4ZDI2MTgyYTg5ZTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2RlYTIxYTdiZTQ3NjQ2YWNhZmYyZjMzZjdiYWUxYzJkID0gJChgPGRpdiBpZD0iaHRtbF9kZWEyMWE3YmU0NzY0NmFjYWZmMmYzM2Y3YmFlMWMyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIE1pbGwgQ29mZmVlICZhbXA7IFRlYSAoQ29mZmVlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2MwODdiYmM3NzczZTRkYmY4NWEzOGQyNjE4MmE4OWU2LnNldENvbnRlbnQoaHRtbF9kZWEyMWE3YmU0NzY0NmFjYWZmMmYzM2Y3YmFlMWMyZCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMThhNjBmZjIwNzFhNGY5M2JlOWU0MmNhNjlhYmJjYTUuYmluZFBvcHVwKHBvcHVwX2MwODdiYmM3NzczZTRkYmY4NWEzOGQyNjE4MmE4OWU2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMmRjMWZiNGNmMzk0ZWJiODhkMDI1OGQ4MGVlOTA3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDIxNTYxODk5OTc1NCwgLTk2LjcwNzQwMjk5MTU2MDQ3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Q3ZjllNGVmZjU1ZDQ1MmY5Y2M2ZTUzMzMwMTcxNWU2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lYjBlYTFhMzVjMTI0NTEzODM3MmMzNTFlYzZmZGMyOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWIwZWExYTM1YzEyNDUxMzgzNzJjMzUxZWM2ZmRjMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJvaWxlciBCcmV3aW5nIENvbXBhbnkgKEJyZXdlcnkpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Q3ZjllNGVmZjU1ZDQ1MmY5Y2M2ZTUzMzMwMTcxNWU2LnNldENvbnRlbnQoaHRtbF9lYjBlYTFhMzVjMTI0NTEzODM3MmMzNTFlYzZmZGMyOSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYzJkYzFmYjRjZjM5NGViYjg4ZDAyNThkODBlZTkwNzIuYmluZFBvcHVwKHBvcHVwX2Q3ZjllNGVmZjU1ZDQ1MmY5Y2M2ZTUzMzMwMTcxNWU2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjhkNjA4ZDM5NGY0Nzg4YTEzN2NhYWYyMjUxMWZmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDcwNjM0MDQ2MzUxLCAtOTYuNzExMDI0NDkyMDk3ODhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTk4YWRhYjBlYTUzNGQ5NWFiM2QxNmUwNmJjYTBhZDcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzczMzE1Mzk0YTMzMDQ0MGNiZWVhN2M0OGE5Y2E5NDNjID0gJChgPGRpdiBpZD0iaHRtbF83MzMxNTM5NGEzMzA0NDBjYmVlYTdjNDhhOWNhOTQzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SXZhbm5hIENvbmUgKEljZSBDcmVhbSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hOThhZGFiMGVhNTM0ZDk1YWIzZDE2ZTA2YmNhMGFkNy5zZXRDb250ZW50KGh0bWxfNzMzMTUzOTRhMzMwNDQwY2JlZWE3YzQ4YTljYTk0M2MpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzkyOGQ2MDhkMzk0ZjQ3ODhhMTM3Y2FhZjIyNTExZmZkLmJpbmRQb3B1cChwb3B1cF9hOThhZGFiMGVhNTM0ZDk1YWIzZDE2ZTA2YmNhMGFkNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTcwNzdhNjU0OTk2NDM3NjgyZjNmYmYzOWY2NTUxNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQyNjA2LCAtOTYuNzA0ODE0Mzk5OTk5OTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNTQyZTA5YzJjODA0NGU0OGFmOGY0MTI4NjFlNjQ2ZjcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2I3MzBlYzg2ZjUyMTQ0NDA5OGI3ZjU0NmFiZmY1NTJhID0gJChgPGRpdiBpZD0iaHRtbF9iNzMwZWM4NmY1MjE0NDQwOThiN2Y1NDZhYmZmNTUyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFyY3VzIExpbmNvbG4gR3JhbmQgQ2luZW1hIChNb3ZpZSBUaGVhdGVyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81NDJlMDljMmM4MDQ0ZTQ4YWY4ZjQxMjg2MWU2NDZmNy5zZXRDb250ZW50KGh0bWxfYjczMGVjODZmNTIxNDQ0MDk4YjdmNTQ2YWJmZjU1MmEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2E3MDc3YTY1NDk5NjQzNzY4MmYzZmJmMzlmNjU1MTQ4LmJpbmRQb3B1cChwb3B1cF81NDJlMDljMmM4MDQ0ZTQ4YWY4ZjQxMjg2MWU2NDZmNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzU2NWIwODAwNzY3NGYyYjg5NGVjYWE1YWM2ZDM4OWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTgwMDQ2NjA1MTE5NywgLTk2LjcxMjMxODA4MjU4MzMxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY4OGIwZmNhYzEyNzQ1YTk5N2YwOGI1YTMxYjc0ZDMzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xYmQyZWM1MmJkYzU0NDA4YjQ3NTM3OTAwM2UwZWU3NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWJkMmVjNTJiZGM1NDQwOGI0NzUzNzkwMDNlMGVlNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpbm5hY2xlIEJhbmsgQXJlbmEgKENvbGxlZ2UgQmFza2V0YmFsbCBDb3VydCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjg4YjBmY2FjMTI3NDVhOTk3ZjA4YjVhMzFiNzRkMzMuc2V0Q29udGVudChodG1sXzFiZDJlYzUyYmRjNTQ0MDhiNDc1Mzc5MDAzZTBlZTc3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zNTY1YjA4MDA3Njc0ZjJiODk0ZWNhYTVhYzZkMzg5Zi5iaW5kUG9wdXAocG9wdXBfNjg4YjBmY2FjMTI3NDVhOTk3ZjA4YjVhMzFiNzRkMzMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlZWRlOWY4MDQwZjQ0YTJhM2M5OTMyN2RlZWMzMTI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIyNzAyNDg2Mjk3MjMsIC05Ni42ODMxODc5MzQzNTY0NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85NWJiZTk0ZDIyNWI0MmYzOGViYTIzNWE3ZTAxNmZmNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTkwOGE3MjRiNTFiNDNjYTkyOGI2YmY0OGQ2OWFkMTMgPSAkKGA8ZGl2IGlkPSJodG1sXzk5MDhhNzI0YjUxYjQzY2E5MjhiNmJmNDhkNjlhZDEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYW5od2ljaCBDYWZlIChDYWbDqSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTViYmU5NGQyMjViNDJmMzhlYmEyMzVhN2UwMTZmZjUuc2V0Q29udGVudChodG1sXzk5MDhhNzI0YjUxYjQzY2E5MjhiNmJmNDhkNjlhZDEzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZWVkZTlmODA0MGY0NGEyYTNjOTkzMjdkZWVjMzEyNC5iaW5kUG9wdXAocG9wdXBfOTViYmU5NGQyMjViNDJmMzhlYmEyMzVhN2UwMTZmZjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlN2YzZmFkMzQ3YTQ4YjY5MzA2ZDlmMjQwNWVlYzMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0ODk0MTA0NjQyOTc0LCAtOTYuNzEwNjYzNTM0ODI1NjFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjQ4M2ZiNDUyZmQ2NGM4M2FhMjdkZDVhNGZkNDY3ODYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzcwYWZiZjc3YjJjNTQyYzJhMjBmY2ViMWU1MWNjN2E2ID0gJChgPGRpdiBpZD0iaHRtbF83MGFmYmY3N2IyYzU0MmMyYTIwZmNlYjFlNTFjYzdhNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmFybWVyc+KAmSBNYXJrZXQgKEZhcm1lcnMgTWFya2V0KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iNDgzZmI0NTJmZDY0YzgzYWEyN2RkNWE0ZmQ0Njc4Ni5zZXRDb250ZW50KGh0bWxfNzBhZmJmNzdiMmM1NDJjMmEyMGZjZWIxZTUxY2M3YTYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzZlN2YzZmFkMzQ3YTQ4YjY5MzA2ZDlmMjQwNWVlYzMyLmJpbmRQb3B1cChwb3B1cF9iNDgzZmI0NTJmZDY0YzgzYWEyN2RkNWE0ZmQ0Njc4NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2ExNDNlYzMyOTNmNGZjMDhmZDBjZmNjMzE3MjI5YWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM1ODk2NjQ4NTk5LCAtOTYuNzAyMzMwNzUwNzUyNjhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmRjYTBiZjQ1NjQzNGNkZThmYzU1YmMwMDE3ODQ2NDUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzE3M2QyYmRiN2RmODQ1ZmVhMGIzMWVlNmY2OTY0ZmRiID0gJChgPGRpdiBpZD0iaHRtbF8xNzNkMmJkYjdkZjg0NWZlYTBiMzFlZTZmNjk2NGZkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFN1bHRhbiYjMzk7cyBLaXRlIChNaWRkbGUgRWFzdGVybiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82ZGNhMGJmNDU2NDM0Y2RlOGZjNTViYzAwMTc4NDY0NS5zZXRDb250ZW50KGh0bWxfMTczZDJiZGI3ZGY4NDVmZWEwYjMxZWU2ZjY5NjRmZGIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2NhMTQzZWMzMjkzZjRmYzA4ZmQwY2ZjYzMxNzIyOWFiLmJpbmRQb3B1cChwb3B1cF82ZGNhMGJmNDU2NDM0Y2RlOGZjNTViYzAwMTc4NDY0NSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTI0NjdlNzJkNzhiNDA0NWEwOTljYjc3ODdiNjA2NjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQxNTM4NzM0NTY5NCwgLTk2LjY1NTE0NjEwNTQ0ODQ3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzYyNTQ5ZGI3YWE2MjQxNzc4MzJlNmM1ZmQ1MWVlODhkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85NGRjODRmOGRkOTk0ODFjYmZhYWMzZTlmZTJkNTVjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTRkYzg0ZjhkZDk5NDgxY2JmYWFjM2U5ZmUyZDU1YzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPnlvZ3VydGluaSAoRnJvemVuIFlvZ3VydCBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82MjU0OWRiN2FhNjI0MTc3ODMyZTZjNWZkNTFlZTg4ZC5zZXRDb250ZW50KGh0bWxfOTRkYzg0ZjhkZDk5NDgxY2JmYWFjM2U5ZmUyZDU1YzQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2EyNDY3ZTcyZDc4YjQwNDVhMDk5Y2I3Nzg3YjYwNjYwLmJpbmRQb3B1cChwb3B1cF82MjU0OWRiN2FhNjI0MTc3ODMyZTZjNWZkNTFlZTg4ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2JlYjhkN2NiMDliNGE1NjlmZWE2OTZjZTQ2MjA4MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTkxODczNzEyMTQ2OSwgLTk2LjY3MTcyODgyMDg0Mjg2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MyYzMwOTNiNmU1NzQ3MjA5N2Q2ZmM4MTk5ZjIyYjFjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hMjcxY2EyMGFiODY0OGU1YTZkNDM3NTZhYmE1ZmE1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTI3MWNhMjBhYjg2NDhlNWE2ZDQzNzU2YWJhNWZhNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vcmFuJiMzOTtzIExpcXVvciBXb3JrcyAoQmVlciBHYXJkZW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2MyYzMwOTNiNmU1NzQ3MjA5N2Q2ZmM4MTk5ZjIyYjFjLnNldENvbnRlbnQoaHRtbF9hMjcxY2EyMGFiODY0OGU1YTZkNDM3NTZhYmE1ZmE1Zik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfN2JlYjhkN2NiMDliNGE1NjlmZWE2OTZjZTQ2MjA4MWIuYmluZFBvcHVwKHBvcHVwX2MyYzMwOTNiNmU1NzQ3MjA5N2Q2ZmM4MTk5ZjIyYjFjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjIyYzY2NmZkYjk0N2M0YjYzM2I2MjFhN2IwZDQwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNjQxNzc1NjQwMzE4LCAtOTYuNzExNjI4NzUwNDY5MzNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMmIzNjE0N2UxMmUyNDgwY2JkNDcyMjkxNTM2NzA4NWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzBlYjEyM2FkZDM1ZjQ0ZjNiNGIzYWIxNDM0MWM2MTNiID0gJChgPGRpdiBpZD0iaHRtbF8wZWIxMjNhZGQzNWY0NGYzYjRiM2FiMTQzNDFjNjEzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFJhaWx5YXJkIChQbGF6YSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMmIzNjE0N2UxMmUyNDgwY2JkNDcyMjkxNTM2NzA4NWUuc2V0Q29udGVudChodG1sXzBlYjEyM2FkZDM1ZjQ0ZjNiNGIzYWIxNDM0MWM2MTNiKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kNjIyYzY2NmZkYjk0N2M0YjYzM2I2MjFhN2IwZDQwYS5iaW5kUG9wdXAocG9wdXBfMmIzNjE0N2UxMmUyNDgwY2JkNDcyMjkxNTM2NzA4NWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4YWI5ZWY1NTc1YTQ1MjZhN2ZkY2YxOGIxN2IzYjFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAwMDU4OTQyNjAzNTksIC05Ni42NTA3NzkxOTMwNTIyOV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yNGM0MWY0MGI3NWQ0YzUyYmY1NDdlOTRlNzkzMDA3YyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMDIzYTQ4OWY4YzAxNGY2M2IzNmI2YjdlOTFhNmM4ODggPSAkKGA8ZGl2IGlkPSJodG1sXzAyM2E0ODlmOGMwMTRmNjNiMzZiNmI3ZTkxYTZjODg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaWVkbW9udCBCaXN0cm8gKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI0YzQxZjQwYjc1ZDRjNTJiZjU0N2U5NGU3OTMwMDdjLnNldENvbnRlbnQoaHRtbF8wMjNhNDg5ZjhjMDE0ZjYzYjM2YjZiN2U5MWE2Yzg4OCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMjhhYjllZjU1NzVhNDUyNmE3ZmRjZjE4YjE3YjNiMWEuYmluZFBvcHVwKHBvcHVwXzI0YzQxZjQwYjc1ZDRjNTJiZjU0N2U5NGU3OTMwMDdjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMjRkOWNmZjU0ZTY0ZmNiYmRhNWM5MTQ5ZDMyNWQ5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDQ4MTMyNDc4MDA0LCAtOTYuNzEyMDkyMDMxOTQ2NTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzQ1Zjc3ZDRhMjZlNDRlNGIyMWEwNDk0MWRlOGU1YTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI1NWZkNGM5ZDU2NjRjYTZhMmI3OGYwMjE1ZjUyMWEwID0gJChgPGRpdiBpZD0iaHRtbF8yNTVmZDRjOWQ1NjY0Y2E2YTJiNzhmMDIxNWY1MjFhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9wQ2F0IChCZWVyIEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzQ1Zjc3ZDRhMjZlNDRlNGIyMWEwNDk0MWRlOGU1YTQuc2V0Q29udGVudChodG1sXzI1NWZkNGM5ZDU2NjRjYTZhMmI3OGYwMjE1ZjUyMWEwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMjRkOWNmZjU0ZTY0ZmNiYmRhNWM5MTQ5ZDMyNWQ5OS5iaW5kUG9wdXAocG9wdXBfYzQ1Zjc3ZDRhMjZlNDRlNGIyMWEwNDk0MWRlOGU1YTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmNjUwZTdjYjEyOTQxZTQ4NDAwNGI0MDYwNmRhYmE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk2NjIwNDk4NDM1NDUsIC05Ni42OTY2MjExNDQwMDgxNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wMDU3YmY3YzI3OTc0YjhhYjFlODU5NzBjY2ExNjE4YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTc2ODE3NTI1YWRjNGYxN2JlYzZhM2JkNzNjNDgwNzggPSAkKGA8ZGl2IGlkPSJodG1sX2E3NjgxNzUyNWFkYzRmMTdiZWM2YTNiZDczYzQ4MDc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmF0ZWZ1bCBCcmVhZCAmYW1wOyBGcmVha2JlYXQgVmVnZXRhcmlhbiAoVmVnZXRhcmlhbiAvIFZlZ2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzAwNTdiZjdjMjc5NzRiOGFiMWU4NTk3MGNjYTE2MThhLnNldENvbnRlbnQoaHRtbF9hNzY4MTc1MjVhZGM0ZjE3YmVjNmEzYmQ3M2M0ODA3OCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZWY2NTBlN2NiMTI5NDFlNDg0MDA0YjQwNjA2ZGFiYTkuYmluZFBvcHVwKHBvcHVwXzAwNTdiZjdjMjc5NzRiOGFiMWU4NTk3MGNjYTE2MThhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMGYyZTQwYWM3YTg0NDk2YWRhZmRhODczNzIzN2Q0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNTY5NTg0MDY3OTM0NiwgLTk2LjcxMTM1MzEyODEwMDg4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNiNTc5ZmVlMzZmNzQ1MDM5ZTNkMGI1OTQ5ZTI5NmIwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mYTJkMTZhYTQ2YTg0YjgxODJkMzZmOGFmODQzMjY5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmEyZDE2YWE0NmE4NGI4MTgyZDM2ZjhhZjg0MzI2OWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpbmthaWRlciBUYXAgUm9vbSAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2I1NzlmZWUzNmY3NDUwMzllM2QwYjU5NDllMjk2YjAuc2V0Q29udGVudChodG1sX2ZhMmQxNmFhNDZhODRiODE4MmQzNmY4YWY4NDMyNjllKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kMGYyZTQwYWM3YTg0NDk2YWRhZmRhODczNzIzN2Q0MC5iaW5kUG9wdXAocG9wdXBfM2I1NzlmZWUzNmY3NDUwMzllM2QwYjU5NDllMjk2YjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0YmNmNzliNTc0YzQyZjE5NDgzZDM2NTRjMTMxMGYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA2MTA1NTk0NjkwNTg1LCAtOTYuNzA1ODI5MTczMjU3MTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjhmYjFlMzRhZTRlNDg2MThlYzliMTUwYzlkNGUxYmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MxOTg0YTk2ZGY1ZDQwOWJhYTBhMjQwODVjNGE2NjNlID0gJChgPGRpdiBpZD0iaHRtbF9jMTk4NGE5NmRmNWQ0MDliYWEwYTI0MDg1YzRhNjYzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGEgVmluY2kmIzM5O3MgSXRhbGlhbiBTaWRld2FsayAoSXRhbGlhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iOGZiMWUzNGFlNGU0ODYxOGVjOWIxNTBjOWQ0ZTFiYS5zZXRDb250ZW50KGh0bWxfYzE5ODRhOTZkZjVkNDA5YmFhMGEyNDA4NWM0YTY2M2UpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA0YmNmNzliNTc0YzQyZjE5NDgzZDM2NTRjMTMxMGYxLmJpbmRQb3B1cChwb3B1cF9iOGZiMWUzNGFlNGU0ODYxOGVjOWIxNTBjOWQ0ZTFiYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTllZTgxYjNmMTdmNDI4NTk2MGZlYmExNmE3MWJhM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ4Mzc4OTk2NDIzMywgLTk2LjcwMjAzMzg3NTYwMjI1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2M0ZDVhZTdjMWE1NDQ3YzI4N2U0YzBkNzRkMTM2MDQ5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jNDM0OTJiZmM4NmM0NTQyYTQ5MmEyNDc0YTgwMDllYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzQzNDkyYmZjODZjNDU0MmE0OTJhMjQ3NGE4MDA5ZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDb2ZmZWUgSG91c2UgKENhZsOpKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNGQ1YWU3YzFhNTQ0N2MyODdlNGMwZDc0ZDEzNjA0OS5zZXRDb250ZW50KGh0bWxfYzQzNDkyYmZjODZjNDU0MmE0OTJhMjQ3NGE4MDA5ZWMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2E5ZWU4MWIzZjE3ZjQyODU5NjBmZWJhMTZhNzFiYTNkLmJpbmRQb3B1cChwb3B1cF9jNGQ1YWU3YzFhNTQ0N2MyODdlNGMwZDc0ZDEzNjA0OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M5MDEzZTAwZTQ4NDEyYmEyZTAxNDRkMDg0NDU4ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ5MDg4MjA2ODMzNjQsIC05Ni43MTAxMDE3ODI0NTg1Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yNGU1MDQzZTViMTc0MDRlYjJiYTUyOWMxY2VjYjQ4OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMWY3ZWIxYTgzN2E2NDFiN2EwMDlhOWMzZTEzNDUzODggPSAkKGA8ZGl2IGlkPSJodG1sXzFmN2ViMWE4MzdhNjQxYjdhMDA5YTljM2UxMzQ1Mzg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgT3ZlbiAoSW5kaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI0ZTUwNDNlNWIxNzQwNGViMmJhNTI5YzFjZWNiNDg5LnNldENvbnRlbnQoaHRtbF8xZjdlYjFhODM3YTY0MWI3YTAwOWE5YzNlMTM0NTM4OCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfY2M5MDEzZTAwZTQ4NDEyYmEyZTAxNDRkMDg0NDU4ZDcuYmluZFBvcHVwKHBvcHVwXzI0ZTUwNDNlNWIxNzQwNGViMmJhNTI5YzFjZWNiNDg5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDA4Y2U4Nzc1MGI0MGJmOTYwOGRmNzRhZmVjNWQ2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDA4NjMsIC05Ni42NDgyNzQxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY2MmJiOTFjZDc4NjRkMDk5NDhmNTllNmIzZWVhMjlkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mZjgwMGI2OWFkYWY0NTJjOTVmN2M0YTRhZmM0YjZhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmY4MDBiNjlhZGFmNDUyYzk1ZjdjNGE0YWZjNGI2YTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyZXNoIFRoeW1lIEZhcm1lcnMgTWFya2V0IChHcm9jZXJ5IFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82NjJiYjkxY2Q3ODY0ZDA5OTQ4ZjU5ZTZiM2VlYTI5ZC5zZXRDb250ZW50KGh0bWxfZmY4MDBiNjlhZGFmNDUyYzk1ZjdjNGE0YWZjNGI2YTUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2U0MDhjZTg3NzUwYjQwYmY5NjA4ZGY3NGFmZWM1ZDYxLmJpbmRQb3B1cChwb3B1cF82NjJiYjkxY2Q3ODY0ZDA5OTQ4ZjU5ZTZiM2VlYTI5ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjA2YzZjYjdjY2YzNDkwZjk3YzhkYWMyNmE0OTdkZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ2MDY2MTg5NTA5MDQsIC05Ni43MDk4NzQzNjE2MjkyOF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yNmI3MGY4YTZiMDk0NDQ2YmUwZDZlNTQ0NzYxMTUyZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMDYyZjBhZTFlY2ZlNGU1ZDk2MmU5YWU3Y2I2YzRlNDAgPSAkKGA8ZGl2IGlkPSJodG1sXzA2MmYwYWUxZWNmZTRlNWQ5NjJlOWFlN2NiNmM0ZTQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DcmVzY2VudCBNb29uIENvZmZlZSAoQ29mZmVlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI2YjcwZjhhNmIwOTQ0NDZiZTBkNmU1NDQ3NjExNTJkLnNldENvbnRlbnQoaHRtbF8wNjJmMGFlMWVjZmU0ZTVkOTYyZTlhZTdjYjZjNGU0MCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjA2YzZjYjdjY2YzNDkwZjk3YzhkYWMyNmE0OTdkZmMuYmluZFBvcHVwKHBvcHVwXzI2YjcwZjhhNmIwOTQ0NDZiZTBkNmU1NDQ3NjExNTJkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iY2Q5MDgyMjE0MzY0ZmU2YjliOWQ0YmJiMTdmOTVlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMzkxNCwgLTk2LjY5MTg2Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yNTQxOGYzOGZkMGY0NjAxYjQ1ZDdlZDIwNWY1ODQ2YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMWY3YzQ4YWZlNjc5NDg0Mzg3NmVkNWZmZDdiNWM5NGIgPSAkKGA8ZGl2IGlkPSJodG1sXzFmN2M0OGFmZTY3OTQ4NDM4NzZlZDVmZmQ3YjVjOTRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQmF5IChTa2F0ZSBQYXJrKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yNTQxOGYzOGZkMGY0NjAxYjQ1ZDdlZDIwNWY1ODQ2YS5zZXRDb250ZW50KGh0bWxfMWY3YzQ4YWZlNjc5NDg0Mzg3NmVkNWZmZDdiNWM5NGIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2JjZDkwODIyMTQzNjRmZTZiOWI5ZDRiYmIxN2Y5NWU5LmJpbmRQb3B1cChwb3B1cF8yNTQxOGYzOGZkMGY0NjAxYjQ1ZDdlZDIwNWY1ODQ2YSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDI1YjFlODk3OTg5NDEwOTllYzNjMTA1ZjI4NGVjYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTUwNzU4MDQyNDc4MywgLTk2LjcxMDg0MjIxODI2MDMxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2RmY2Y5Y2ZjOWMyMDQ4MzZhMmM5MDM3NDRiZTQzMjkwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81NDE4MzQ3OGQwMDU0OTI1YmRlNDM2YTQyYzZlYmE1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTQxODM0NzhkMDA1NDkyNWJkZTQzNmE0MmM2ZWJhNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhemxvJiMzOTtzIEJyZXdlcnkgJmFtcDsgR3JpbGwgKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2RmY2Y5Y2ZjOWMyMDQ4MzZhMmM5MDM3NDRiZTQzMjkwLnNldENvbnRlbnQoaHRtbF81NDE4MzQ3OGQwMDU0OTI1YmRlNDM2YTQyYzZlYmE1NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMDI1YjFlODk3OTg5NDEwOTllYzNjMTA1ZjI4NGVjYzYuYmluZFBvcHVwKHBvcHVwX2RmY2Y5Y2ZjOWMyMDQ4MzZhMmM5MDM3NDRiZTQzMjkwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzk5MmEyZjdhNDQ0MGM5OTM0MTE1MzhiODg4Zjc2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDA5MDgyNDYwMzEzLCAtOTYuNzA1NDUyODExNDM5NTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjE5NDY5OGViMGQ4NDk1OGE0Mjk0MGUyZDhmNjNkZGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VjNWFkNmFiZjZlYzRkMDRhYjVjY2Y3NmJiMjBhMmY1ID0gJChgPGRpdiBpZD0iaHRtbF9lYzVhZDZhYmY2ZWM0ZDA0YWI1Y2NmNzZiYjIwYTJmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEhhcHB5IFJhdmVuIChCZWVyIEdhcmRlbik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjE5NDY5OGViMGQ4NDk1OGE0Mjk0MGUyZDhmNjNkZGUuc2V0Q29udGVudChodG1sX2VjNWFkNmFiZjZlYzRkMDRhYjVjY2Y3NmJiMjBhMmY1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9mMzk5MmEyZjdhNDQ0MGM5OTM0MTE1MzhiODg4Zjc2OS5iaW5kUG9wdXAocG9wdXBfNjE5NDY5OGViMGQ4NDk1OGE0Mjk0MGUyZDhmNjNkZGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliNWI1ZjEzNGMzMzQ0NDA5MjlkYzg3ZjZiNjVhNmQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI0NDcyMDY0NzYwODUsIC05Ni42ODE4NjgxNTk4MDgyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzEyNTg1Yzc0NGViYzRhM2FhNTliY2RmZWY5ZDY5YzgzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81MjBkOTNiYjVlMjY0Y2EwOWExMzZiMGFhM2RhMTVjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTIwZDkzYmI1ZTI2NGNhMDlhMTM2YjBhYTNkYTE1YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZ1bmcgVGF1IChWaWV0bmFtZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzEyNTg1Yzc0NGViYzRhM2FhNTliY2RmZWY5ZDY5YzgzLnNldENvbnRlbnQoaHRtbF81MjBkOTNiYjVlMjY0Y2EwOWExMzZiMGFhM2RhMTVjNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOWI1YjVmMTM0YzMzNDQ0MDkyOWRjODdmNmI2NWE2ZDQuYmluZFBvcHVwKHBvcHVwXzEyNTg1Yzc0NGViYzRhM2FhNTliY2RmZWY5ZDY5YzgzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDY4YTBkNTM0OGQ0ZDYyOWU0MzgzMWY5NTBjYjBiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDY5MDc0NDA3NTc5LCAtOTYuNzExMTQ2Mjg5MzEwNjVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjI0ZmZiMDYyNjBiNGQwZTljMWM3MmIwODVmZDYyNTggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg3N2Y2ZTU0N2E4MjQ2OTJiZDkxYTMwZTIzMDc0MmVkID0gJChgPGRpdiBpZD0iaHRtbF84NzdmNmU1NDdhODI0NjkyYmQ5MWEzMGUyMzA3NDJlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SW5kaWdvIEJyaWRnZSBCb29rcyAoQm9va3N0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yMjRmZmIwNjI2MGI0ZDBlOWMxYzcyYjA4NWZkNjI1OC5zZXRDb250ZW50KGh0bWxfODc3ZjZlNTQ3YTgyNDY5MmJkOTFhMzBlMjMwNzQyZWQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzFkNjhhMGQ1MzQ4ZDRkNjI5ZTQzODMxZjk1MGNiMGIzLmJpbmRQb3B1cChwb3B1cF8yMjRmZmIwNjI2MGI0ZDBlOWMxYzcyYjA4NWZkNjI1OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDdjYzRmOTJmYzlmNGM5MmI5NmI4ZDY4MDlkNjk1MmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Mjg2MzYyMjcyNTMwMywgLTk2LjY2Njg3Mzg0MzI4MjQ5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2IwOTJjNTU4OTU5YzRiZmRhYmY3YzI5MmUyZWE2MmNmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zZThlZWMxZjg1ODg0OGE2ODVjYWY5MGNlNTU4ODA5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2U4ZWVjMWY4NTg4NDhhNjg1Y2FmOTBjZTU1ODgwOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVOTCBEYWlyeSBTdG9yZSAoR2VuZXJhbCBDb2xsZWdlICZhbXA7IFVuaXZlcnNpdHkpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2IwOTJjNTU4OTU5YzRiZmRhYmY3YzI5MmUyZWE2MmNmLnNldENvbnRlbnQoaHRtbF8zZThlZWMxZjg1ODg0OGE2ODVjYWY5MGNlNTU4ODA5NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNDdjYzRmOTJmYzlmNGM5MmI5NmI4ZDY4MDlkNjk1MmMuYmluZFBvcHVwKHBvcHVwX2IwOTJjNTU4OTU5YzRiZmRhYmY3YzI5MmUyZWE2MmNmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzUxZGJkZDlmNzk0Yjk0YjU4ODI1MDg1NjA2NmY5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwODUyODIyMTgwMzc5LCAtOTYuNjczMTM3Njg2MjEyNzFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzYzNmM0MTU1Y2Y5NGY1Y2EzMDE3NGE0NDYwZWRhYjYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y4MzFkOWVhMWQ5MjRmZjNiYjFlNWUyYTg3ZTE2MzNlID0gJChgPGRpdiBpZD0iaHRtbF9mODMxZDllYTFkOTI0ZmYzYmIxZTVlMmE4N2UxNjMzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V29vZHMgUGFyayAoUGFyayk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzYzNmM0MTU1Y2Y5NGY1Y2EzMDE3NGE0NDYwZWRhYjYuc2V0Q29udGVudChodG1sX2Y4MzFkOWVhMWQ5MjRmZjNiYjFlNWUyYTg3ZTE2MzNlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9mYzUxZGJkZDlmNzk0Yjk0YjU4ODI1MDg1NjA2NmY5OS5iaW5kUG9wdXAocG9wdXBfYzYzNmM0MTU1Y2Y5NGY1Y2EzMDE3NGE0NDYwZWRhYjYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmNjU0NDliNmFiMTRmZmE4NjgzNmRkMDlkZWM1ZTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1MTU5LCAtOTYuNzA5MjA3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzA0YjM4MTkwMTRhMTQzNDk4NDRmMDE4ZWRkNWFmNjMzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ZDI1OGEyNWNhYzA0YjA4YTM2NzYyYzM0MjFjODhlMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGQyNThhMjVjYWMwNGIwOGEzNjc2MmMzNDIxYzg4ZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBPdGhlciBSb29tIChTcGVha2Vhc3kpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzA0YjM4MTkwMTRhMTQzNDk4NDRmMDE4ZWRkNWFmNjMzLnNldENvbnRlbnQoaHRtbF80ZDI1OGEyNWNhYzA0YjA4YTM2NzYyYzM0MjFjODhlMSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMmY2NTQ0OWI2YWIxNGZmYTg2ODM2ZGQwOWRlYzVlNDIuYmluZFBvcHVwKHBvcHVwXzA0YjM4MTkwMTRhMTQzNDk4NDRmMDE4ZWRkNWFmNjMzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNDQ2N2IwNDY2MGQ0M2I1OTdjZjgzZjY3MWVlMTJkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNjAyODI0Nzk3OTI2LCAtOTYuNzEwMDMzNDcyODA5NjRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTA5N2I4ODg1MzEyNDE5ZWI5ZGU0Y2E1MjMzNGI2YjggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzYyY2NiZDQ3YTIyZjQ4ZWM5MGFmZjEyMjY0NzEwNTFiID0gJChgPGRpdiBpZD0iaHRtbF82MmNjYmQ0N2EyMmY0OGVjOTBhZmYxMjI2NDcxMDUxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVhZEJlbGx5IChHYXN0cm9wdWIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EwOTdiODg4NTMxMjQxOWViOWRlNGNhNTIzMzRiNmI4LnNldENvbnRlbnQoaHRtbF82MmNjYmQ0N2EyMmY0OGVjOTBhZmYxMjI2NDcxMDUxYik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMTQ0NjdiMDQ2NjBkNDNiNTk3Y2Y4M2Y2NzFlZTEyZGQuYmluZFBvcHVwKHBvcHVwX2EwOTdiODg4NTMxMjQxOWViOWRlNGNhNTIzMzRiNmI4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDc3NWM0ODRhMmY0ZDc5OTU4YzUxZTkxOGVlZTc1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3ODg2OTk1OTkxOTM3LCAtOTYuNjg1Nzc5NTc4ODU2NDRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTViYjFjNmIyMTM3NDRiY2EzNmQ2Zjg4MWY3YzI5MTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ExYjg4NGFjMzEwNjRmN2JiYTljNTA3OGY3ZWJhMTM2ID0gJChgPGRpdiBpZD0iaHRtbF9hMWI4ODRhYzMxMDY0ZjdiYmE5YzUwNzhmN2ViYTEzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q291bnRyeSBDbHViIE9mIExpbmNvbG4gKFNvY2lhbCBDbHViKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNWJiMWM2YjIxMzc0NGJjYTM2ZDZmODgxZjdjMjkxNi5zZXRDb250ZW50KGh0bWxfYTFiODg0YWMzMTA2NGY3YmJhOWM1MDc4ZjdlYmExMzYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzI0Nzc1YzQ4NGEyZjRkNzk5NThjNTFlOTE4ZWVlNzU5LmJpbmRQb3B1cChwb3B1cF8xNWJiMWM2YjIxMzc0NGJjYTM2ZDZmODgxZjdjMjkxNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDg4YmNhNTExZWE1NGE1MDhhMjg1NDI1Y2Q3Y2ZiYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM0MDE5Mzc0NzgwNCwgLTk2LjcwNTcxMjc0MjE4MTI2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2RhOWNlZDYwY2UyODRjNDE5NTcxOTg1MWZmMzA5MzRiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lMjY5YTg4Yjc2Y2M0ZTIwYTI0MGQyYWYwZmM4MDczZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTI2OWE4OGI3NmNjNGUyMGEyNDBkMmFmMGZjODA3M2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNjb290ZXImIzM5O3MgQ29mZmVlaG91c2UgKENvZmZlZSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kYTljZWQ2MGNlMjg0YzQxOTU3MTk4NTFmZjMwOTM0Yi5zZXRDb250ZW50KGh0bWxfZTI2OWE4OGI3NmNjNGUyMGEyNDBkMmFmMGZjODA3M2QpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA4OGJjYTUxMWVhNTRhNTA4YTI4NTQyNWNkN2NmYmIzLmJpbmRQb3B1cChwb3B1cF9kYTljZWQ2MGNlMjg0YzQxOTU3MTk4NTFmZjMwOTM0YikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTgwYTRmMGI0MmNiNDQzZTgxMTgwYzBkNGU1ZGY5ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ5MTA2NTYxODY0LCAtOTYuNzA5MjM4NDY0NTIwNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jZWUxNTI2MTc2NGY0ZmM0YTI5M2RkNjhjMDQwMTRkNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzljYjgzZjhkYjFiNDAxOGE3ZmYzODE2OTJlOTNkMjYgPSAkKGA8ZGl2IGlkPSJodG1sX2M5Y2I4M2Y4ZGIxYjQwMThhN2ZmMzgxNjkyZTkzZDI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UYXZlcm4gb24gdGhlIFNxdWFyZSAoQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jZWUxNTI2MTc2NGY0ZmM0YTI5M2RkNjhjMDQwMTRkNi5zZXRDb250ZW50KGh0bWxfYzljYjgzZjhkYjFiNDAxOGE3ZmYzODE2OTJlOTNkMjYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2U4MGE0ZjBiNDJjYjQ0M2U4MTE4MGMwZDRlNWRmOWQ3LmJpbmRQb3B1cChwb3B1cF9jZWUxNTI2MTc2NGY0ZmM0YTI5M2RkNjhjMDQwMTRkNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU1NTU3ZGIyZGExNGRmNjhlM2RmMjNjMmNmYzc3M2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODUxMjQ5NjExNDcyNCwgLTk2LjcxMDc5MDE4NTY1MzI3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk3MjFmZGIwY2I2OTRmOTQ4ZTA3NGU2NzM0YTRiNjAwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82ZGRjMDE4OWM2YzU0ZjEwYWI0NGIzNTYwMDQ1YTk5MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmRkYzAxODljNmM1NGYxMGFiNDRiMzU2MDA0NWE5OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldoaXRlIEVsbSBCcmV3ZXJ5IChCcmV3ZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85NzIxZmRiMGNiNjk0Zjk0OGUwNzRlNjczNGE0YjYwMC5zZXRDb250ZW50KGh0bWxfNmRkYzAxODljNmM1NGYxMGFiNDRiMzU2MDA0NWE5OTIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzFlNTU1N2RiMmRhMTRkZjY4ZTNkZjIzYzJjZmM3NzNjLmJpbmRQb3B1cChwb3B1cF85NzIxZmRiMGNiNjk0Zjk0OGUwNzRlNjczNGE0YjYwMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTgzNDcxNjIyZGFlNGQxNDhhYTUyMDMyMDExYmUxNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTc0ODE5ODQxMjU0MSwgLTk2LjY1NDE5MTk5OTc5MzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODJiN2Y0NTQyODY4NGNmZmE1ZGIwNDMxOTcxOWUyM2UgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzM4ZTlmY2IwMTZmNTQzNGM5MzJkNWNjM2I2YzA1NjhkID0gJChgPGRpdiBpZD0iaHRtbF8zOGU5ZmNiMDE2ZjU0MzRjOTMyZDVjYzNiNmMwNTY4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFpc2luZyBDYW5lJiMzOTtzIENoaWNrZW4gRmluZ2VycyAoRnJpZWQgQ2hpY2tlbiBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODJiN2Y0NTQyODY4NGNmZmE1ZGIwNDMxOTcxOWUyM2Uuc2V0Q29udGVudChodG1sXzM4ZTlmY2IwMTZmNTQzNGM5MzJkNWNjM2I2YzA1NjhkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hODM0NzE2MjJkYWU0ZDE0OGFhNTIwMzIwMTFiZTE0Zi5iaW5kUG9wdXAocG9wdXBfODJiN2Y0NTQyODY4NGNmZmE1ZGIwNDMxOTcxOWUyM2UpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxNjI5ZmQxOWFkODQ4YTY5MjIzMGFiNzZlNTAxOWMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0ODgyLCAtOTYuNjUwNDYzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E1ZWU2OGY0NzExYjQ3NTQ5MTFhMmZkNmRhZGM3NDkzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kODYyMmRhZmU4ZTI0ZTJkOTEyOWY5YTYyYmRhNDYyOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDg2MjJkYWZlOGUyNGUyZDkxMjlmOWE2MmJkYTQ2MjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh5LVZlZSAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTVlZTY4ZjQ3MTFiNDc1NDkxMWEyZmQ2ZGFkYzc0OTMuc2V0Q29udGVudChodG1sX2Q4NjIyZGFmZThlMjRlMmQ5MTI5ZjlhNjJiZGE0NjI5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lMTYyOWZkMTlhZDg0OGE2OTIyMzBhYjc2ZTUwMTljMC5iaW5kUG9wdXAocG9wdXBfYTVlZTY4ZjQ3MTFiNDc1NDkxMWEyZmQ2ZGFkYzc0OTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5YmFkNzNlMjUzODQ1Y2Q4MzMzNWQxYmUxNzE2NGUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE3MDU0MTIyNzcyMDYsIC05Ni43MDk3MjQ4NTIyMjcwMV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wN2IxN2ZjYzJiOTI0NzA3YjAxZjE0ZTEwN2QwYmRmMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOWE0MzI2OWIzZDFiNDRiNGI2YWU4MTAwNjI1ZjU1NzkgPSAkKGA8ZGl2IGlkPSJodG1sXzlhNDMyNjliM2QxYjQ0YjRiNmFlODEwMDYyNWY1NTc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CbHVlIFN1c2hpIFNha2UgR3JpbGwgKFN1c2hpIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzA3YjE3ZmNjMmI5MjQ3MDdiMDFmMTRlMTA3ZDBiZGYxLnNldENvbnRlbnQoaHRtbF85YTQzMjY5YjNkMWI0NGI0YjZhZTgxMDA2MjVmNTU3OSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTliYWQ3M2UyNTM4NDVjZDgzMzM1ZDFiZTE3MTY0ZTAuYmluZFBvcHVwKHBvcHVwXzA3YjE3ZmNjMmI5MjQ3MDdiMDFmMTRlMTA3ZDBiZGYxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMmEyYmFmMjYzZmI0MDk4YWJhMzg4M2ZlYjA2NTJmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MTQ0MTQxMTAxODU1LCAtOTYuNjY1OTcyNjk4NTYwODRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNGQ2ZDU1MGE3ZDhkNGY5MTkwMGZmMWEzZGRkOTI4NzMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QwOTcyNDNkZmVlNjRkMWU4NmE3NDE1NWFhZWJjZjQ5ID0gJChgPGRpdiBpZD0iaHRtbF9kMDk3MjQzZGZlZTY0ZDFlODZhNzQxNTVhYWViY2Y0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGFpcnkgUXVlZW4gKEljZSBDcmVhbSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80ZDZkNTUwYTdkOGQ0ZjkxOTAwZmYxYTNkZGQ5Mjg3My5zZXRDb250ZW50KGh0bWxfZDA5NzI0M2RmZWU2NGQxZTg2YTc0MTU1YWFlYmNmNDkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2MyYTJiYWYyNjNmYjQwOThhYmEzODgzZmViMDY1MmY2LmJpbmRQb3B1cChwb3B1cF80ZDZkNTUwYTdkOGQ0ZjkxOTAwZmYxYTNkZGQ5Mjg3MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU1NDcxZjAwOTM5NDY2MGJlNWE3MTRkNWQyYzNmODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTMwMzQ3ODIzODY2MiwgLTk2LjY1MTEzOTQwODM0OTk5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzRkY2IwZGNjYzY2ZDQ3Mzc4ODE0ZDQ4YjRlMWZkNGRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xN2E0NjI5Nzk3ZDQ0ZjBhYjc5NmMwYjQwYjUwOTE0OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTdhNDYyOTc5N2Q0NGYwYWI3OTZjMGI0MGI1MDkxNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vb2RsZXMgJmFtcDsgQ29tcGFueSAoTm9vZGxlIEhvdXNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80ZGNiMGRjY2M2NmQ0NzM3ODgxNGQ0OGI0ZTFmZDRkZS5zZXRDb250ZW50KGh0bWxfMTdhNDYyOTc5N2Q0NGYwYWI3OTZjMGI0MGI1MDkxNDgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzFlNTQ3MWYwMDkzOTQ2NjBiZTVhNzE0ZDVkMmMzZjg0LmJpbmRQb3B1cChwb3B1cF80ZGNiMGRjY2M2NmQ0NzM3ODgxNGQ0OGI0ZTFmZDRkZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGE5ZGVhMjcwNjMxNDlhOThiMmY4MTgzNDAxNjNkZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM3Nzc2NTcyMzQwNTYsIC05Ni42NDk0MzQwNzcwMDIzOF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wNzFmYjk2MjRmNDE0MTU1YjEyYjNiODBiZTQxYWZkZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZmYxNmM2MjJkYjFkNDhjN2I0NDU1NmUwNGQxYjQ3NGMgPSAkKGA8ZGl2IGlkPSJodG1sX2ZmMTZjNjIyZGIxZDQ4YzdiNDQ1NTZlMDRkMWI0NzRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXJuZXMgJmFtcDsgTm9ibGUgKEJvb2tzdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDcxZmI5NjI0ZjQxNDE1NWIxMmIzYjgwYmU0MWFmZGUuc2V0Q29udGVudChodG1sX2ZmMTZjNjIyZGIxZDQ4YzdiNDQ1NTZlMDRkMWI0NzRjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80YTlkZWEyNzA2MzE0OWE5OGIyZjgxODM0MDE2M2RmNC5iaW5kUG9wdXAocG9wdXBfMDcxZmI5NjI0ZjQxNDE1NWIxMmIzYjgwYmU0MWFmZGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczOWI3ZWUyZjA4NTRjYzQ5ZTQwZjIyZTQ1NGYzZDIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NTQwMzE4NTE4MjgsIC05Ni43MDExODc5NjUzNTA2Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zYjg0Yjk5ODczYjk0ZGI0ODZmYjg0YzFjZmMxYzEwZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYmEwMTI1Y2ZlYzc5NDMwZGIxM2Y5YzJjMWE2NTY3YjIgPSAkKGA8ZGl2IGlkPSJodG1sX2JhMDEyNWNmZWM3OTQzMGRiMTNmOWMyYzFhNjU2N2IyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYWtlJiMzOTtzIENpZ2FycyBBbmQgU3Bpcml0cyAoQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zYjg0Yjk5ODczYjk0ZGI0ODZmYjg0YzFjZmMxYzEwZi5zZXRDb250ZW50KGh0bWxfYmEwMTI1Y2ZlYzc5NDMwZGIxM2Y5YzJjMWE2NTY3YjIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzczOWI3ZWUyZjA4NTRjYzQ5ZTQwZjIyZTQ1NGYzZDIyLmJpbmRQb3B1cChwb3B1cF8zYjg0Yjk5ODczYjk0ZGI0ODZmYjg0YzFjZmMxYzEwZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODMzYTFiM2I4M2ZhNGQ5Mjk4NDQ0MTRmZWExMjQ4YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM3MTQzLCAtOTYuNjMzNDg0M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jMjYwMjc3NTljZTU0NDA4ODk0M2IxMTBmMTFjY2JjMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDVmOGIyZDE4OWIxNDllZTlhNTEwZTJiZGVkODQyOTEgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1ZjhiMmQxODliMTQ5ZWU5YTUxMGUyYmRlZDg0MjkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LcmlzcHkgS3JlbWUgKEJha2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzI2MDI3NzU5Y2U1NDQwODg5NDNiMTEwZjExY2NiYzAuc2V0Q29udGVudChodG1sX2Q1ZjhiMmQxODliMTQ5ZWU5YTUxMGUyYmRlZDg0MjkxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl84MzNhMWIzYjgzZmE0ZDkyOTg0NDQxNGZlYTEyNDhhYS5iaW5kUG9wdXAocG9wdXBfYzI2MDI3NzU5Y2U1NDQwODg5NDNiMTEwZjExY2NiYzApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3NjI1YjM1YjlmMzRlNmZiNDRmMTc2MTc1MzYxNGI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIzMDgxNjA2NTEwNjM0LCAtOTYuNzEzNzgzNzQwOTk3MzFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWE1YjFkZTlmMWNhNDgyZjk0ZjdiNGEzYzMzZDVjYWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2IxMDM3ODZiMTJjYjRlN2M5MWFjZDY0MDhkMWU2NTliID0gJChgPGRpdiBpZD0iaHRtbF9iMTAzNzg2YjEyY2I0ZTdjOTFhY2Q2NDA4ZDFlNjU5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGF3a3MgRmllbGQgYXQgSGF5bWFya2V0IFBhcmsgKENvbGxlZ2UgQmFzZWJhbGwgRGlhbW9uZCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWE1YjFkZTlmMWNhNDgyZjk0ZjdiNGEzYzMzZDVjYWUuc2V0Q29udGVudChodG1sX2IxMDM3ODZiMTJjYjRlN2M5MWFjZDY0MDhkMWU2NTliKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85NzYyNWIzNWI5ZjM0ZTZmYjQ0ZjE3NjE3NTM2MTRiOS5iaW5kUG9wdXAocG9wdXBfYWE1YjFkZTlmMWNhNDgyZjk0ZjdiNGEzYzMzZDVjYWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2OGQwNjllMjhhMDQzNDQ5MzUxZGQwYzIyZDlkYmM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NzUxMTQyMjU3MTQsIC05Ni43MDk5ODU3MzMwMzIyM10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kYjk2YjNhMjZiNjA0NzhhYTM4M2FlYjRmOGZkYThiOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2FjMzQwYzhhYzQyNDU3ZGIxMTYxOWU2ZWM3N2RiYzIgPSAkKGA8ZGl2IGlkPSJodG1sXzdhYzM0MGM4YWM0MjQ1N2RiMTE2MTllNmVjNzdkYmMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXltYXJrZXQgKFNob3BwaW5nIFBsYXphKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kYjk2YjNhMjZiNjA0NzhhYTM4M2FlYjRmOGZkYThiOS5zZXRDb250ZW50KGh0bWxfN2FjMzQwYzhhYzQyNDU3ZGIxMTYxOWU2ZWM3N2RiYzIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzU2OGQwNjllMjhhMDQzNDQ5MzUxZGQwYzIyZDlkYmM4LmJpbmRQb3B1cChwb3B1cF9kYjk2YjNhMjZiNjA0NzhhYTM4M2FlYjRmOGZkYThiOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDVlYjQxNTQ0NzJkNGVmM2IxN2JlYjE4ZTYzNzg1NDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODU0ODk4NzExNTMwMDQsIC05Ni43MTg2MDAwMzA5OTI1Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83OWY4MmU1OTUwMTY0NTllYmUwOTM2ZGJhMjIwZGYxOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjExZWNkNjk1ODZlNGMyOThiMDEyZTM2MjZhMjA4YjkgPSAkKGA8ZGl2IGlkPSJodG1sX2IxMWVjZDY5NTg2ZTRjMjk4YjAxMmUzNjI2YTIwOGI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Hb29kIExpZmUgRml0bmVzcyAoR3ltIC8gRml0bmVzcyBDZW50ZXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc5ZjgyZTU5NTAxNjQ1OWViZTA5MzZkYmEyMjBkZjE5LnNldENvbnRlbnQoaHRtbF9iMTFlY2Q2OTU4NmU0YzI5OGIwMTJlMzYyNmEyMDhiOSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZDVlYjQxNTQ0NzJkNGVmM2IxN2JlYjE4ZTYzNzg1NDEuYmluZFBvcHVwKHBvcHVwXzc5ZjgyZTU5NTAxNjQ1OWViZTA5MzZkYmEyMjBkZjE5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZDg5YzFlYWUzNzk0NjlhYTYzZDEyMWJlOTlkYWI5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NTc3MDM3NDM1MDcwNSwgLTk2LjY1MzA0NTA5MDk5NTgyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzlhMTFhMDNlNmQzMzQzNWE4M2U2NGMxMjNmYjc3MjhiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80NDVmOTE4MmMxMTk0MDNjYmFkYTNhNjMzNGY0ODYxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDQ1ZjkxODJjMTE5NDAzY2JhZGEzYTYzMzRmNDg2MTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvbGxpbmcgV29rIChDaGluZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzlhMTFhMDNlNmQzMzQzNWE4M2U2NGMxMjNmYjc3MjhiLnNldENvbnRlbnQoaHRtbF80NDVmOTE4MmMxMTk0MDNjYmFkYTNhNjMzNGY0ODYxNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZGQ4OWMxZWFlMzc5NDY5YWE2M2QxMjFiZTk5ZGFiOWMuYmluZFBvcHVwKHBvcHVwXzlhMTFhMDNlNmQzMzQzNWE4M2U2NGMxMjNmYjc3MjhiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZmViODA5ODcwNjQ0NTA2YWUyOTQwMDY1MjQ3YWZkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMzIxNDYzNjEwMDU5LCAtOTYuNzE0MTUzMzcwMTczMDRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTdiZmIwOGY3ZjRjNDJlMTg5NDZiNGVmZDU0NTY5NWYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ExZTA2ZmI4YTY2MDQwYjk4MDU5ZjczZjc0NTliNThiID0gJChgPGRpdiBpZD0iaHRtbF9hMWUwNmZiOGE2NjA0MGI5ODA1OWY3M2Y3NDU5YjU4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGF5bWFya2V0IFBhcmsgKFBhcmspPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk3YmZiMDhmN2Y0YzQyZTE4OTQ2YjRlZmQ1NDU2OTVmLnNldENvbnRlbnQoaHRtbF9hMWUwNmZiOGE2NjA0MGI5ODA1OWY3M2Y3NDU5YjU4Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZGZlYjgwOTg3MDY0NDUwNmFlMjk0MDA2NTI0N2FmZDMuYmluZFBvcHVwKHBvcHVwXzk3YmZiMDhmN2Y0YzQyZTE4OTQ2YjRlZmQ1NDU2OTVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OTQzOTJiN2E4ZmY0ZDM3OGIxYmI4MmJhOTAwNTNkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNjYwMTQsIC05Ni43MDk3NTA4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk5NmFlMTlmZDYwYTRhMzY4N2M5Y2FhNGY5NTM1MjkwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wZDY2Y2RlZTIyMGI0NGI0YjRhM2Q4NmQwY2UwODcxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGQ2NmNkZWUyMjBiNDRiNGI0YTNkODZkMGNlMDg3MTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpbHRvbiBHYXJkZW4gSW5uIChIb3RlbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTk2YWUxOWZkNjBhNGEzNjg3YzljYWE0Zjk1MzUyOTAuc2V0Q29udGVudChodG1sXzBkNjZjZGVlMjIwYjQ0YjRiNGEzZDg2ZDBjZTA4NzExKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82OTQzOTJiN2E4ZmY0ZDM3OGIxYmI4MmJhOTAwNTNkYi5iaW5kUG9wdXAocG9wdXBfOTk2YWUxOWZkNjBhNGEzNjg3YzljYWE0Zjk1MzUyOTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwYWNjZDRjMjM4MzRlZmRhMTI3YzA4ZGFkZTQxZjkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxOTg5Njg5MTkyMTEsIC05Ni43MDI4Mjg5NjM2ODk0MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lYmMwZDEwMmNjZjg0M2MzYmQ1ZTRhZTExMGQwNDlhNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZjYwZTVhZmZmNmU2NGU4NjkwNjlmZmJmYzQ1YjA2ZjEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2MGU1YWZmZjZlNjRlODY5MDY5ZmZiZmM0NWIwNmYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZWllciYjMzk7cyBDb3JrIGFuZCBCb3R0bGUgKFdpbmUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWJjMGQxMDJjY2Y4NDNjM2JkNWU0YWUxMTBkMDQ5YTUuc2V0Q29udGVudChodG1sX2Y2MGU1YWZmZjZlNjRlODY5MDY5ZmZiZmM0NWIwNmYxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hMGFjY2Q0YzIzODM0ZWZkYTEyN2MwOGRhZGU0MWY5Mi5iaW5kUG9wdXAocG9wdXBfZWJjMGQxMDJjY2Y4NDNjM2JkNWU0YWUxMTBkMDQ5YTUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3NGEwZTE2Y2YwMDQ0YWE5MzgwN2M5YTVhNGY5ZDk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIxNDgxMjQ2MDUyNjMsIC05Ni42NTQzNTY1NjUwOTczNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82MTVlMzkxZGFiZWI0MTUzOTljOWFlMmNjY2FkODAyMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWNjMTUzODY3YmM2NGIxMmE4ZmNiMDJjMTQ0MTYzYWUgPSAkKGA8ZGl2IGlkPSJodG1sX2FjYzE1Mzg2N2JjNjRiMTJhOGZjYjAyYzE0NDE2M2FlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EJiMzOTtMZW9uJiMzOTtzIFRhY28gUmljbyAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82MTVlMzkxZGFiZWI0MTUzOTljOWFlMmNjY2FkODAyMC5zZXRDb250ZW50KGh0bWxfYWNjMTUzODY3YmM2NGIxMmE4ZmNiMDJjMTQ0MTYzYWUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzc3NGEwZTE2Y2YwMDQ0YWE5MzgwN2M5YTVhNGY5ZDk1LmJpbmRQb3B1cChwb3B1cF82MTVlMzkxZGFiZWI0MTUzOTljOWFlMmNjY2FkODAyMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmNmMDAzOTJiODQwNGI1ZmJhOWIxZjc3MjM0YWFjNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM4NjUsIC05Ni42NzI0NjJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTY0MDY3NmNkYTlmNDYzZGFhZjgwYTkwZjhlM2IxYmYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QwYjgwMGZlODAyMzRiMjY4MzA5MTFlZmExYWI1YjAxID0gJChgPGRpdiBpZD0iaHRtbF9kMGI4MDBmZTgwMjM0YjI2ODMwOTExZWZhMWFiNWIwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhcmJ1Y2tzIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTY0MDY3NmNkYTlmNDYzZGFhZjgwYTkwZjhlM2IxYmYuc2V0Q29udGVudChodG1sX2QwYjgwMGZlODAyMzRiMjY4MzA5MTFlZmExYWI1YjAxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9iY2YwMDM5MmI4NDA0YjVmYmE5YjFmNzcyMzRhYWM2MS5iaW5kUG9wdXAocG9wdXBfYTY0MDY3NmNkYTlmNDYzZGFhZjgwYTkwZjhlM2IxYmYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExM2ZkMjA5ZmJmMzRjYzRhNjg5NzIzN2NmYmRjNjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzMjg2NTU5NzUzOCwgLTk2LjY5NjY0MzQwNjM1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzM5N2YzNGU3NzM0NTQyNGQ5ZDU1NzBmZjQ5NmFlZDhmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mZWU2OWM2OWQxNzQ0YjhhOGUwY2U3Y2M2NGJiYjViOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmVlNjljNjlkMTc0NGI4YThlMGNlN2NjNjRiYmI1YjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gU3RyZWV0IERyaXZlIEluIChMaXF1b3IgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzM5N2YzNGU3NzM0NTQyNGQ5ZDU1NzBmZjQ5NmFlZDhmLnNldENvbnRlbnQoaHRtbF9mZWU2OWM2OWQxNzQ0YjhhOGUwY2U3Y2M2NGJiYjViOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYTEzZmQyMDlmYmYzNGNjNGE2ODk3MjM3Y2ZiZGM2NzEuYmluZFBvcHVwKHBvcHVwXzM5N2YzNGU3NzM0NTQyNGQ5ZDU1NzBmZjQ5NmFlZDhmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNGZiYTMzM2EwYjQ0NDc3OTgyYzYxYjIwNzA3YTk2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDYwMzUsIC05Ni43MTgyOTk4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzJiODNjMmQyMmUzZTQ4NzBhN2E1NzkwMjhlZTA1NWY2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84Njg2YjE5MjY3NDQ0ZDI4OWYyNTNmMjViZDUzYWVmOSA9ICQoYDxkaXYgaWQ9Imh0bWxfODY4NmIxOTI2NzQ0NGQyODlmMjUzZjI1YmQ1M2FlZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhc3MgUHJvIFNob3BzIChTcG9ydGluZyBHb29kcyBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yYjgzYzJkMjJlM2U0ODcwYTdhNTc5MDI4ZWUwNTVmNi5zZXRDb250ZW50KGh0bWxfODY4NmIxOTI2NzQ0NGQyODlmMjUzZjI1YmQ1M2FlZjkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA0ZmJhMzMzYTBiNDQ0Nzc5ODJjNjFiMjA3MDdhOTZhLmJpbmRQb3B1cChwb3B1cF8yYjgzYzJkMjJlM2U0ODcwYTdhNTc5MDI4ZWUwNTVmNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDlmMjUxOTcwM2UzNGNkYTg0OTdiNjk0ZjBhNjkzMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDMwMjc3NjIxNTAzOCwgLTk2LjY4MDA5ODU2NTk1MjI0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzI2YjUzZTZjZWE0MjQyMjI4ZWExNzNiNTc5ODk5Yzg4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xODViOTEwOTFkYjk0ZTY1OGRkZWJlNjQyNjM2NjA0YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTg1YjkxMDkxZGI5NGU2NThkZGViZTY0MjYzNjYwNGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhaXNpbmcgQ2FuZSYjMzk7cyBDaGlja2VuIEZpbmdlcnMgKEZyaWVkIENoaWNrZW4gSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI2YjUzZTZjZWE0MjQyMjI4ZWExNzNiNTc5ODk5Yzg4LnNldENvbnRlbnQoaHRtbF8xODViOTEwOTFkYjk0ZTY1OGRkZWJlNjQyNjM2NjA0Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNDlmMjUxOTcwM2UzNGNkYTg0OTdiNjk0ZjBhNjkzMjIuYmluZFBvcHVwKHBvcHVwXzI2YjUzZTZjZWE0MjQyMjI4ZWExNzNiNTc5ODk5Yzg4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYmI0NjI3YjFlYTM0ZjczYjk0Y2IwNDhkZTQ4NzJhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMzA1MjgsIC05Ni42MzY1Nzc0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ2NWJhNjIxMjE1YTQ4Y2JhZjBhNDQzZTA5ZjkwYzU4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zYjE0Njc0OTlkZGY0Njk1OWU3NzkyMTBlMjc0MWE5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2IxNDY3NDk5ZGRmNDY5NTllNzc5MjEwZTI3NDFhOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhbmVyYSBCcmVhZCAoQmFrZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NjViYTYyMTIxNWE0OGNiYWYwYTQ0M2UwOWY5MGM1OC5zZXRDb250ZW50KGh0bWxfM2IxNDY3NDk5ZGRmNDY5NTllNzc5MjEwZTI3NDFhOWQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2JiYjQ2MjdiMWVhMzRmNzNiOTRjYjA0OGRlNDg3MmE2LmJpbmRQb3B1cChwb3B1cF80NjViYTYyMTIxNWE0OGNiYWYwYTQ0M2UwOWY5MGM1OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmVkY2VhZGZmNjhkNGQ4Y2EzZmRhZGFkZTlmYjYyMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM5NzIsIC05Ni42NTQzNTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzdjZTliZjUwMzBlNDFkMGExYThkOTZhZWUyNjgyYzIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q0ZDU0NDA5M2E0NjRhOTNiMWRkMDc5NGJjN2NiODIwID0gJChgPGRpdiBpZD0iaHRtbF9kNGQ1NDQwOTNhNDY0YTkzYjFkZDA3OTRiYzdjYjgyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hpY2stZmlsLUEgKEZhc3QgRm9vZCBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83N2NlOWJmNTAzMGU0MWQwYTFhOGQ5NmFlZTI2ODJjMi5zZXRDb250ZW50KGh0bWxfZDRkNTQ0MDkzYTQ2NGE5M2IxZGQwNzk0YmM3Y2I4MjApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2ZlZGNlYWRmZjY4ZDRkOGNhM2ZkYWRhZGU5ZmI2MjFlLmJpbmRQb3B1cChwb3B1cF83N2NlOWJmNTAzMGU0MWQwYTFhOGQ5NmFlZTI2ODJjMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTk5MGI4NThlMzFmNDY3Yzg3MGRmYTE1NzY0OTZjM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDA3NjEsIC05Ni42ODI1NjA5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83ZWQ1MDQzZGEwNjk0YjBlOWQ1ZDhmOTMxZGRlODJhZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzE4MmY4Y2Y2Y2E3NGI4Yjk0ZDAxMmEyNDc4NzQyYjMgPSAkKGA8ZGl2IGlkPSJodG1sX2MxODJmOGNmNmNhNzRiOGI5NGQwMTJhMjQ3ODc0MmIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZXJmZWN0IERpbmVyIChBc2lhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83ZWQ1MDQzZGEwNjk0YjBlOWQ1ZDhmOTMxZGRlODJhZC5zZXRDb250ZW50KGh0bWxfYzE4MmY4Y2Y2Y2E3NGI4Yjk0ZDAxMmEyNDc4NzQyYjMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzk5OTBiODU4ZTMxZjQ2N2M4NzBkZmExNTc2NDk2YzNiLmJpbmRQb3B1cChwb3B1cF83ZWQ1MDQzZGEwNjk0YjBlOWQ1ZDhmOTMxZGRlODJhZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2FmMWYyYTZiMDk0NDMzOGIyMmQxNjkwODlmZDYwMzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTIzNzEyNDE5ODYxNiwgLTk2LjY5MzY0MDA1OTgwMTE4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y2NGE0YmNmODFjMjQyMjc5OWNjZDlhMTQ2MTViMDJjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zMWRlZDQzMGUwNzY0ZjU5OTYyODIxMGRlYzBmMzBjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzFkZWQ0MzBlMDc2NGY1OTk2MjgyMTBkZWMwZjMwY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvZGUgQmVlciBDb21wYW55IChCcmV3ZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNjRhNGJjZjgxYzI0MjI3OTljY2Q5YTE0NjE1YjAyYy5zZXRDb250ZW50KGh0bWxfMzFkZWQ0MzBlMDc2NGY1OTk2MjgyMTBkZWMwZjMwY2EpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2NhZjFmMmE2YjA5NDQzMzhiMjJkMTY5MDg5ZmQ2MDM0LmJpbmRQb3B1cChwb3B1cF9mNjRhNGJjZjgxYzI0MjI3OTljY2Q5YTE0NjE1YjAyYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdiZjBhZWFkNzA4NDRiOGFhMjhjZmNlNDZjYzMxZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ2Nzk2NDYzNzg5MywgLTk2LjcwNzkwOTgzMDY4OTk3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzM0ZDQ1YTZhNTBhYzQ4NzRhNmY0N2YxZWI4MDhkZTMwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wOTRmMjVhN2IwZWM0NjQ1OTVmZjFkYmU4YjNkZGU1MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDk0ZjI1YTdiMGVjNDY0NTk1ZmYxZGJlOGIzZGRlNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1cnQmIzM5O3MgRG9udXQgKERvbnV0IFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzM0ZDQ1YTZhNTBhYzQ4NzRhNmY0N2YxZWI4MDhkZTMwLnNldENvbnRlbnQoaHRtbF8wOTRmMjVhN2IwZWM0NjQ1OTVmZjFkYmU4YjNkZGU1Myk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYjdiZjBhZWFkNzA4NDRiOGFhMjhjZmNlNDZjYzMxZmQuYmluZFBvcHVwKHBvcHVwXzM0ZDQ1YTZhNTBhYzQ4NzRhNmY0N2YxZWI4MDhkZTMwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MWM3YzZiNTBlZWI0YjE2OTBkNDhmMzU3Y2I4OGY2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNjAxMjk0NzUxOTc2NiwgLTk2LjY0MTg4MjU3MzQ2MDA3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzg4Y2FmN2U2NjM3NzRjMWE5YTdhMGI3NjcyZDU4YTg1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82MGVjOGEzMDhiMjA0YWIwYjAzZDkyMTg4MzQ0MzliYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjBlYzhhMzA4YjIwNGFiMGIwM2Q5MjE4ODM0NDM5YmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhIFBheiBNZXhpY2FuIFJlc3RhdXJhbnQgKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODhjYWY3ZTY2Mzc3NGMxYTlhN2EwYjc2NzJkNThhODUuc2V0Q29udGVudChodG1sXzYwZWM4YTMwOGIyMDRhYjBiMDNkOTIxODgzNDQzOWJiKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80MWM3YzZiNTBlZWI0YjE2OTBkNDhmMzU3Y2I4OGY2MS5iaW5kUG9wdXAocG9wdXBfODhjYWY3ZTY2Mzc3NGMxYTlhN2EwYjc2NzJkNThhODUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhNGFlZjg3OWQxMjQyMGI5MjU5YjZkZDVlNDNkMWQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc5NDYxMzk1NzM5MjYsIC05Ni42MzM1NTkzMTg4Nzk2Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNmE1YzhiNGEyZWY0NjcxOTE1YTg3MWZiZWNkMTE2OCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZGM5OTAxZjU3ODdiNGI3NGJlYjJiOTA0ZDRlZGJlNDUgPSAkKGA8ZGl2IGlkPSJodG1sX2RjOTkwMWY1Nzg3YjRiNzRiZWIyYjkwNGQ0ZWRiZTQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xtZXMgTGFrZSAoTGFrZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzZhNWM4YjRhMmVmNDY3MTkxNWE4NzFmYmVjZDExNjguc2V0Q29udGVudChodG1sX2RjOTkwMWY1Nzg3YjRiNzRiZWIyYjkwNGQ0ZWRiZTQ1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85YTRhZWY4NzlkMTI0MjBiOTI1OWI2ZGQ1ZTQzZDFkNC5iaW5kUG9wdXAocG9wdXBfYzZhNWM4YjRhMmVmNDY3MTkxNWE4NzFmYmVjZDExNjgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5NjNlMjg3NWYyYTQxMmRiY2U1NzdiYjRlZGRhY2YwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0OTM4LCAtOTYuNjU0NDQ1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhkNzQ2MDhiYWNmZTQ3OWQ5MjcwNzBhZTFkYjkwZmQ3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wZDRkMjI1M2ZjNTg0NThjODhmM2ZiNTE3N2NkYWQzMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGQ0ZDIyNTNmYzU4NDU4Yzg4ZjNmYjUxNzdjZGFkMzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhbmRhIEdhcmRlbiAoQ2hpbmVzZSBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84ZDc0NjA4YmFjZmU0NzlkOTI3MDcwYWUxZGI5MGZkNy5zZXRDb250ZW50KGh0bWxfMGQ0ZDIyNTNmYzU4NDU4Yzg4ZjNmYjUxNzdjZGFkMzMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzk5NjNlMjg3NWYyYTQxMmRiY2U1NzdiYjRlZGRhY2YwLmJpbmRQb3B1cChwb3B1cF84ZDc0NjA4YmFjZmU0NzlkOTI3MDcwYWUxZGI5MGZkNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDM5NGQ4MDFmOGQxNDNhODgxNWQ4OGRhYTg0NWQ4MjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjEwODAxMDc4Mjk1MiwgLTk2LjYyNDE5OTY3NDQ1ODQyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzUxY2ZhNWE3YWE0ODRkMDZhMjFkY2VhN2M4NzA4Y2QwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yOGI5YmYwNTc0ZWQ0MGM3OTgyNTVlNjI4ODIzMDEyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjhiOWJmMDU3NGVkNDBjNzk4MjU1ZTYyODgyMzAxMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbmVzdCBBYmUmIzM5O3MgQnVyZ2VycyAmYW1wOyBGcmVlZG9tIChCdXJnZXIgSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzUxY2ZhNWE3YWE0ODRkMDZhMjFkY2VhN2M4NzA4Y2QwLnNldENvbnRlbnQoaHRtbF8yOGI5YmYwNTc0ZWQ0MGM3OTgyNTVlNjI4ODIzMDEyYSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMDM5NGQ4MDFmOGQxNDNhODgxNWQ4OGRhYTg0NWQ4MjIuYmluZFBvcHVwKHBvcHVwXzUxY2ZhNWE3YWE0ODRkMDZhMjFkY2VhN2M4NzA4Y2QwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNjMwNzE2ZGUwMTc0MDQyODZmNDU4ZmM1YTNjY2EwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNTU0NjMsIC05Ni43MTAxMjM0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY2NzE2ZTNjODM0ZDRmMTI5YjZhOWEzYjQwNjdkZjVlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iZjcwOTE0NzE0ZDk0ZDRhYmVjYmNlNDk0N2IyYmZlYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYmY3MDkxNDcxNGQ5NGQ0YWJlY2JjZTQ5NDdiMmJmZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBTdGFybGl0ZSBMb3VuZ2UgKExvdW5nZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjY3MTZlM2M4MzRkNGYxMjliNmE5YTNiNDA2N2RmNWUuc2V0Q29udGVudChodG1sX2JmNzA5MTQ3MTRkOTRkNGFiZWNiY2U0OTQ3YjJiZmVjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wNjMwNzE2ZGUwMTc0MDQyODZmNDU4ZmM1YTNjY2EwYy5iaW5kUG9wdXAocG9wdXBfNjY3MTZlM2M4MzRkNGYxMjliNmE5YTNiNDA2N2RmNWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4NTk4NmE5MDA3ODQzOGFhYWQ4NmZkNTVjZTZiMjgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg3Njk3ODQxMzQyNjcsIC05Ni42NTM5MTc3Nzk3MjU4Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85MWFjZTEzOWJiNzU0ZDMzYTgzZDY5NDkwYzU1MDI2NSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMThhNmJlM2MzOWI4NDZmMTg2OWQ4OGI4YWExZjQ0OTAgPSAkKGA8ZGl2IGlkPSJodG1sXzE4YTZiZTNjMzliODQ2ZjE4NjlkODhiOGFhMWY0NDkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1vJiMzOTtzIFBpenphIEJ1c3RlciYjMzk7cyBCQlEgKFBpenphIFBsYWNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85MWFjZTEzOWJiNzU0ZDMzYTgzZDY5NDkwYzU1MDI2NS5zZXRDb250ZW50KGh0bWxfMThhNmJlM2MzOWI4NDZmMTg2OWQ4OGI4YWExZjQ0OTApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzg4NTk4NmE5MDA3ODQzOGFhYWQ4NmZkNTVjZTZiMjgzLmJpbmRQb3B1cChwb3B1cF85MWFjZTEzOWJiNzU0ZDMzYTgzZDY5NDkwYzU1MDI2NSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWFiMTU2YjhhNDY5NDIzM2IyY2E1NDc3NWVjYTI1NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQxMTE2OTkzNTc5MiwgLTk2LjczMjAyODEyNjcxNjYxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzFkNTg2YThhMGVmOTQ0MjM5ZDAzNWQ5Mjg1OTk1ZDFkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xY2I4MGQ3NGRiZTE0ZTQ5YjgzN2ExZjBkMjhhNjFiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWNiODBkNzRkYmUxNGU0OWI4MzdhMWYwZDI4YTYxYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRhaXJ5IFF1ZWVuIChJY2UgQ3JlYW0gU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWQ1ODZhOGEwZWY5NDQyMzlkMDM1ZDkyODU5OTVkMWQuc2V0Q29udGVudChodG1sXzFjYjgwZDc0ZGJlMTRlNDliODM3YTFmMGQyOGE2MWJjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xYWIxNTZiOGE0Njk0MjMzYjJjYTU0Nzc1ZWNhMjU0NS5iaW5kUG9wdXAocG9wdXBfMWQ1ODZhOGEwZWY5NDQyMzlkMDM1ZDkyODU5OTVkMWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMTg4NDQ2YjZlNDQwOTk5OThlNjUzNTE4M2RjZWE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE3MzA0NjkzNzc2ODQsIC05Ni43MDk2NjkwNzQwNjE4Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82YjBkODJkY2IyZTA0Yjk1YmRkYzVhYzliYjIwYTUwMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTAyMDE1Y2JmMTc5NGFjYjk3MzI3MzU4YmQxMzNhMzYgPSAkKGA8ZGl2IGlkPSJodG1sX2UwMjAxNWNiZjE3OTRhY2I5NzMyNzM1OGJkMTMzYTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db3VydHlhcmQgYnkgTWFycmlvdHQgKEhvdGVsKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82YjBkODJkY2IyZTA0Yjk1YmRkYzVhYzliYjIwYTUwMy5zZXRDb250ZW50KGh0bWxfZTAyMDE1Y2JmMTc5NGFjYjk3MzI3MzU4YmQxMzNhMzYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2FiMTg4NDQ2YjZlNDQwOTk5OThlNjUzNTE4M2RjZWE0LmJpbmRQb3B1cChwb3B1cF82YjBkODJkY2IyZTA0Yjk1YmRkYzVhYzliYjIwYTUwMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc2MDMzZDM0ZWE1NGY3MGI0MDcyZTE5MmI2NzM3MWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzMwNTIwMTU0MjQ4MywgLTk2LjY1NDUyODM5NDM1MDE0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2NlNzU0ZjYwNTljMDQ2YTk5MGJhNDEwMmEyYTk0MDAzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hYmFjMzJiMjU0OTU0ZTgwOWM0Y2M5MDk2NmUzZjdhMSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWJhYzMyYjI1NDk1NGU4MDljNGNjOTA5NjZlM2Y3YTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNaWxsIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfY2U3NTRmNjA1OWMwNDZhOTkwYmE0MTAyYTJhOTQwMDMuc2V0Q29udGVudChodG1sX2FiYWMzMmIyNTQ5NTRlODA5YzRjYzkwOTY2ZTNmN2ExKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jNzYwMzNkMzRlYTU0ZjcwYjQwNzJlMTkyYjY3MzcxYS5iaW5kUG9wdXAocG9wdXBfY2U3NTRmNjA1OWMwNDZhOTkwYmE0MTAyYTJhOTQwMDMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkY2I5MWNhMzEyNjQxZDg4MjYzNTA0NDM1ZGY0OWI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg1NDY0NDMyMzk5NjcsIC05Ni42NTQzMTEzMjI1Mjc3Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kNWI3NzA2MWZiNjg0OTdhODQ0M2VkYzIzOWEwYjVjOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODU2NjJjNzQxODY3NDVlYWFkY2EyYmIyNTYzMGQzYTYgPSAkKGA8ZGl2IGlkPSJodG1sXzg1NjYyYzc0MTg2NzQ1ZWFhZGNhMmJiMjU2MzBkM2E2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmVkZHkmIzM5O3MgKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDViNzcwNjFmYjY4NDk3YTg0NDNlZGMyMzlhMGI1Yzguc2V0Q29udGVudChodG1sXzg1NjYyYzc0MTg2NzQ1ZWFhZGNhMmJiMjU2MzBkM2E2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl84ZGNiOTFjYTMxMjY0MWQ4ODI2MzUwNDQzNWRmNDliNS5iaW5kUG9wdXAocG9wdXBfZDViNzcwNjFmYjY4NDk3YTg0NDNlZGMyMzlhMGI1YzgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViNmJlMjdmMzgzYTRhYWU4YTQ5YTYxNDQ4ZWU4Mjc1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODExNTY1NDIxODcwNTgsIC05Ni42MjU1ODA3NTc4NjQ2OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81OTJjMDI1OWNlYjg0YzY1YTg5YWFhMzg3ODIzZjExYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTljMDJlNmFhZDc2NGQ1NWE4MDlmNGI4NzVmYTk0ZDggPSAkKGA8ZGl2IGlkPSJodG1sXzE5YzAyZTZhYWQ3NjRkNTVhODA5ZjRiODc1ZmE5NGQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UYWNvIElubiAoVGFjbyBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTkyYzAyNTljZWI4NGM2NWE4OWFhYTM4NzgyM2YxMWEuc2V0Q29udGVudChodG1sXzE5YzAyZTZhYWQ3NjRkNTVhODA5ZjRiODc1ZmE5NGQ4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81YjZiZTI3ZjM4M2E0YWFlOGE0OWE2MTQ0OGVlODI3NS5iaW5kUG9wdXAocG9wdXBfNTkyYzAyNTljZWI4NGM2NWE4OWFhYTM4NzgyM2YxMWEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0NzMxMjkxMzcxODRlMzU4MDgxZDA2Y2MzMTQ3Mjk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg2Nzk1MDU1NjExOTA0LCAtOTYuNjQzNjIxNjY0Mzg0MThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGQwNzExNDFhNDAxNGI2NDg1YWNlY2JjNGEyNTk3YTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VlMjE0OGI4NjhkYTQ5N2U4YWZkMmQyYTE5YTZiYjVkID0gJChgPGRpdiBpZD0iaHRtbF9lZTIxNDhiODY4ZGE0OTdlOGFmZDJkMmExOWE2YmI1ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGluY29sbiBDb21tdW5pdHkgUGxheWhvdXNlIChUaGVhdGVyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kZDA3MTE0MWE0MDE0YjY0ODVhY2VjYmM0YTI1OTdhMi5zZXRDb250ZW50KGh0bWxfZWUyMTQ4Yjg2OGRhNDk3ZThhZmQyZDJhMTlhNmJiNWQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2Q0NzMxMjkxMzcxODRlMzU4MDgxZDA2Y2MzMTQ3Mjk0LmJpbmRQb3B1cChwb3B1cF9kZDA3MTE0MWE0MDE0YjY0ODVhY2VjYmM0YTI1OTdhMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmY1NDg4MDgwNjVmNGI2NjgzZDBiYTAxY2ZlMjI2MGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTI5Nzk3MDk5OTcwOCwgLTk2LjczNjc4MjQyMDU5MjM1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2I5YzdjYjg1MmZhMTQ0Yzk5YjM5NDcxYmE3MmNkNGFkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hMGUxODkwNTUyOWY0NzU1OTQyZGJlMTI5MDU2YjJjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTBlMTg5MDU1MjlmNDc1NTk0MmRiZTEyOTA1NmIyYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJpZyBSZWQgUmVzdGF1cmFudCAmYW1wOyBTcG9ydHMgQmFyIChTcG9ydHMgQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iOWM3Y2I4NTJmYTE0NGM5OWIzOTQ3MWJhNzJjZDRhZC5zZXRDb250ZW50KGh0bWxfYTBlMTg5MDU1MjlmNDc1NTk0MmRiZTEyOTA1NmIyYzkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2JmNTQ4ODA4MDY1ZjRiNjY4M2QwYmEwMWNmZTIyNjBjLmJpbmRQb3B1cChwb3B1cF9iOWM3Y2I4NTJmYTE0NGM5OWIzOTQ3MWJhNzJjZDRhZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmI3Y2Y0NmM1YThhNDZhOGJlN2ExYjg1NjliMTVjMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MzYyNzcxMTQ5OTI5NywgLTk2LjY1NDQxOTAxNDMyOTExXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y0NzAwZTU5Nzk2MTQ0OWZhOTFjOGRiODM0MTY5YTEzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81OWMzMzgxNzcxYjE0M2FkYmFkNWM4YjM5MDQ0Y2RlZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTljMzM4MTc3MWIxNDNhZGJhZDVjOGIzOTA0NGNkZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvdXNlIE9mIEh1bmFuIChDaGluZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y0NzAwZTU5Nzk2MTQ0OWZhOTFjOGRiODM0MTY5YTEzLnNldENvbnRlbnQoaHRtbF81OWMzMzgxNzcxYjE0M2FkYmFkNWM4YjM5MDQ0Y2RlZik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmI3Y2Y0NmM1YThhNDZhOGJlN2ExYjg1NjliMTVjMjkuYmluZFBvcHVwKHBvcHVwX2Y0NzAwZTU5Nzk2MTQ0OWZhOTFjOGRiODM0MTY5YTEzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWE4NDllNWM1YTQ0OWIyYjgxY2Q4OWRiMDUxYzFiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNzY2MDI1MTAwNzI5LCAtOTYuNzAwNzM4Mzg5MjY3NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jOTBmZWYxMTE4YzY0OGM3OTA5ZDZiZWE5NjM5MjJkNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzE3ZWEzYmFjMjQyNDQ0ZjkwNjI0NjQ5YjQ4ZDkzNjUgPSAkKGA8ZGl2IGlkPSJodG1sXzMxN2VhM2JhYzI0MjQ0NGY5MDYyNDY0OWI0OGQ5MzY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZWJyYXNrYSBVbmlvbiAoU3R1ZGVudCBDZW50ZXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M5MGZlZjExMThjNjQ4Yzc5MDlkNmJlYTk2MzkyMmQ0LnNldENvbnRlbnQoaHRtbF8zMTdlYTNiYWMyNDI0NDRmOTA2MjQ2NDliNDhkOTM2NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTVhODQ5ZTVjNWE0NDliMmI4MWNkODlkYjA1MWMxYjAuYmluZFBvcHVwKHBvcHVwX2M5MGZlZjExMThjNjQ4Yzc5MDlkNmJlYTk2MzkyMmQ0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTIwM2U2MzZiNDY0NGVkODgzMjYwZjUyZmU4OGUwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNzQwMzAxMzE1MDU3NSwgLTk2LjY1NDkyNjI2MjE5MTcxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzEyMzcyZGJjNThiZjQ4MzRiZmE1YjkxY2M0NjU2N2YwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84YWU0MzYyMmM4ZWU0MzY1ODA1NGQ0OTU1NzY5OTA2MSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGFlNDM2MjJjOGVlNDM2NTgwNTRkNDk1NTc2OTkwNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNjaGFlZmVyJiMzOTtzIChGdXJuaXR1cmUgLyBIb21lIFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xMjM3MmRiYzU4YmY0ODM0YmZhNWI5MWNjNDY1NjdmMC5zZXRDb250ZW50KGh0bWxfOGFlNDM2MjJjOGVlNDM2NTgwNTRkNDk1NTc2OTkwNjEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzY1MjAzZTYzNmI0NjQ0ZWQ4ODMyNjBmNTJmZTg4ZTA5LmJpbmRQb3B1cChwb3B1cF8xMjM3MmRiYzU4YmY0ODM0YmZhNWI5MWNjNDY1NjdmMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGFmMmQ0ZGNjZTVkNGI1MjkzMjAwNTFjN2Y2ZDliMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM3OTk0OTc0ODA4MTUsIC05Ni43MDAyNTgwOTQ4NjM0N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81NjcxYzhlYTdmODA0YWFlYTMyZmZmMWYyMTBiYWRjNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTRmNGQzZDk0YmU0NDgxMmE0ZjE1ZTA0M2YzZWQ3OWQgPSAkKGA8ZGl2IGlkPSJodG1sX2U0ZjRkM2Q5NGJlNDQ4MTJhNGYxNWUwNDNmM2VkNzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYXp6YXJpJiMzOTtzIFBpenphIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTY3MWM4ZWE3ZjgwNGFhZWEzMmZmZjFmMjEwYmFkYzYuc2V0Q29udGVudChodG1sX2U0ZjRkM2Q5NGJlNDQ4MTJhNGYxNWUwNDNmM2VkNzlkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wYWYyZDRkY2NlNWQ0YjUyOTMyMDA1MWM3ZjZkOWIwNS5iaW5kUG9wdXAocG9wdXBfNTY3MWM4ZWE3ZjgwNGFhZWEzMmZmZjFmMjEwYmFkYzYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4ZjE5OGIyMjg0ZjQwYjU4NTdmMTUyM2E0ZTIxMTVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI3NDY4MDA4NDg3NjY0LCAtOTYuNjMwOTM0NTUwMjYxODFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTg5ODg5MjU4ZjVhNGFjYWFjMzg3MDNjMmZjOWFhMjcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2UxZTQyYTdkNDdkYjRjNDE5MDMyZTEzZGIyMzVlNTEyID0gJChgPGRpdiBpZD0iaHRtbF9lMWU0MmE3ZDQ3ZGI0YzQxOTAzMmUxM2RiMjM1ZTUxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWluZyYjMzk7cyBIb3VzZSAoQ2hpbmVzZSBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hODk4ODkyNThmNWE0YWNhYWMzODcwM2MyZmM5YWEyNy5zZXRDb250ZW50KGh0bWxfZTFlNDJhN2Q0N2RiNGM0MTkwMzJlMTNkYjIzNWU1MTIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzc4ZjE5OGIyMjg0ZjQwYjU4NTdmMTUyM2E0ZTIxMTVkLmJpbmRQb3B1cChwb3B1cF9hODk4ODkyNThmNWE0YWNhYWMzODcwM2MyZmM5YWEyNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmIzZWY3ZTU0YTliNDdiMzgxMGFiZDkzMDU0ZTU5NGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjU3MjExMzUxNDQ2NCwgLTk2LjY4MjU2OTI0MjA5MzU0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzU5YzczZDc2ZmMyODRiOWY5OThiYWVkODczMDZjYzNkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kNzQxY2U2ZGMyNjM0MmVkYmRiOTI5ZGMxNWI4ZmY4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDc0MWNlNmRjMjYzNDJlZGJkYjkyOWRjMTViOGZmODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkQmIzM5O0xlb25zIChNZXhpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU5YzczZDc2ZmMyODRiOWY5OThiYWVkODczMDZjYzNkLnNldENvbnRlbnQoaHRtbF9kNzQxY2U2ZGMyNjM0MmVkYmRiOTI5ZGMxNWI4ZmY4Nik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmIzZWY3ZTU0YTliNDdiMzgxMGFiZDkzMDU0ZTU5NGEuYmluZFBvcHVwKHBvcHVwXzU5YzczZDc2ZmMyODRiOWY5OThiYWVkODczMDZjYzNkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNGEwMmIxMDI4NzY0ZjAwODBmZWFiOTc2NTJiMzEzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyNzc3NTA4NDk5Mjg3LCAtOTYuNjQ0OTcyMDU3NzU5NTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTkyMjdhMmE3NzUwNDlkMmIyYzljZDkwNGE5M2FlOWIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzhhMThiYTVmM2FmNDQ4N2ViODRlODczZjZmMzYyZTBhID0gJChgPGRpdiBpZD0iaHRtbF84YTE4YmE1ZjNhZjQ0ODdlYjg0ZTg3M2Y2ZjM2MmUwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3VwZXIgVGFjbyAoVGFjbyBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTkyMjdhMmE3NzUwNDlkMmIyYzljZDkwNGE5M2FlOWIuc2V0Q29udGVudChodG1sXzhhMThiYTVmM2FmNDQ4N2ViODRlODczZjZmMzYyZTBhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNGEwMmIxMDI4NzY0ZjAwODBmZWFiOTc2NTJiMzEzNS5iaW5kUG9wdXAocG9wdXBfMTkyMjdhMmE3NzUwNDlkMmIyYzljZDkwNGE5M2FlOWIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3NjE5YTFhMzFlODQ2MTI4MmIzN2IyOTljMWExMzRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NzU2MzUzNjI5NzksIC05Ni43MTA2MDU5NjY1MzE0NV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kNjFlMjBkNzNhY2U0ODVjOWE4YWQ4ZmE2MTkyMDE5NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjQ3NDUwZTk5YmZjNDJjODkwNzM3NDZiZjM5Nzc3NTcgPSAkKGA8ZGl2IGlkPSJodG1sXzY0NzQ1MGU5OWJmYzQyYzg5MDczNzQ2YmYzOTc3NzU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NY0tpbm5leSYjMzk7cyBJcmlzaCBQdWIgKElyaXNoIFB1Yik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDYxZTIwZDczYWNlNDg1YzlhOGFkOGZhNjE5MjAxOTYuc2V0Q29udGVudChodG1sXzY0NzQ1MGU5OWJmYzQyYzg5MDczNzQ2YmYzOTc3NzU3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNzYxOWExYTMxZTg0NjEyODJiMzdiMjk5YzFhMTM0ZC5iaW5kUG9wdXAocG9wdXBfZDYxZTIwZDczYWNlNDg1YzlhOGFkOGZhNjE5MjAxOTYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0YzNlOTgyYzRlMzQwYzhhOWU2OTUwZWExN2VmNWI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE4NDI2LCAtOTYuNjUxODY1Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wZGMxZjg3MzhkYmM0YmYxODYzODZmM2ZlYTdjOGIwMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZjM1NWE2ZjcxMWM3NGIyNzlhZjE2NWM5ZGVhM2E3NzggPSAkKGA8ZGl2IGlkPSJodG1sX2YzNTVhNmY3MTFjNzRiMjc5YWYxNjVjOWRlYTNhNzc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ULkouIE1heHggKERlcGFydG1lbnQgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzBkYzFmODczOGRiYzRiZjE4NjM4NmYzZmVhN2M4YjAwLnNldENvbnRlbnQoaHRtbF9mMzU1YTZmNzExYzc0YjI3OWFmMTY1YzlkZWEzYTc3OCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNjRjM2U5ODJjNGUzNDBjOGE5ZTY5NTBlYTE3ZWY1YjguYmluZFBvcHVwKHBvcHVwXzBkYzFmODczOGRiYzRiZjE4NjM4NmYzZmVhN2M4YjAwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZTAyMWQxOTQyN2I0ZTRiOWFiYmFkYmVkZjE2OGYwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwMDM5MjIwMTY2ODA0LCAtOTYuNjI1ODYxNDExODY3NTJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTQ2OWQ2ZjlkZDI5NGM5MDhjNWYzMzZiMDI5N2FmMDIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q4NjYxMzE3ODM5MTRkNWU5YTRhNDRiNzQ4OTY3NzhmID0gJChgPGRpdiBpZD0iaHRtbF9kODY2MTMxNzgzOTE0ZDVlOWE0YTQ0Yjc0ODk2Nzc4ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJhaXJpZSBMaWZlIChHeW0pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk0NjlkNmY5ZGQyOTRjOTA4YzVmMzM2YjAyOTdhZjAyLnNldENvbnRlbnQoaHRtbF9kODY2MTMxNzgzOTE0ZDVlOWE0YTQ0Yjc0ODk2Nzc4Zik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYmUwMjFkMTk0MjdiNGU0YjlhYmJhZGJlZGYxNjhmMGIuYmluZFBvcHVwKHBvcHVwXzk0NjlkNmY5ZGQyOTRjOTA4YzVmMzM2YjAyOTdhZjAyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYzRhYTYwNzg1MDM0ZTdhODVlNWZkMGFiYzQzMjZkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MDQxMzU3NTA4MTE3LCAtOTYuNjc1MjgyMjIzODUxN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lYmViY2JiZmY3NDE0YTY1YjQ2OTM4NDBjM2E4ZWE4OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDkwMTgxODM4MzYzNDNkM2I3ZmIxZDZmY2ZjODQzOTUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q5MDE4MTgzODM2MzQzZDNiN2ZiMWQ2ZmNmYzg0Mzk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZW9uJiMzOTtzIEdvdXJtZXQgR3JvY2VyIChHcm9jZXJ5IFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lYmViY2JiZmY3NDE0YTY1YjQ2OTM4NDBjM2E4ZWE4OS5zZXRDb250ZW50KGh0bWxfZDkwMTgxODM4MzYzNDNkM2I3ZmIxZDZmY2ZjODQzOTUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzNjNGFhNjA3ODUwMzRlN2E4NWU1ZmQwYWJjNDMyNmQzLmJpbmRQb3B1cChwb3B1cF9lYmViY2JiZmY3NDE0YTY1YjQ2OTM4NDBjM2E4ZWE4OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQwMjZlYjYzN2NmNGFlZDgzZjA4OWQ3OWJmYWE3MzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MzM0NTY1MTYyNjU4NywgLTk2LjY1MzQ5ODQxMTE3ODU5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E4Mjg5ZTkzOTViZDQwZGZiNDhhNDdlMjAzOGZhOWEyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hNTQ2MTA0YTdmMDI0N2I1OGQ3YWZiZjBkMjBlN2FlYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTU0NjEwNGE3ZjAyNDdiNThkN2FmYmYwZDIwZTdhZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVsIENoYXBhcnJvIChNZXhpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E4Mjg5ZTkzOTViZDQwZGZiNDhhNDdlMjAzOGZhOWEyLnNldENvbnRlbnQoaHRtbF9hNTQ2MTA0YTdmMDI0N2I1OGQ3YWZiZjBkMjBlN2FlYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNDQwMjZlYjYzN2NmNGFlZDgzZjA4OWQ3OWJmYWE3MzMuYmluZFBvcHVwKHBvcHVwX2E4Mjg5ZTkzOTViZDQwZGZiNDhhNDdlMjAzOGZhOWEyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTQ5NDRkNTUxMmM0NGVlYTUxZTU1MDM2YmJjZDllZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMzg5NTA2NDk5MzE1NCwgLTk2LjcwOTgxNTQzMjIxODNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2EwMTA1MDE4ZGZkNDUyOWE0OTU5ZjgwNzkwMTYwMzQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzNmYjAzZDA5MGIyOTRmOWJhZDIxYTI0NzViNTAzN2MwID0gJChgPGRpdiBpZD0iaHRtbF8zZmIwM2QwOTBiMjk0ZjliYWQyMWEyNDc1YjUwMzdjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmFjayYjMzk7cyBCYXIgJmFtcDsgR3JpbGwgKEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfY2EwMTA1MDE4ZGZkNDUyOWE0OTU5ZjgwNzkwMTYwMzQuc2V0Q29udGVudChodG1sXzNmYjAzZDA5MGIyOTRmOWJhZDIxYTI0NzViNTAzN2MwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lZTQ5NDRkNTUxMmM0NGVlYTUxZTU1MDM2YmJjZDllZS5iaW5kUG9wdXAocG9wdXBfY2EwMTA1MDE4ZGZkNDUyOWE0OTU5ZjgwNzkwMTYwMzQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3ZTEzNjg0ZjJkYTQxN2U5MDJiZjhlZDAzMDBmYzIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEyOTk2MzMyNzQ5NzEsIC05Ni43MDg0OTAzMTk2MzI0Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iY2E2OTFiMmI2NTg0MjczYWFkNzYyMmNjYzEwZjNiNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzAyNDVhY2ZjMDQ4NGJmMjg1ZjE5M2U3NjU0MmZmNDggPSAkKGA8ZGl2IGlkPSJodG1sX2MwMjQ1YWNmYzA0ODRiZjI4NWYxOTNlNzY1NDJmZjQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UcmFkZSBBIFRhcGUgQ29taWMgQm9vayBDZW50ZXIgKENvbWljIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JjYTY5MWIyYjY1ODQyNzNhYWQ3NjIyY2NjMTBmM2I3LnNldENvbnRlbnQoaHRtbF9jMDI0NWFjZmMwNDg0YmYyODVmMTkzZTc2NTQyZmY0OCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjdlMTM2ODRmMmRhNDE3ZTkwMmJmOGVkMDMwMGZjMjAuYmluZFBvcHVwKHBvcHVwX2JjYTY5MWIyYjY1ODQyNzNhYWQ3NjIyY2NjMTBmM2I3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMThlZGZiNmQzODY0MGY3YWU3MjUwNjU0NDAxNzE5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNTE5NTg1OTgyNDIsIC05Ni42MjU2NDExNTY0ODg1OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lZWMxYTBkY2RiMmY0MTY3ODhhZDRhZDVmYzg2Yzc5YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOWNiNWE1MjUzNTM0NDBhMDk2ZjFkYWEyNmQwN2FhMjkgPSAkKGA8ZGl2IGlkPSJodG1sXzljYjVhNTI1MzUzNDQwYTA5NmYxZGFhMjZkMDdhYTI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXphdGxhbiAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lZWMxYTBkY2RiMmY0MTY3ODhhZDRhZDVmYzg2Yzc5Yi5zZXRDb250ZW50KGh0bWxfOWNiNWE1MjUzNTM0NDBhMDk2ZjFkYWEyNmQwN2FhMjkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzAxOGVkZmI2ZDM4NjQwZjdhZTcyNTA2NTQ0MDE3MTk2LmJpbmRQb3B1cChwb3B1cF9lZWMxYTBkY2RiMmY0MTY3ODhhZDRhZDVmYzg2Yzc5YikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDJkZjRmZTIzOWQ3NDI3OTk2OGU4MTg2MTgyMGFkZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjUyMjU1NzYzNzYyLCAtOTYuNzAwNjQ1MDI4MjcwNzZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTM3YTQzNDlmNGVjNDllMzg5OTFjM2IwYWE2OThiOWQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2I5NTg1NGFlZTMyYjQ3ZmM5M2NkZjg2OWVjMzlkZjYwID0gJChgPGRpdiBpZD0iaHRtbF9iOTU4NTRhZWUzMmI0N2ZjOTNjZGY4NjllYzM5ZGY2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9zaWUmIzM5O3MgKEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTM3YTQzNDlmNGVjNDllMzg5OTFjM2IwYWE2OThiOWQuc2V0Q29udGVudChodG1sX2I5NTg1NGFlZTMyYjQ3ZmM5M2NkZjg2OWVjMzlkZjYwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80MmRmNGZlMjM5ZDc0Mjc5OTY4ZTgxODYxODIwYWRkMC5iaW5kUG9wdXAocG9wdXBfOTM3YTQzNDlmNGVjNDllMzg5OTFjM2IwYWE2OThiOWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2MWUyYjVkMzlmMDQxODk5NGE4OGViZjJlNWQ1NjU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1NTQ2MywgLTk2LjcxMDEyMzRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzczZTllNTc2ODcwNDgyNGI1MTQwYjE5Y2MzNDUxMjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MwOWEzM2RmYzg1MzQ4NDc4NDRhYWY0MjcwMDhkOWVjID0gJChgPGRpdiBpZD0iaHRtbF9jMDlhMzNkZmM4NTM0ODQ3ODQ0YWFmNDI3MDA4ZDllYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnV6emFyZCBCaWxseSYjMzk7cyAoQ2FqdW4gLyBDcmVvbGUgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzczZTllNTc2ODcwNDgyNGI1MTQwYjE5Y2MzNDUxMjMuc2V0Q29udGVudChodG1sX2MwOWEzM2RmYzg1MzQ4NDc4NDRhYWY0MjcwMDhkOWVjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wNjFlMmI1ZDM5ZjA0MTg5OTRhODhlYmYyZTVkNTY1OC5iaW5kUG9wdXAocG9wdXBfNzczZTllNTc2ODcwNDgyNGI1MTQwYjE5Y2MzNDUxMjMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhODYxZGMzMjNjNjQ4NDRhZGZkZTkxNmQ5Njk3MjMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE3NTc4NjE5NjI3OTYsIC05Ni43MDQ0MjkwNDUyNTg4Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82YjVkOWE5ZDQ1NzI0MWE3YWViNTUzYmU1MjU2YzlmYiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOGJkNWVjOGIzNmU3NGIxNGJkMjc3YjhmZTFiMTdhZjYgPSAkKGA8ZGl2IGlkPSJodG1sXzhiZDVlYzhiMzZlNzRiMTRiZDI3N2I4ZmUxYjE3YWY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaGVsZG9uIE11c2V1bSBvZiBBcnQgKEFydCBNdXNldW0pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZiNWQ5YTlkNDU3MjQxYTdhZWI1NTNiZTUyNTZjOWZiLnNldENvbnRlbnQoaHRtbF84YmQ1ZWM4YjM2ZTc0YjE0YmQyNzdiOGZlMWIxN2FmNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmE4NjFkYzMyM2M2NDg0NGFkZmRlOTE2ZDk2OTcyMzEuYmluZFBvcHVwKHBvcHVwXzZiNWQ5YTlkNDU3MjQxYTdhZWI1NTNiZTUyNTZjOWZiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTQxYjI2NzdkYWE0MTU3YTE3MjQ0YTg2NTIyMTdjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMTYzOTUzOTg4NTg2LCAtOTYuNzUxMTIxMDM5MjM1ODVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTUwY2NhNWY5OWYyNDViOThhYTBiY2RkY2EwZTE3MTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzY5YWJiYmYwYmEzYzQwOTI4MmFkMzkyNjQ0ZWM3ZWM3ID0gJChgPGRpdiBpZD0iaHRtbF82OWFiYmJmMGJhM2M0MDkyODJhZDM5MjY0NGVjN2VjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WmlwbGluZSBCcmV3aW5nIENvLiAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTUwY2NhNWY5OWYyNDViOThhYTBiY2RkY2EwZTE3MTYuc2V0Q29udGVudChodG1sXzY5YWJiYmYwYmEzYzQwOTI4MmFkMzkyNjQ0ZWM3ZWM3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yZTQxYjI2NzdkYWE0MTU3YTE3MjQ0YTg2NTIyMTdjMC5iaW5kUG9wdXAocG9wdXBfOTUwY2NhNWY5OWYyNDViOThhYTBiY2RkY2EwZTE3MTYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViMTM5NzMzNmU2ZjRjNzJhM2NkYzdkZWVlMmQxYzI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxOTYzODQxMjY5MDEsIC05Ni43MTIwNTg3ODE0Mzc0Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82Mzg5NTBlZTAyZTU0OTI5YmUyNWEzNDMxYjA2NzExMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODkyZThhZTkxYjVkNGIyMzgyN2UzYTViNmU5YmM1ZWEgPSAkKGA8ZGl2IGlkPSJodG1sXzg5MmU4YWU5MWI1ZDRiMjM4MjdlM2E1YjZlOWJjNWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaW5hJiMzOTtzIENhZmUgKEJyZWFrZmFzdCBTcG90KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82Mzg5NTBlZTAyZTU0OTI5YmUyNWEzNDMxYjA2NzExMS5zZXRDb250ZW50KGh0bWxfODkyZThhZTkxYjVkNGIyMzgyN2UzYTViNmU5YmM1ZWEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2ViMTM5NzMzNmU2ZjRjNzJhM2NkYzdkZWVlMmQxYzI5LmJpbmRQb3B1cChwb3B1cF82Mzg5NTBlZTAyZTU0OTI5YmUyNWEzNDMxYjA2NzExMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmIyNDUzOTQwNjVlNDdmYmJhYTgzODA3ZDkwODBkZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTQ2NzkwMTY1MDI2LCAtOTYuNjY5OTU1MDc1OTEwNjVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzkyYzU5MDgxMTNmNDgwMTg1ZGNkMjMxNWNiNjUyYmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzY1NjdiZTZhN2JlOTQ4MTBhNTVmNzA5ZDYxZDU3NjQyID0gJChgPGRpdiBpZD0iaHRtbF82NTY3YmU2YTdiZTk0ODEwYTU1ZjcwOWQ2MWQ1NzY0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2hlbiBDYWZlIChDaGluZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc5MmM1OTA4MTEzZjQ4MDE4NWRjZDIzMTVjYjY1MmJhLnNldENvbnRlbnQoaHRtbF82NTY3YmU2YTdiZTk0ODEwYTU1ZjcwOWQ2MWQ1NzY0Mik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMmIyNDUzOTQwNjVlNDdmYmJhYTgzODA3ZDkwODBkZTEuYmluZFBvcHVwKHBvcHVwXzc5MmM1OTA4MTEzZjQ4MDE4NWRjZDIzMTVjYjY1MmJhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWYxZGNmMDk3Y2E0ZmNlYTdjZDlmYzNiNjNmMTcyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxODM5MSwgLTk2LjY1MzE1OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iYTE3ZDNhMjQ5MTg0YjgyYjNkMzIwOGJhZGE3MTVkYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNThhYjhmZTU4ZGZlNDhjYTk4YjFhYjg2Njc2Yjg1MDkgPSAkKGA8ZGl2IGlkPSJodG1sXzU4YWI4ZmU1OGRmZTQ4Y2E5OGIxYWI4NjY3NmI4NTA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NY2FsaXN0ZXLigJlzIERlbGkgKERlbGkgLyBCb2RlZ2EpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JhMTdkM2EyNDkxODRiODJiM2QzMjA4YmFkYTcxNWRhLnNldENvbnRlbnQoaHRtbF81OGFiOGZlNThkZmU0OGNhOThiMWFiODY2NzZiODUwOSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTlmMWRjZjA5N2NhNGZjZWE3Y2Q5ZmMzYjYzZjE3MjAuYmluZFBvcHVwKHBvcHVwX2JhMTdkM2EyNDkxODRiODJiM2QzMjA4YmFkYTcxNWRhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YTVjYzk1YzQ3ZmE0NzU5YTY4MGM3YzAzZTM2YjcyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyNzEzOTE3NDgzNzIxNCwgLTk2LjY0MzgwNDgzNDAxMDY4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ1MmQxYWIxNzhmMDRhMTJhMTExNTlmYzhjNGFmN2E1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kYmYzMzMwODNlYjY0OWJhOGNjZWZhN2E2MGRjNmI0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGJmMzMzMDgzZWI2NDliYThjY2VmYTdhNjBkYzZiNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRhY28gSW5uIChNZXhpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQ1MmQxYWIxNzhmMDRhMTJhMTExNTlmYzhjNGFmN2E1LnNldENvbnRlbnQoaHRtbF9kYmYzMzMwODNlYjY0OWJhOGNjZWZhN2E2MGRjNmI0Mik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOGE1Y2M5NWM0N2ZhNDc1OWE2ODBjN2MwM2UzNmI3MjMuYmluZFBvcHVwKHBvcHVwXzQ1MmQxYWIxNzhmMDRhMTJhMTExNTlmYzhjNGFmN2E1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDAwZTlmMjY3OTQ0MDA3YTVhYTYyYjE3NzhhNjc3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MDc5NDM5NzgxOTMyLCAtOTYuNjIyOTAwMjM3Njc1NzZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWRjYTkzZGI5M2VhNDVmODg0OGE5ZTQ2ZGUyZjZiNTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ZiYWI4OTRhMmUwMTRiMWU4MTdjYjJmOWYxY2I1NmEzID0gJChgPGRpdiBpZD0iaHRtbF9mYmFiODk0YTJlMDE0YjFlODE3Y2IyZjlmMWNiNTZhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TnVWaWJlIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWRjYTkzZGI5M2VhNDVmODg0OGE5ZTQ2ZGUyZjZiNTQuc2V0Q29udGVudChodG1sX2ZiYWI4OTRhMmUwMTRiMWU4MTdjYjJmOWYxY2I1NmEzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZDAwZTlmMjY3OTQ0MDA3YTVhYTYyYjE3NzhhNjc3Yi5iaW5kUG9wdXAocG9wdXBfYWRjYTkzZGI5M2VhNDVmODg0OGE5ZTQ2ZGUyZjZiNTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhMzBhMTBiNDNmNzQ4YTM5YzI0MmQxNGM5NzIxZDA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY5OTk5OTA2NDQ2MTksIC05Ni42NTQ5MTI5ODg1NTgxMV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84OWM4ZTBjODNhNzI0ZTJkOTBjMGY4YWEzNmFjNzg0YyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTk1ZWViZTM0ZWVlNDFkMDg0YWU3NDY4NjBhZmZjMDkgPSAkKGA8ZGl2IGlkPSJodG1sXzE5NWVlYmUzNGVlZTQxZDA4NGFlNzQ2ODYwYWZmYzA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZW5lbG9wZSYjMzk7cyBMaWwgQ2Fmw6kgKENhZsOpKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84OWM4ZTBjODNhNzI0ZTJkOTBjMGY4YWEzNmFjNzg0Yy5zZXRDb250ZW50KGh0bWxfMTk1ZWViZTM0ZWVlNDFkMDg0YWU3NDY4NjBhZmZjMDkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzJhMzBhMTBiNDNmNzQ4YTM5YzI0MmQxNGM5NzIxZDA4LmJpbmRQb3B1cChwb3B1cF84OWM4ZTBjODNhNzI0ZTJkOTBjMGY4YWEzNmFjNzg0YykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2I1ZWFjMjRlNmZhNDAxOWIwMDk0ZTY2OTkwOWViN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTIyMTU5NjA4MjgyOCwgLTk2LjcyNzM0NTQzNjc4NDE2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzgwYjYwYTlkZTdiNjQ0ZDBhM2M2OGE2YTAyYTg3ZDM0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMjk1YWNlYWRjYjU0MWFmOWUwNDg3OGYxOWY3NjhmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjI5NWFjZWFkY2I1NDFhZjllMDQ4NzhmMTlmNzY4ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhY2tzd2luZyBCcmV3aW5nIENvLiAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODBiNjBhOWRlN2I2NDRkMGEzYzY4YTZhMDJhODdkMzQuc2V0Q29udGVudChodG1sX2YyOTVhY2VhZGNiNTQxYWY5ZTA0ODc4ZjE5Zjc2OGZmKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jYjVlYWMyNGU2ZmE0MDE5YjAwOTRlNjY5OTA5ZWI3Zi5iaW5kUG9wdXAocG9wdXBfODBiNjBhOWRlN2I2NDRkMGEzYzY4YTZhMDJhODdkMzQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyMDQ5OWMzMGUxNDRmMTU5OGE3OWI2NzhlYjUyOGIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4ODI4OTgxNTg5OTksIC05Ni42NDA1NTY5MDMzNTM5OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84ODVlYjRkNzZmODA0NjcwYjc2MDhlNWYxYjAzOTg3YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTBkODE3ZTNjZGJlNDY0OTkxOTZkYzhjZGVmNTZlNjcgPSAkKGA8ZGl2IGlkPSJodG1sX2EwZDgxN2UzY2RiZTQ2NDk5MTk2ZGM4Y2RlZjU2ZTY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OYWlsIERlc2lnbiAmYW1wOyBTcGEgKENvc21ldGljcyBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84ODVlYjRkNzZmODA0NjcwYjc2MDhlNWYxYjAzOTg3YS5zZXRDb250ZW50KGh0bWxfYTBkODE3ZTNjZGJlNDY0OTkxOTZkYzhjZGVmNTZlNjcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzkyMDQ5OWMzMGUxNDRmMTU5OGE3OWI2NzhlYjUyOGIxLmJpbmRQb3B1cChwb3B1cF84ODVlYjRkNzZmODA0NjcwYjc2MDhlNWYxYjAzOTg3YSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWZkMTNlYTYwMWNkNGZjNzlkNDg3ZmU0N2U1MmNjOWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTgwNTUxMDcxMTMzMywgLTk2LjY0MjY4NDg5NjIwMjU0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2QwODVkMWJmNWVhYjRlZDFhODI2ZDIzNDczMjRiZjU3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMmQ0ZjcxY2ZiYjA0YTI0OWU5NjkzMmMxMTRkYmE0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJkNGY3MWNmYmIwNGEyNDllOTY5MzJjMTE0ZGJhNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhcnRoZW5vbiBUYXZlcm5hIEdyZWVrIEdyaWxsIChHcmVlayBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kMDg1ZDFiZjVlYWI0ZWQxYTgyNmQyMzQ3MzI0YmY1Ny5zZXRDb250ZW50KGh0bWxfYzJkNGY3MWNmYmIwNGEyNDllOTY5MzJjMTE0ZGJhNDEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2FmZDEzZWE2MDFjZDRmYzc5ZDQ4N2ZlNDdlNTJjYzlmLmJpbmRQb3B1cChwb3B1cF9kMDg1ZDFiZjVlYWI0ZWQxYTgyNmQyMzQ3MzI0YmY1NykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTc0MWJiOWM4ZWQyNDhiMmE1NDQ3NDcxODBmODJhMTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTUyNzk2MzQ5Nzg5NSwgLTk2LjYzMDkyMzY5MTUwNDgzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY4YjY5MDNkZTcxNjQyMzBiMTg4ZDhkZmEwYmRjMjhiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMzBlNTk2ODQzZDY0ODgzYmZkYmNkOGEyZmRiMTNiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzMwZTU5Njg0M2Q2NDg4M2JmZGJjZDhhMmZkYjEzYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1SG90IE1vbmdvbGlhbiBHcmlsbCAoQXNpYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjhiNjkwM2RlNzE2NDIzMGIxODhkOGRmYTBiZGMyOGIuc2V0Q29udGVudChodG1sX2MzMGU1OTY4NDNkNjQ4ODNiZmRiY2Q4YTJmZGIxM2I0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hNzQxYmI5YzhlZDI0OGIyYTU0NDc0NzE4MGY4MmExNC5iaW5kUG9wdXAocG9wdXBfNjhiNjkwM2RlNzE2NDIzMGIxODhkOGRmYTBiZGMyOGIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4NDMzM2UxZmNlMzQxMjZiNDg0MjU2NTNiNzg0M2JmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODM2NDE0MDI1OTM5NzMsIC05Ni42NTY5ODM3NzIzMzM3M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82YjdlMDcxZDdlM2Y0ZDEwOGNmNWFjMjU5ZTViZDUxMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOWE5ODVmYjFhODYxNGVkZGIzZTA4NGRiZWU1NjEzMzcgPSAkKGA8ZGl2IGlkPSJodG1sXzlhOTg1ZmIxYTg2MTRlZGRiM2UwODRkYmVlNTYxMzM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXNreSYjMzk7cyBTcG9ydHMgQmFyICZhbXA7IEdyaWxsIChTcG9ydHMgQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82YjdlMDcxZDdlM2Y0ZDEwOGNmNWFjMjU5ZTViZDUxMy5zZXRDb250ZW50KGh0bWxfOWE5ODVmYjFhODYxNGVkZGIzZTA4NGRiZWU1NjEzMzcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQ4NDMzM2UxZmNlMzQxMjZiNDg0MjU2NTNiNzg0M2JmLmJpbmRQb3B1cChwb3B1cF82YjdlMDcxZDdlM2Y0ZDEwOGNmNWFjMjU5ZTViZDUxMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODk4MzU5ZGZlYzhjNDgxZmEzMjVmZTMxOGZlZWRlOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ0Mjc5OTE0NDE5OTUsIC05Ni42Mzg0MzE3NjM5NTEyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y2ZjU5ODhiYTYzMDRhNTA4MDc5MTc3OWQ3NGUyNWMwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xYTYzMzUxZjIwYjM0NDc2OGVjNGQ2YjVlZTZiYzFkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWE2MzM1MWYyMGIzNDQ3NjhlYzRkNmI1ZWU2YmMxZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9saXZlIEdhcmRlbiAoSXRhbGlhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNmY1OTg4YmE2MzA0YTUwODA3OTE3NzlkNzRlMjVjMC5zZXRDb250ZW50KGh0bWxfMWE2MzM1MWYyMGIzNDQ3NjhlYzRkNmI1ZWU2YmMxZDEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzg5ODM1OWRmZWM4YzQ4MWZhMzI1ZmUzMThmZWVkZThkLmJpbmRQb3B1cChwb3B1cF9mNmY1OTg4YmE2MzA0YTUwODA3OTE3NzlkNzRlMjVjMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRlNjFkMDA2NzYxNDE2MmEyMThhYTJkZjE0OTI0NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM1MDIwOTU2NTkxOCwgLTk2Ljc0MjY0MjYyMjc5NTQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E4MDQxOTE1Nzc3MzQyMTFiYmEyZWIxNDEzZjY2ZTgxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wMmY2ODc1MTcyMDE0Mjg4YmNhZWE2MmIzZDJlMzA4OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDJmNjg3NTE3MjAxNDI4OGJjYWVhNjJiM2QyZTMwODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBoYXQgSmFja3MgKEJCUSBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTgwNDE5MTU3NzczNDIxMWJiYTJlYjE0MTNmNjZlODEuc2V0Q29udGVudChodG1sXzAyZjY4NzUxNzIwMTQyODhiY2FlYTYyYjNkMmUzMDg4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82NGU2MWQwMDY3NjE0MTYyYTIxOGFhMmRmMTQ5MjQ2OC5iaW5kUG9wdXAocG9wdXBfYTgwNDE5MTU3NzczNDIxMWJiYTJlYjE0MTNmNjZlODEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1YmI0ZTYwZDRkOTQyMzk5NGRlZTI1OGU0ZDYxZGU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODYxMjc4NjIsIC05Ni42Nzc5MTA1M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xNWRjYjhiM2QyOTg0OWFjYmJiY2UzNzZkMDc4MGE1ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTkyOTY0NWYyM2UxNDMxZGEzZTQzNGU1ODNiMDYyNzMgPSAkKGA8ZGl2IGlkPSJodG1sXzk5Mjk2NDVmMjNlMTQzMWRhM2U0MzRlNTgzYjA2MjczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IeS1WZWUgKEdyb2NlcnkgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE1ZGNiOGIzZDI5ODQ5YWNiYmJjZTM3NmQwNzgwYTVmLnNldENvbnRlbnQoaHRtbF85OTI5NjQ1ZjIzZTE0MzFkYTNlNDM0ZTU4M2IwNjI3Myk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNzViYjRlNjBkNGQ5NDIzOTk0ZGVlMjU4ZTRkNjFkZTcuYmluZFBvcHVwKHBvcHVwXzE1ZGNiOGIzZDI5ODQ5YWNiYmJjZTM3NmQwNzgwYTVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OWMwMjIxZDFiM2U0ZTZkYjYwOGQ5MzRlMzA0NjU1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDg5NDcwMzA5MzcxLCAtOTYuNjY5NzQ0MjA4MDcyNTNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNTllMDJjNTQxNWU2NDNhNmE4OGY4MTAyYjYzYjNlNGIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NhZWQzMWQ2ZGQ5ZjRlNTRiNGM2MTMyYzI2MGExOTQ3ID0gJChgPGRpdiBpZD0iaHRtbF9jYWVkMzFkNmRkOWY0ZTU0YjRjNjEzMmMyNjBhMTk0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGFuZG9vciBJbmRpYW4gQ3Vpc2luZSAoSW5kaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU5ZTAyYzU0MTVlNjQzYTZhODhmODEwMmI2M2IzZTRiLnNldENvbnRlbnQoaHRtbF9jYWVkMzFkNmRkOWY0ZTU0YjRjNjEzMmMyNjBhMTk0Nyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNjljMDIyMWQxYjNlNGU2ZGI2MDhkOTM0ZTMwNDY1NTIuYmluZFBvcHVwKHBvcHVwXzU5ZTAyYzU0MTVlNjQzYTZhODhmODEwMmI2M2IzZTRiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWRkOWFmY2NjOTg0ZmJlYjg1M2QwNTZhNjMzNmRmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDU0MjQwNDMxOTEsIC05Ni42MzQ5NDY4NTQ1NDEyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y1NWQ3ZDU0YTY4MzRmMzNiMzVmZmE0MDg4ODI0MGQ2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kODExNjNiYjlhZDM0ODJhYTM0YWFlMzU5Mjc3NTZmNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDgxMTYzYmI5YWQzNDgyYWEzNGFhZTM1OTI3NzU2ZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW5pdGUgQ2l0eSAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjU1ZDdkNTRhNjgzNGYzM2IzNWZmYTQwODg4MjQwZDYuc2V0Q29udGVudChodG1sX2Q4MTE2M2JiOWFkMzQ4MmFhMzRhYWUzNTkyNzc1NmY2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80OWRkOWFmY2NjOTg0ZmJlYjg1M2QwNTZhNjMzNmRmYi5iaW5kUG9wdXAocG9wdXBfZjU1ZDdkNTRhNjgzNGYzM2IzNWZmYTQwODg4MjQwZDYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0OGYzMmVjYTdiZTQ3ZGQ4MzUxNjE0YzhhYzM3MWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEyODQ0MzAxMjM2MjUsIC05Ni42MzkxNzU0OTAyMTYwNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mZGUxNGRiZGZjZTU0ZDI4OWVjYWEzNjdkYmFmOGI0MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODgwYjlkYzRhYzllNDc3N2EzMDQzNmQxMTIzMmFhZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzg4MGI5ZGM0YWM5ZTQ3NzdhMzA0MzZkMTEyMzJhYWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaG9sZSBGb29kcyBNYXJrZXQgKEdyb2NlcnkgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZkZTE0ZGJkZmNlNTRkMjg5ZWNhYTM2N2RiYWY4YjQwLnNldENvbnRlbnQoaHRtbF84ODBiOWRjNGFjOWU0Nzc3YTMwNDM2ZDExMjMyYWFlYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ4ZjMyZWNhN2JlNDdkZDgzNTE2MTRjOGFjMzcxY2YuYmluZFBvcHVwKHBvcHVwX2ZkZTE0ZGJkZmNlNTRkMjg5ZWNhYTM2N2RiYWY4YjQwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzE2MmMzNzVjNjM0NWNmOGRlNzMzZDdhMWJhY2QzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDczNjIxMTU4NTA1NSwgLTk2LjY1NTE1NTA0ODIxNzg0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzAxZjNmODEwZGQxMzQyMjRhNmI2NzMzNzJmYWY4ZTRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kOTE3MTUyOGYyZmM0MTUwYTE1MDlhMTM0NjYxYmU4YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDkxNzE1MjhmMmZjNDE1MGExNTA5YTEzNDY2MWJlOGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhZ2VscyAmYW1wOyBKb2UgKEJhZ2VsIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzAxZjNmODEwZGQxMzQyMjRhNmI2NzMzNzJmYWY4ZTRlLnNldENvbnRlbnQoaHRtbF9kOTE3MTUyOGYyZmM0MTUwYTE1MDlhMTM0NjYxYmU4Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMGMxNjJjMzc1YzYzNDVjZjhkZTczM2Q3YTFiYWNkMzYuYmluZFBvcHVwKHBvcHVwXzAxZjNmODEwZGQxMzQyMjRhNmI2NzMzNzJmYWY4ZTRlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmJkYmY3NWEyYjc0NTM3Yjk2MWY4ZDc3M2Q4YzM4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzgzNDYyMTA4NzcyNCwgLTk2LjY1MzM0MzQyNjM4MzQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ1MTlmYTJlNmNiYzRkZTY5MGMzMTc2Mjk3Y2RjZjc5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xNDljZDA2MmU1N2I0MzA3ODliNzAyMTlhYTQxMTc5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTQ5Y2QwNjJlNTdiNDMwNzg5YjcwMjE5YWE0MTE3OWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZXRhJiMzOTtzIEdvdXJtZXQgQ2F0ZXJpbmcgKERlbGkgLyBCb2RlZ2EpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQ1MTlmYTJlNmNiYzRkZTY5MGMzMTc2Mjk3Y2RjZjc5LnNldENvbnRlbnQoaHRtbF8xNDljZDA2MmU1N2I0MzA3ODliNzAyMTlhYTQxMTc5Yyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmZiZGJmNzVhMmI3NDUzN2I5NjFmOGQ3NzNkOGMzODAuYmluZFBvcHVwKHBvcHVwXzQ1MTlmYTJlNmNiYzRkZTY5MGMzMTc2Mjk3Y2RjZjc5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YmJiYmJkYWExZGE0OGRkYTAzMGQ1NmZhOTIzNzI5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MDY3MjA1MzE5NzMyNSwgLTk2LjY1MzM2OTY4ODM4NjM2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U3NTJmMWMwNmYzOTRlNTliNDRmMjZlNmE0Y2EwZDkxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMTk0YmI3MzQ2NWU0NTQ4Yjk5M2NhMjdkY2YwNDU0NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjE5NGJiNzM0NjVlNDU0OGI5OTNjYTI3ZGNmMDQ1NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZhbGVudGlubyYjMzk7cyAoUGl6emEgUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2U3NTJmMWMwNmYzOTRlNTliNDRmMjZlNmE0Y2EwZDkxLnNldENvbnRlbnQoaHRtbF9mMTk0YmI3MzQ2NWU0NTQ4Yjk5M2NhMjdkY2YwNDU0NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNGJiYmJiZGFhMWRhNDhkZGEwMzBkNTZmYTkyMzcyOTEuYmluZFBvcHVwKHBvcHVwX2U3NTJmMWMwNmYzOTRlNTliNDRmMjZlNmE0Y2EwZDkxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTVlYjI1Y2M2NzQ0ZjMzOTZlOWJiMzYwMjBiZGI1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MjA0ODcwMDQyMjU4LCAtOTYuNjU0NzAzMzM1NjUwN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNDI1YjUzM2FkYTA0NDBhODQ2ZmYxMzQzMjZlMDEwNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYmZhYTNhZGZkZjYwNDk0ZDg1MmQ2YmU3NmE4NGQ3MWIgPSAkKGA8ZGl2IGlkPSJodG1sX2JmYWEzYWRmZGY2MDQ5NGQ4NTJkNmJlNzZhODRkNzFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UYWNvIElubiAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNDI1YjUzM2FkYTA0NDBhODQ2ZmYxMzQzMjZlMDEwNy5zZXRDb250ZW50KGh0bWxfYmZhYTNhZGZkZjYwNDk0ZDg1MmQ2YmU3NmE4NGQ3MWIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2I5NWViMjVjYzY3NDRmMzM5NmU5YmIzNjAyMGJkYjUyLmJpbmRQb3B1cChwb3B1cF9jNDI1YjUzM2FkYTA0NDBhODQ2ZmYxMzQzMjZlMDEwNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdkMWY3MmQ0Njc0NDg5NzgxNzc2Y2ZkNGFhYWQ4ODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDEyMDI4LCAtOTYuNjgxODA0N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mYWVhMDdiODViYzg0MjlkYTBkZTYyZTMyNTc1MjJhNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMGE3YTJiNDM2ZGEwNGJiYjg1ZGVlY2Q4YmQ1YWRkZjQgPSAkKGA8ZGl2IGlkPSJodG1sXzBhN2EyYjQzNmRhMDRiYmI4NWRlZWNkOGJkNWFkZGY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGljay1maWwtQSAoRmFzdCBGb29kIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZhZWEwN2I4NWJjODQyOWRhMGRlNjJlMzI1NzUyMmE3LnNldENvbnRlbnQoaHRtbF8wYTdhMmI0MzZkYTA0YmJiODVkZWVjZDhiZDVhZGRmNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTdkMWY3MmQ0Njc0NDg5NzgxNzc2Y2ZkNGFhYWQ4ODEuYmluZFBvcHVwKHBvcHVwX2ZhZWEwN2I4NWJjODQyOWRhMGRlNjJlMzI1NzUyMmE3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMjNlMWYxMzM3NTY0OGI3OTBhZmZlZWZjYTZkNDU2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MjIzNTY0NTg1NzIzNSwgLTk2LjY3NDk3MzMxMzI1MjI0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZlY2RiYmViMzU1ZDQ0Yzg4NjAzODA3OTM5OWU5MDExID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81YWZkNjA0MDdkODk0ZTkyYmQ5Y2FjMmI4ZDZhOTE4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWFmZDYwNDA3ZDg5NGU5MmJkOWNhYzJiOGQ2YTkxOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyYWRlciBKb2UmIzM5O3MgKEdyb2NlcnkgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZlY2RiYmViMzU1ZDQ0Yzg4NjAzODA3OTM5OWU5MDExLnNldENvbnRlbnQoaHRtbF81YWZkNjA0MDdkODk0ZTkyYmQ5Y2FjMmI4ZDZhOTE4ZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMDIzZTFmMTMzNzU2NDhiNzkwYWZmZWVmY2E2ZDQ1NjcuYmluZFBvcHVwKHBvcHVwX2ZlY2RiYmViMzU1ZDQ0Yzg4NjAzODA3OTM5OWU5MDExKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjIzMjhjMmU4MTA0OGRhODUyMDE3MGFkNzRhMDNiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDMwNjcxODMzNjM5LCAtOTYuNjI1NjY4ODk2MjA0MzldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmIzYTk2MTViNGZlNDU4NDlmMGYwNmU0MjE5YzE2MTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ZmZDk2Nzg0MWJjNzQ4ZTRiYzUyOTIwZTM2MTc1ZjJjID0gJChgPGRpdiBpZD0iaHRtbF9mZmQ5Njc4NDFiYzc0OGU0YmM1MjkyMGUzNjE3NWYyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGUgUXVhcnRpZXIgKENhZsOpKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mYjNhOTYxNWI0ZmU0NTg0OWYwZjA2ZTQyMTljMTYxNi5zZXRDb250ZW50KGh0bWxfZmZkOTY3ODQxYmM3NDhlNGJjNTI5MjBlMzYxNzVmMmMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2RmMjMyOGMyZTgxMDQ4ZGE4NTIwMTcwYWQ3NGEwM2I0LmJpbmRQb3B1cChwb3B1cF9mYjNhOTYxNWI0ZmU0NTg0OWYwZjA2ZTQyMTljMTYxNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmNhZWNmODRlY2M2NDk5MGFiMTJiNzgzMGI3ZDQwMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDYzNzAwMjQyNDE3OSwgLTk2LjY4Nzk0Mjg1NTc0OTYzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk3YzBmNDJkNzc0NDQxYjNhZmQxNzY3N2RhNWExYThlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82MzM2NjZlMjNiOTg0MDdlYWJjZDUxOWVkZGRhN2I2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjMzNjY2ZTIzYjk4NDA3ZWFiY2Q1MTllZGRkYTdiNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwaWtlcyBCZWFjaCBCYXIgYW5kIEdyaWxsIChTcG9ydHMgQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85N2MwZjQyZDc3NDQ0MWIzYWZkMTc2NzdkYTVhMWE4ZS5zZXRDb250ZW50KGh0bWxfNjMzNjY2ZTIzYjk4NDA3ZWFiY2Q1MTllZGRkYTdiNjApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzZjYWVjZjg0ZWNjNjQ5OTBhYjEyYjc4MzBiN2Q0MDBiLmJpbmRQb3B1cChwb3B1cF85N2MwZjQyZDc3NDQ0MWIzYWZkMTc2NzdkYTVhMWE4ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmE0ZjJiMWIzYzc4NDAwYmJjYTg1NGJkODdlMDZkNDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjAyNjAyNjczMDk2NTYsIC05Ni43MzQ1NTI4MzA2MTIzOV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wZjM1M2RiOTE0NGI0Mjg0OWI3M2Y1Mjc3ZjRiYmY2OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTcyODE2M2RiZTZlNDMyM2IwYjFlZWZmNzg5YWRiNTEgPSAkKGA8ZGl2IGlkPSJodG1sXzU3MjgxNjNkYmU2ZTQzMjNiMGIxZWVmZjc4OWFkYjUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXBpdG9sIEJlYWNoIFNhbHQgTGFrZSAoQmVhY2gpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzBmMzUzZGI5MTQ0YjQyODQ5YjczZjUyNzdmNGJiZjY5LnNldENvbnRlbnQoaHRtbF81NzI4MTYzZGJlNmU0MzIzYjBiMWVlZmY3ODlhZGI1MSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmE0ZjJiMWIzYzc4NDAwYmJjYTg1NGJkODdlMDZkNDkuYmluZFBvcHVwKHBvcHVwXzBmMzUzZGI5MTQ0YjQyODQ5YjczZjUyNzdmNGJiZjY5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODUwNGQ3YzZkY2Y0MDJkYTRhNmI4YzM5YmZiODEzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NTkxMDk5MjMzOTQ3LCAtOTYuNzAwMjc5OTUxMTk3NDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2Q3ZDEwYmQyNWZkNGZmYmJjY2U4OTMwYzQ5NDZlMTkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2E0OTYxZGY5YWUwZTRjOTk5MzhiNDJmMTI4NmU0MWQ2ID0gJChgPGRpdiBpZD0iaHRtbF9hNDk2MWRmOWFlMGU0Yzk5OTM4YjQyZjEyODZlNDFkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q3VsdmVyJiMzOTtzIChGYXN0IEZvb2QgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2Q3ZDEwYmQyNWZkNGZmYmJjY2U4OTMwYzQ5NDZlMTkuc2V0Q29udGVudChodG1sX2E0OTYxZGY5YWUwZTRjOTk5MzhiNDJmMTI4NmU0MWQ2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81ODUwNGQ3YzZkY2Y0MDJkYTRhNmI4YzM5YmZiODEzMC5iaW5kUG9wdXAocG9wdXBfN2Q3ZDEwYmQyNWZkNGZmYmJjY2U4OTMwYzQ5NDZlMTkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4MDRmYTUxYjcyYzQ5OTBiY2E2NmM4NDBjYjY4MjQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1NTgzNzMyMTc3MDYsIC05Ni42Mzk1Mjc4ODU5NjY0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JmOTBiZTI2MjkxZjQzNGM4M2ZiMTVmMzIyOWMxMWVhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yMjc5NmJhMjI1MTM0N2YzYjk0YThkNjczYWJhZWNkZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjI3OTZiYTIyNTEzNDdmM2I5NGE4ZDY3M2FiYWVjZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhemxvJiMzOTtzIEJyZXdlcnkgJmFtcDsgR3JpbGwgKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JmOTBiZTI2MjkxZjQzNGM4M2ZiMTVmMzIyOWMxMWVhLnNldENvbnRlbnQoaHRtbF8yMjc5NmJhMjI1MTM0N2YzYjk0YThkNjczYWJhZWNkZik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYTgwNGZhNTFiNzJjNDk5MGJjYTY2Yzg0MGNiNjgyNDcuYmluZFBvcHVwKHBvcHVwX2JmOTBiZTI2MjkxZjQzNGM4M2ZiMTVmMzIyOWMxMWVhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTRiNWJmNGU5M2I0ZDEwODhjMjRlMzlmYWQxMDEzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1NzM3LCAtOTYuNjM0OTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmIzM2JjNDQ1M2U0NDZmOGE3YmEzYmQ4MDQxZWMyYjUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2M2NTQ0YmM1MjZmZTRiZjFiYWM4YmViMjUwZmEzMTIwID0gJChgPGRpdiBpZD0iaHRtbF9jNjU0NGJjNTI2ZmU0YmYxYmFjOGJlYjI1MGZhMzEyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SXNsZXMgUHViICZhbXA7IFBpenphIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNmIzM2JjNDQ1M2U0NDZmOGE3YmEzYmQ4MDQxZWMyYjUuc2V0Q29udGVudChodG1sX2M2NTQ0YmM1MjZmZTRiZjFiYWM4YmViMjUwZmEzMTIwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jZTRiNWJmNGU5M2I0ZDEwODhjMjRlMzlmYWQxMDEzMy5iaW5kUG9wdXAocG9wdXBfNmIzM2JjNDQ1M2U0NDZmOGE3YmEzYmQ4MDQxZWMyYjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzYmI2ZDBhNTU0NzRiN2JhM2VhZjRiOWRlNDVmMWY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk4NDMxODA4ODEwMjg1LCAtOTYuNjI2Mjk2NDE1NjI4MjNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYmM3ZDhhNGRhOTk1NGNkOThjNWUwMjk1NTlkZDI4ZTkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZhMDQ0MGRhMDY5OTQzM2I5ZjllYzg1MzJhNGZhNTBmID0gJChgPGRpdiBpZD0iaHRtbF82YTA0NDBkYTA2OTk0MzNiOWY5ZWM4NTMyYTRmYTUwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hvcHN0aWNrcyAoQ2hpbmVzZSBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iYzdkOGE0ZGE5OTU0Y2Q5OGM1ZTAyOTU1OWRkMjhlOS5zZXRDb250ZW50KGh0bWxfNmEwNDQwZGEwNjk5NDMzYjlmOWVjODUzMmE0ZmE1MGYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzYzYmI2ZDBhNTU0NzRiN2JhM2VhZjRiOWRlNDVmMWY0LmJpbmRQb3B1cChwb3B1cF9iYzdkOGE0ZGE5OTU0Y2Q5OGM1ZTAyOTU1OWRkMjhlOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWJhZWI0NjVjZjg3NDllMjk3YzhjZWJlOTM4NzI3MWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzA5MTkwMDAxMDk4NSwgLTk2LjYyMzUzNjg1MDM2NjU4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE0ZDM3ZDJjOTc1ZjQzMmI4OGFmMzcwYjU2MjBiNWRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81MDA1NjVkZWE2NGE0MjVjOGEwYjE3NjVjNDJlNGVjYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTAwNTY1ZGVhNjRhNDI1YzhhMGIxNzY1YzQyZTRlY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZlbnVlIFJlc3RhdXJhbnQgJmFtcDsgTG91bmdlIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNGQzN2QyYzk3NWY0MzJiODhhZjM3MGI1NjIwYjVkZS5zZXRDb250ZW50KGh0bWxfNTAwNTY1ZGVhNjRhNDI1YzhhMGIxNzY1YzQyZTRlY2IpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2ViYWViNDY1Y2Y4NzQ5ZTI5N2M4Y2ViZTkzODcyNzFlLmJpbmRQb3B1cChwb3B1cF8xNGQzN2QyYzk3NWY0MzJiODhhZjM3MGI1NjIwYjVkZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRiZDZlNzRlYWEyNGRkZmIwODIxZTdmZjExN2UwNzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTcwMjg1MDkwMzgwNywgLTk2LjY1MzMzNDc5MTc0MTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzYwYTEzOTNkNzUyNDY3OGE4ZjQ3ZTQzYjcwNjk3MmIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzJjN2Y5MGZiMzk2NjRhNmI5MDdjNTg3OGFlNmQ5YjM5ID0gJChgPGRpdiBpZD0iaHRtbF8yYzdmOTBmYjM5NjY0YTZiOTA3YzU4NzhhZTZkOWIzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhdWZmZXImIzM5O3MgQ2FmZSAmYW1wOyBQaWUgU2hvcHBlIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNjBhMTM5M2Q3NTI0Njc4YThmNDdlNDNiNzA2OTcyYi5zZXRDb250ZW50KGh0bWxfMmM3ZjkwZmIzOTY2NGE2YjkwN2M1ODc4YWU2ZDliMzkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzI0YmQ2ZTc0ZWFhMjRkZGZiMDgyMWU3ZmYxMTdlMDc0LmJpbmRQb3B1cChwb3B1cF9jNjBhMTM5M2Q3NTI0Njc4YThmNDdlNDNiNzA2OTcyYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQ2YmIwMDczMGU5NDdhYmE4NzAwYzViZDNmMmExODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDQyMjIsIC05Ni42ODE2NDFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGVmNDBjOTBlZGI5NDU1NGIzYzc0YjMyYzk0ZjM3ZmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzMxNTdlZWU1MDc2MjQ1NTdiZTQ1OTNjMWFhOWY3ODkyID0gJChgPGRpdiBpZD0iaHRtbF8zMTU3ZWVlNTA3NjI0NTU3YmU0NTkzYzFhYTlmNzg5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJlZGR54oCZcyAoQnVyZ2VyIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kZWY0MGM5MGVkYjk0NTU0YjNjNzRiMzJjOTRmMzdmYS5zZXRDb250ZW50KGh0bWxfMzE1N2VlZTUwNzYyNDU1N2JlNDU5M2MxYWE5Zjc4OTIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2RkNmJiMDA3MzBlOTQ3YWJhODcwMGM1YmQzZjJhMTgxLmJpbmRQb3B1cChwb3B1cF9kZWY0MGM5MGVkYjk0NTU0YjNjNzRiMzJjOTRmMzdmYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg5ZjgzYmQ1YjRiNGExYjgzZDEwYTMwNjE5MGEyOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTQ4MjgyNzAyMjg2NDQsIC05Ni42ODE3MDI3NTIxOTU2Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MmI0MzEzZGY1MzY0NTNkYjA2MjFmMTMwMjU3Y2EwMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGY2NWUxNmI0NjE1NDRkYmI0ODQzOTk2ODY1N2M2NWMgPSAkKGA8ZGl2IGlkPSJodG1sXzRmNjVlMTZiNDYxNTQ0ZGJiNDg0Mzk5Njg2NTdjNjVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXphdGxhbiBJSSAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80MmI0MzEzZGY1MzY0NTNkYjA2MjFmMTMwMjU3Y2EwMi5zZXRDb250ZW50KGh0bWxfNGY2NWUxNmI0NjE1NDRkYmI0ODQzOTk2ODY1N2M2NWMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzM4OWY4M2JkNWI0YjRhMWI4M2QxMGEzMDYxOTBhMjhkLmJpbmRQb3B1cChwb3B1cF80MmI0MzEzZGY1MzY0NTNkYjA2MjFmMTMwMjU3Y2EwMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2NiMzFjMTIwMzNmNGQ2NWFjNDM5M2IzZDg5MmE3OWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODU4NzA2NjAzMTc0NiwgLTk2LjYyNTc3NzY0MzU0MzQ3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E0Y2Q0YTU5MGEyNDRmZGQ5OGZjOTQ0MDIyNjlmZWU5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81N2MxZjljNTZkYzk0MGRlODNiYTgyNTAwYTczZmI3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTdjMWY5YzU2ZGM5NDBkZTgzYmE4MjUwMGE3M2ZiNzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZhbGVudGlubyYjMzk7cyBUbyBHbyAoUGl6emEgUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E0Y2Q0YTU5MGEyNDRmZGQ5OGZjOTQ0MDIyNjlmZWU5LnNldENvbnRlbnQoaHRtbF81N2MxZjljNTZkYzk0MGRlODNiYTgyNTAwYTczZmI3MSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfM2NiMzFjMTIwMzNmNGQ2NWFjNDM5M2IzZDg5MmE3OWQuYmluZFBvcHVwKHBvcHVwX2E0Y2Q0YTU5MGEyNDRmZGQ5OGZjOTQ0MDIyNjlmZWU5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MThmZGM0NDkzNzU0YzNkYjdkNGU3MWE5NDBhZWViOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjE4MDM3NzAyMzI3LCAtOTYuNzAxMTAzOTY1ODkyODddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjZmNmE1NzNiMmE4NGY5Yzk2MGJhYTljYjg3YjJjNTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI2MDkyN2FkMmQzNjQ3NTc4MDkxOTdkZGY1MzcyY2ZkID0gJChgPGRpdiBpZD0iaHRtbF8yNjA5MjdhZDJkMzY0NzU3ODA5MTk3ZGRmNTM3MmNmZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R29vZGNlbnRzIERlbGkgRnJlc2ggU3VicyAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y2ZjZhNTczYjJhODRmOWM5NjBiYWE5Y2I4N2IyYzUzLnNldENvbnRlbnQoaHRtbF8yNjA5MjdhZDJkMzY0NzU3ODA5MTk3ZGRmNTM3MmNmZCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTE4ZmRjNDQ5Mzc1NGMzZGI3ZDRlNzFhOTQwYWVlYjguYmluZFBvcHVwKHBvcHVwX2Y2ZjZhNTczYjJhODRmOWM5NjBiYWE5Y2I4N2IyYzUzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMTBiYzg4YTc3ODQ0NjNiOTg1MDEwZjU2ZjY3MGUwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MzQ2OTQ3NTA5NzMzLCAtOTYuNjMxMDU0Nzc2NDMzMDZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGQ4NjFiZGI4ZTZhNDcyZGE0NGFlZWRkYjdkMTk5ZjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzAwMDE0ODJjNTU0NzQyNjNhNmFlMTI4NDg1ZDIyZGFiID0gJChgPGRpdiBpZD0iaHRtbF8wMDAxNDgyYzU1NDc0MjYzYTZhZTEyODQ4NWQyMmRhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbWVzIExha2UgUGFyayAoUGFyayk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZGQ4NjFiZGI4ZTZhNDcyZGE0NGFlZWRkYjdkMTk5ZjMuc2V0Q29udGVudChodG1sXzAwMDE0ODJjNTU0NzQyNjNhNmFlMTI4NDg1ZDIyZGFiKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9mMTBiYzg4YTc3ODQ0NjNiOTg1MDEwZjU2ZjY3MGUwMC5iaW5kUG9wdXAocG9wdXBfZGQ4NjFiZGI4ZTZhNDcyZGE0NGFlZWRkYjdkMTk5ZjMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmOWJlMDZjOTMxYjRjM2NiZjk1ODU5OGViMWI0M2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY5MTMsIC05Ni42MjcxOTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWEyNDg1YzJlZjZhNDA0OWEzZTdlNTBmYTk3YWRmNWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VlMGRhM2UxMTNlYTRiM2Y5NzJhYTkzNGVkZjdmYTJjID0gJChgPGRpdiBpZD0iaHRtbF9lZTBkYTNlMTEzZWE0YjNmOTcyYWE5MzRlZGY3ZmEyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R29vZGNlbnRzIERlbGkgRnJlc2ggU3VicyAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2FhMjQ4NWMyZWY2YTQwNDlhM2U3ZTUwZmE5N2FkZjVlLnNldENvbnRlbnQoaHRtbF9lZTBkYTNlMTEzZWE0YjNmOTcyYWE5MzRlZGY3ZmEyYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNmY5YmUwNmM5MzFiNGMzY2JmOTU4NTk4ZWIxYjQzYzYuYmluZFBvcHVwKHBvcHVwX2FhMjQ4NWMyZWY2YTQwNDlhM2U3ZTUwZmE5N2FkZjVlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNzNhOWQwMzgxNjQ0ODk3YmNmNGRjZjE4NTc1NmNhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDA5NjIwODM3MzQ1LCAtOTYuNzUxMzUzMDkxODI3MjFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmVmZDI4YzQyYjFlNDMyYTlhZmYwMzBiMDVmZDg2OGYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2YxMjkxZWQ1MzQ0NTQwM2ZhYzg1ZjI4NWE2ZjkzNDE4ID0gJChgPGRpdiBpZD0iaHRtbF9mMTI5MWVkNTM0NDU0MDNmYWM4NWYyODVhNmY5MzQxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RCYjMzk7TGVvbiYjMzk7cyBNZXhpY2FuIEZvb2QgKEJ1cnJpdG8gUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZlZmQyOGM0MmIxZTQzMmE5YWZmMDMwYjA1ZmQ4NjhmLnNldENvbnRlbnQoaHRtbF9mMTI5MWVkNTM0NDU0MDNmYWM4NWYyODVhNmY5MzQxOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZDczYTlkMDM4MTY0NDg5N2JjZjRkY2YxODU3NTZjYTQuYmluZFBvcHVwKHBvcHVwXzZlZmQyOGM0MmIxZTQzMmE5YWZmMDMwYjA1ZmQ4NjhmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNDJiZTE2ZmE4NzI0OTkxOTNkMzU2ODBlOGU4MmMwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2OTIwNDIwMjM0NTMsIC05Ni42MTQ2MjQ3NTI2MTAxN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80NGM0NDkzYWE3MmY0MTI2OTIwMjU5NzlhY2VjMWQwOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTQzNjkxZWM4MjIwNGQzZDk4MjFjMDM3NjMyNjEzZGQgPSAkKGA8ZGl2IGlkPSJodG1sX2E0MzY5MWVjODIyMDRkM2Q5ODIxYzAzNzYzMjYxM2RkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb01vIFBpenplcmlhICZhbXA7IFJpc3RvcmFudGUgKEl0YWxpYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDRjNDQ5M2FhNzJmNDEyNjkyMDI1OTc5YWNlYzFkMDkuc2V0Q29udGVudChodG1sX2E0MzY5MWVjODIyMDRkM2Q5ODIxYzAzNzYzMjYxM2RkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xNDJiZTE2ZmE4NzI0OTkxOTNkMzU2ODBlOGU4MmMwOS5iaW5kUG9wdXAocG9wdXBfNDRjNDQ5M2FhNzJmNDEyNjkyMDI1OTc5YWNlYzFkMDkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2NzIxNDU1MDE0ZjRiYjY5NDBiYzkwYzZkMTUwMjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODU0MDMxNjY3Mjc5MzUsIC05Ni42ODE3MDk1NTE3OTkwN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jZGU5OTk5ODg0ZTg0YWRiOTViNGYyYmIzYTU0NzZjMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDEzOTUwNzUyNjg2NGYzOGEzMDNjZTIyMGEwYjA5Y2EgPSAkKGA8ZGl2IGlkPSJodG1sX2QxMzk1MDc1MjY4NjRmMzhhMzAzY2UyMjBhMGIwOWNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TY29vdGVyJiMzOTtzIENvZmZlZWhvdXNlIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfY2RlOTk5OTg4NGU4NGFkYjk1YjRmMmJiM2E1NDc2YzAuc2V0Q29udGVudChodG1sX2QxMzk1MDc1MjY4NjRmMzhhMzAzY2UyMjBhMGIwOWNhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83NjcyMTQ1NTAxNGY0YmI2OTQwYmM5MGM2ZDE1MDI1Ny5iaW5kUG9wdXAocG9wdXBfY2RlOTk5OTg4NGU4NGFkYjk1YjRmMmJiM2E1NDc2YzApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3ZWZkNjIyM2U3NjQwOTk4NGE4NWFjYzUwMTVjNmJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODU1MTkzNDg2OTUzOTksIC05Ni42ODEwNTAxNTEyNDgzNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83ZTA4NTY1M2RmMDg0OThkOTg5ZTAzMTQ1YTBiMTFkMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMWE0YWNiNTMyZDlkNDJkMTg4MzE3ZDYzMjFiNzQxYjggPSAkKGA8ZGl2IGlkPSJodG1sXzFhNGFjYjUzMmQ5ZDQyZDE4ODMxN2Q2MzIxYjc0MWI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KdWljZSBTdG9wIChKdWljZSBCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzdlMDg1NjUzZGYwODQ5OGQ5ODllMDMxNDVhMGIxMWQzLnNldENvbnRlbnQoaHRtbF8xYTRhY2I1MzJkOWQ0MmQxODgzMTdkNjMyMWI3NDFiOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjdlZmQ2MjIzZTc2NDA5OTg0YTg1YWNjNTAxNWM2YmQuYmluZFBvcHVwKHBvcHVwXzdlMDg1NjUzZGYwODQ5OGQ5ODllMDMxNDVhMGIxMWQzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzU4MDUyNGUwZTI0MjdiYTQ0NzY4NGNiZWY0ZmNmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyOTM2MDg1LCAtOTYuNjA4MzA3NzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMDZkOTMwMTAzZGUyNDQ2Y2JiYmI3MDIwNGNkYjczZTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QxYWM4ZGEwZDVlMDQ1NjhhMWE1ZDU2MTRlMGYxZDVjID0gJChgPGRpdiBpZD0iaHRtbF9kMWFjOGRhMGQ1ZTA0NTY4YTFhNWQ1NjE0ZTBmMWQ1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SHktVmVlIChHcm9jZXJ5IFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wNmQ5MzAxMDNkZTI0NDZjYmJiYjcwMjA0Y2RiNzNlMy5zZXRDb250ZW50KGh0bWxfZDFhYzhkYTBkNWUwNDU2OGExYTVkNTYxNGUwZjFkNWMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2NjNTgwNTI0ZTBlMjQyN2JhNDQ3Njg0Y2JlZjRmY2ZiLmJpbmRQb3B1cChwb3B1cF8wNmQ5MzAxMDNkZTI0NDZjYmJiYjcwMjA0Y2RiNzNlMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGEyNjM3ZTFiZWUwNDFkMjk2YjkyMTYzMWZiMTMxN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTQ2NjcsIC05Ni42NDI0NjFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjA0NjIyN2FlMGE3NDAwM2FiZGZkOWIwMzM2ODI4ZWIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzJjNGM5OWZkNmFjZDQ4OWJiOWIzNDA1NjIwYTVlYjI4ID0gJChgPGRpdiBpZD0iaHRtbF8yYzRjOTlmZDZhY2Q0ODliYjliMzQwNTYyMGE1ZWIyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGFmZm9kaWwgTWVkaXRlcnJhbmVhbiBDdWlzaW5lIGFuZCBDYXRlcmluZyAoTWVkaXRlcnJhbmVhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yMDQ2MjI3YWUwYTc0MDAzYWJkZmQ5YjAzMzY4MjhlYi5zZXRDb250ZW50KGh0bWxfMmM0Yzk5ZmQ2YWNkNDg5YmI5YjM0MDU2MjBhNWViMjgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzBhMjYzN2UxYmVlMDQxZDI5NmI5MjE2MzFmYjEzMTdiLmJpbmRQb3B1cChwb3B1cF8yMDQ2MjI3YWUwYTc0MDAzYWJkZmQ5YjAzMzY4MjhlYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkzZDE4YjVjZTA4NDg1MGEzMWU5NzUzYmY0NGZlYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTY2NTQsIC05Ni42NTMxNDRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTk1NzgyMDJkY2QxNDc5NWFjYzgyNGJhZjVkZWQxNmUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzEwNTVmMGYyYWUzNTRkMDNhYjRiZmMxN2E5YzdiZWFkID0gJChgPGRpdiBpZD0iaHRtbF8xMDU1ZjBmMmFlMzU0ZDAzYWI0YmZjMTdhOWM3YmVhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIERvdWdobnV0IEhvbGUgKERvbnV0IFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE5NTc4MjAyZGNkMTQ3OTVhY2M4MjRiYWY1ZGVkMTZlLnNldENvbnRlbnQoaHRtbF8xMDU1ZjBmMmFlMzU0ZDAzYWI0YmZjMTdhOWM3YmVhZCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMzkzZDE4YjVjZTA4NDg1MGEzMWU5NzUzYmY0NGZlYzguYmluZFBvcHVwKHBvcHVwXzE5NTc4MjAyZGNkMTQ3OTVhY2M4MjRiYWY1ZGVkMTZlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjE3N2EwMzUyZWI0ZThhYmE5NGJjZDQwZTM5YzNiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MDA3NzQ3NTIzMDY1LCAtOTYuNjUzODk2MzU0NTU0MThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTVjMGUyNGY2NmFhNGVlMDg3MTk2ZjcxOGNkZjI1NmIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkxMjRhNGM3YjRjMjRmZGY5OGIwYmQwNzlhMGEyODhhID0gJChgPGRpdiBpZD0iaHRtbF85MTI0YTRjN2I0YzI0ZmRmOThiMGJkMDc5YTBhMjg4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFNYXImIzM5O3MgRG9udXRzIGFuZCBDb2ZmZWUgKERvbnV0IFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E1YzBlMjRmNjZhYTRlZTA4NzE5NmY3MThjZGYyNTZiLnNldENvbnRlbnQoaHRtbF85MTI0YTRjN2I0YzI0ZmRmOThiMGJkMDc5YTBhMjg4YSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYjIxNzdhMDM1MmViNGU4YWJhOTRiY2Q0MGUzOWMzYmUuYmluZFBvcHVwKHBvcHVwX2E1YzBlMjRmNjZhYTRlZTA4NzE5NmY3MThjZGYyNTZiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmEyZTMyYTM5M2M0NTkxYmE5YzViNTU3OTA2N2JjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MjQwOCwgLTk2LjY2NjcwN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lY2I5YmY0NjgwMzU0NTAxOGQ4MGU3MGYzMTNkNGEzOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODg3NmM2M2IyMjM0NGFlMWI2N2RlNGJjMWM2MTNkN2EgPSAkKGA8ZGl2IGlkPSJodG1sXzg4NzZjNjNiMjIzNDRhZTFiNjdkZTRiYzFjNjEzZDdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IeS1WZWUgKEdyb2NlcnkgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2VjYjliZjQ2ODAzNTQ1MDE4ZDgwZTcwZjMxM2Q0YTM4LnNldENvbnRlbnQoaHRtbF84ODc2YzYzYjIyMzQ0YWUxYjY3ZGU0YmMxYzYxM2Q3YSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMmZhMmUzMmEzOTNjNDU5MWJhOWM1YjU1NzkwNjdiY2YuYmluZFBvcHVwKHBvcHVwX2VjYjliZjQ2ODAzNTQ1MDE4ZDgwZTcwZjMxM2Q0YTM4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YjllZDY3ZDdkNjM0ZDY4YWU5YTdjMDY0YTAzODg0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyNjczNzAyMDczNDYsIC05Ni42MDY1MjU0NTk4MjQ4NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xNzg0Yjg3MTBjMDA0ZTU1YmM3YTQyYmJkM2E4ZjQwMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmVhMTc4MDZmMzU1NGIyODg0NjJlZmUwNmEwN2M5ZGUgPSAkKGA8ZGl2IGlkPSJodG1sXzJlYTE3ODA2ZjM1NTRiMjg4NDYyZWZlMDZhMDdjOWRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SdW56YSAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE3ODRiODcxMGMwMDRlNTViYzdhNDJiYmQzYThmNDAwLnNldENvbnRlbnQoaHRtbF8yZWExNzgwNmYzNTU0YjI4ODQ2MmVmZTA2YTA3YzlkZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNWI5ZWQ2N2Q3ZDYzNGQ2OGFlOWE3YzA2NGEwMzg4NDguYmluZFBvcHVwKHBvcHVwXzE3ODRiODcxMGMwMDRlNTViYzdhNDJiYmQzYThmNDAwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjc4N2FjZjZmNDE0YTE2OGVhYjQ2ZDVhMDk0MjQwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTkzNTU3NjA2NDIzLCAtOTYuNzA2NTI2NTAxNDk0OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yZmMwMzYxYWM3YTQ0N2VkYTI1NmU2ODQ5NTc2NGJkMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMGYxNWVhYzMwZDE4NDRmNTgxNDE5ZmI2NDIxZjc1YWMgPSAkKGA8ZGl2IGlkPSJodG1sXzBmMTVlYWMzMGQxODQ0ZjU4MTQxOWZiNjQyMWY3NWFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaG9ndW4gKFN1c2hpIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzJmYzAzNjFhYzdhNDQ3ZWRhMjU2ZTY4NDk1NzY0YmQzLnNldENvbnRlbnQoaHRtbF8wZjE1ZWFjMzBkMTg0NGY1ODE0MTlmYjY0MjFmNzVhYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMTY3ODdhY2Y2ZjQxNGExNjhlYWI0NmQ1YTA5NDI0MDguYmluZFBvcHVwKHBvcHVwXzJmYzAzNjFhYzdhNDQ3ZWRhMjU2ZTY4NDk1NzY0YmQzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjMxNWY0NWI2NTI0ZDc1OWE1ZWZiMmZkNzIyMjNjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzMxMjY4NDI5OTA1NiwgLTk2LjY3OTU2NjY3Mzg4M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xOTI2ZjcxNGM5OTk0NDAxYmE5ODNmMWU1Yzc1ODJlZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTM1ZWJmZGU1YTJiNDAwZDkxY2VjOWIwMjI2NWE3NzggPSAkKGA8ZGl2IGlkPSJodG1sXzEzNWViZmRlNWEyYjQwMGQ5MWNlYzliMDIyNjVhNzc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbGQgQ2hpY2FnbyAoUGl6emEgUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE5MjZmNzE0Yzk5OTQ0MDFiYTk4M2YxZTVjNzU4MmVkLnNldENvbnRlbnQoaHRtbF8xMzVlYmZkZTVhMmI0MDBkOTFjZWM5YjAyMjY1YTc3OCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZDYzMTVmNDViNjUyNGQ3NTlhNWVmYjJmZDcyMjIzY2YuYmluZFBvcHVwKHBvcHVwXzE5MjZmNzE0Yzk5OTQ0MDFiYTk4M2YxZTVjNzU4MmVkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMWY4NDYxZjQ2MmI0OGZmOTRlZThmNjFlNTYwMjBiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MTM4LCAtOTYuNjc0MzZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmFhYjVkZGE4YzQzNGJlNWIyMWQ5NGFiODIyMmRlYmMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2RmYTRmMTY1MTY1MDQzZTE5NzRiODQyMDQ2NDI4MzZiID0gJChgPGRpdiBpZD0iaHRtbF9kZmE0ZjE2NTE2NTA0M2UxOTc0Yjg0MjA0NjQyODM2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFjaWVuZGEgUmVhbCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mYWFiNWRkYThjNDM0YmU1YjIxZDk0YWI4MjIyZGViYy5zZXRDb250ZW50KGh0bWxfZGZhNGYxNjUxNjUwNDNlMTk3NGI4NDIwNDY0MjgzNmIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzMxZjg0NjFmNDYyYjQ4ZmY5NGVlOGY2MWU1NjAyMGJiLmJpbmRQb3B1cChwb3B1cF9mYWFiNWRkYThjNDM0YmU1YjIxZDk0YWI4MjIyZGViYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZkZmRmM2ZjMDVjNDc2ZWIxODllNzQwNWJjODJkNWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzMwMzI0MzQ1NDQyNTUsIC05Ni42NTQzMDM3MzU0NDg2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQyZDRmNGRmNmQxNzQ4NGI4ZWE1MjE5NTllOTU4NzM4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84OWI1NTk4M2FhNGU0MWY5ODRhZmU2NzU3MGRhZmNhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfODliNTU5ODNhYTRlNDFmOTg0YWZlNjc1NzBkYWZjYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdvbGRlbnJvZCBQYXN0cmllcyAoQmFrZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80MmQ0ZjRkZjZkMTc0ODRiOGVhNTIxOTU5ZTk1ODczOC5zZXRDb250ZW50KGh0bWxfODliNTU5ODNhYTRlNDFmOTg0YWZlNjc1NzBkYWZjYTUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzNmZGZkZjNmYzA1YzQ3NmViMTg5ZTc0MDViYzgyZDVlLmJpbmRQb3B1cChwb3B1cF80MmQ0ZjRkZjZkMTc0ODRiOGVhNTIxOTU5ZTk1ODczOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc2M2Y5OTc4Y2E5NDkyM2JkMTBmMWY2NTZjZWYwMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTU5NzY0MjY0NjA1MzUsIC05Ni42OTg2MDYxOTgwODI2M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yMjJkNDQ4ZGEzOTA0ODllYTVmMzRmNjUzY2YyZTQ1OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGMyY2MyZDA0MjIzNGU5MGIzZmZkNTcwY2Y2MmUyNjMgPSAkKGA8ZGl2IGlkPSJodG1sXzRjMmNjMmQwNDIyMzRlOTBiM2ZmZDU3MGNmNjJlMjYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGVlc2VzdGVhayBHcmlsbGUgKFNhbmR3aWNoIFBsYWNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yMjJkNDQ4ZGEzOTA0ODllYTVmMzRmNjUzY2YyZTQ1OS5zZXRDb250ZW50KGh0bWxfNGMyY2MyZDA0MjIzNGU5MGIzZmZkNTcwY2Y2MmUyNjMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2M3NjNmOTk3OGNhOTQ5MjNiZDEwZjFmNjU2Y2VmMDMwLmJpbmRQb3B1cChwb3B1cF8yMjJkNDQ4ZGEzOTA0ODllYTVmMzRmNjUzY2YyZTQ1OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmMxMTY3MTU5YTUwNDEzZWFjMjk0ZjM3YmZjNTBjYzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE1NDg1MSwgLTk2LjcwMjE3MDkzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ4M2E3YWU1YjFkNzRhZjY4MWRkZTcyYTc3MmFiNzkwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNzZjN2MxZDY3MzE0MzVmOGRmYjQ0YTRjMTY4ODI2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjc2YzdjMWQ2NzMxNDM1ZjhkZmI0NGE0YzE2ODgyNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvb3BlciBZTUNBIChHeW0gLyBGaXRuZXNzIENlbnRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDgzYTdhZTViMWQ3NGFmNjgxZGRlNzJhNzcyYWI3OTAuc2V0Q29udGVudChodG1sX2I3NmM3YzFkNjczMTQzNWY4ZGZiNDRhNGMxNjg4MjY4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yYzExNjcxNTlhNTA0MTNlYWMyOTRmMzdiZmM1MGNjMC5iaW5kUG9wdXAocG9wdXBfNDgzYTdhZTViMWQ3NGFmNjgxZGRlNzJhNzcyYWI3OTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5MzZiNDkxOTI0MjQ1Zjc4N2I1ZWQyOTY4YTNmOGM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU2NjU0LCAtOTYuNjUzMTQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2RkYTM5MjNiNGFlNTRhMTBhOGMxNDBhNTE3NWZiYzMyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81NTgzZDMzZWI4YWY0NzQ2ODg5NGI5YzQ5YzUxNDVkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTU4M2QzM2ViOGFmNDc0Njg4OTRiOWM0OWM1MTQ1ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpZ2ggU29jaWV0eSBDaGVlc2VjYWtlICZhbXA7IEJpc3RybyAoTmV3IEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2RkYTM5MjNiNGFlNTRhMTBhOGMxNDBhNTE3NWZiYzMyLnNldENvbnRlbnQoaHRtbF81NTgzZDMzZWI4YWY0NzQ2ODg5NGI5YzQ5YzUxNDVkYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZDkzNmI0OTE5MjQyNDVmNzg3YjVlZDI5NjhhM2Y4YzcuYmluZFBvcHVwKHBvcHVwX2RkYTM5MjNiNGFlNTRhMTBhOGMxNDBhNTE3NWZiYzMyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDRmOWY1YTVkZmQ0MWQ0OTQ4N2EyNzdkYmRjMTNkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NjgzOTAwOTg3NjY0NiwgLTk2Ljc2MDc0NjEwOTAxODhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGQ3MWI2ZDk3MTEzNDBiMWFmZWNkYmQ4YTA4MmI5NTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkyNTY0ZWMwYTQ2YjQ5Y2Q4NDA3YjNlNzI2NDE2OWQ3ID0gJChgPGRpdiBpZD0iaHRtbF85MjU2NGVjMGE0NmI0OWNkODQwN2IzZTcyNjQxNjlkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGluZXdvb2QgQm93bCAoUGVyZm9ybWluZyBBcnRzIFZlbnVlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kZDcxYjZkOTcxMTM0MGIxYWZlY2RiZDhhMDgyYjk1My5zZXRDb250ZW50KGh0bWxfOTI1NjRlYzBhNDZiNDljZDg0MDdiM2U3MjY0MTY5ZDcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2Q0NGY5ZjVhNWRmZDQxZDQ5NDg3YTI3N2RiZGMxM2RjLmJpbmRQb3B1cChwb3B1cF9kZDcxYjZkOTcxMTM0MGIxYWZlY2RiZDhhMDgyYjk1MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM1OGI3YTFmNDE2NDZjNjlhODc1MDE2YzM3NWRkYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTQ4NzI1ODA1NTg2OSwgLTk2LjY2ODYwOTk3Njc2ODVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNDljZWZmYWViNTI5NGE0YzkzNWQxZmEwZTM5MWM2M2YgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRmYzg3MTVhNDM0NTQ2MTNiNTQ2NzUxYmJmZmQyMjg4ID0gJChgPGRpdiBpZD0iaHRtbF80ZmM4NzE1YTQzNDU0NjEzYjU0Njc1MWJiZmZkMjI4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FsZ3JlZW5zIChQaGFybWFjeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDljZWZmYWViNTI5NGE0YzkzNWQxZmEwZTM5MWM2M2Yuc2V0Q29udGVudChodG1sXzRmYzg3MTVhNDM0NTQ2MTNiNTQ2NzUxYmJmZmQyMjg4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lYzU4YjdhMWY0MTY0NmM2OWE4NzUwMTZjMzc1ZGRiMy5iaW5kUG9wdXAocG9wdXBfNDljZWZmYWViNTI5NGE0YzkzNWQxZmEwZTM5MWM2M2YpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlYjFmYmU3YjAwYTRmZmZiMGQwYjgxNzI1MjJmNTIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyNjY0MTI2NDA2OTcsIC05Ni42NzcxMDQ3NDMwODgzNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80NzBmODgzMTYzZmI0ZWY2OTRlYWU5NDhkM2I5ZDgxNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjE5MjJkOTFmOTkyNDg2NGFkOTQ4NGZiZDVmYjQzZDQgPSAkKGA8ZGl2IGlkPSJodG1sX2IxOTIyZDkxZjk5MjQ4NjRhZDk0ODRmYmQ1ZmI0M2Q0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TY2hlZWxzIChTcG9ydGluZyBHb29kcyBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NzBmODgzMTYzZmI0ZWY2OTRlYWU5NDhkM2I5ZDgxNC5zZXRDb250ZW50KGh0bWxfYjE5MjJkOTFmOTkyNDg2NGFkOTQ4NGZiZDVmYjQzZDQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2JlYjFmYmU3YjAwYTRmZmZiMGQwYjgxNzI1MjJmNTIwLmJpbmRQb3B1cChwb3B1cF80NzBmODgzMTYzZmI0ZWY2OTRlYWU5NDhkM2I5ZDgxNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM2ODAzNGZiNGVjNDJhZjliMDQ4ZWI1NDAwMDI0MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzE2MDcwMDk4MTY1NiwgLTk2LjYyMzAwODUzMzkyMDUzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2IyOTUzNzg3NjdkMjQ2ZjM4YmQ4ZmMxZWU1M2QzY2NkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mYzQ0MDE0NjNjNTY0MjkwYTU1ODA0N2JjM2ExOWJjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmM0NDAxNDYzYzU2NDI5MGE1NTgwNDdiYzNhMTliYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBPdmVuIEVhc3QgKEluZGlhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iMjk1Mzc4NzY3ZDI0NmYzOGJkOGZjMWVlNTNkM2NjZC5zZXRDb250ZW50KGh0bWxfZmM0NDAxNDYzYzU2NDI5MGE1NTgwNDdiYzNhMTliYzYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzEzNjgwMzRmYjRlYzQyYWY5YjA0OGViNTQwMDAyNDExLmJpbmRQb3B1cChwb3B1cF9iMjk1Mzc4NzY3ZDI0NmYzOGJkOGZjMWVlNTNkM2NjZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY2ZDNlNDZlYjkwNDU2ZWE2OGQzZGQ0YmM1MzY2NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NzIzODk5OTIyNzI3MTYsIC05Ni42NzU0NDkwMjM4ODg2OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iZDU0M2JjYWM0NTA0MGQxOTAxMTM1YTI5ZjAyNGJhOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNmUwOTIzOWJiODFkNDQ1NTk4ZjM0NDQyY2ViNGYyOGYgPSAkKGA8ZGl2IGlkPSJodG1sXzZlMDkyMzliYjgxZDQ0NTU5OGYzNDQ0MmNlYjRmMjhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QbGFuZXQgRml0bmVzcyAoR3ltIC8gRml0bmVzcyBDZW50ZXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JkNTQzYmNhYzQ1MDQwZDE5MDExMzVhMjlmMDI0YmE4LnNldENvbnRlbnQoaHRtbF82ZTA5MjM5YmI4MWQ0NDU1OThmMzQ0NDJjZWI0ZjI4Zik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMWY2ZDNlNDZlYjkwNDU2ZWE2OGQzZGQ0YmM1MzY2NmIuYmluZFBvcHVwKHBvcHVwX2JkNTQzYmNhYzQ1MDQwZDE5MDExMzVhMjlmMDI0YmE4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjZmOGU0ZmVhMmY0ZDM2OTAxYWY3YzBhYmJhNDIxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3NzUyODg3MjI1NTM1NCwgLTk2LjcyNzMxNDQzMjc0ODA2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZhZmQxMjg5YjhlZTQ5ZDFhMjA1OWIwMDI5MGVkOGY0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hOGE0MWFmM2IyYzk0MjlhYmRjMTUxNjY5NDdkNTMxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYThhNDFhZjNiMmM5NDI5YWJkYzE1MTY2OTQ3ZDUzMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvYXN0IChEZWxpIC8gQm9kZWdhKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mYWZkMTI4OWI4ZWU0OWQxYTIwNTliMDAyOTBlZDhmNC5zZXRDb250ZW50KGh0bWxfYThhNDFhZjNiMmM5NDI5YWJkYzE1MTY2OTQ3ZDUzMTApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzFmNmY4ZTRmZWEyZjRkMzY5MDFhZjdjMGFiYmE0MjE2LmJpbmRQb3B1cChwb3B1cF9mYWZkMTI4OWI4ZWU0OWQxYTIwNTliMDAyOTBlZDhmNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTIxZTQzYTQyZWY2NGFiNGJmZGFiYzE0YTI4NmY0NGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDgzNjM1Mzg4MTQ3NSwgLTk2LjYwNjA3NzMyODgzNDQzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MzNmM1MmQ1MWRlZTQ0MWE4MDgyZjMyYzUyYjEwY2Q0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMThjYzI4MTA5MzY0YWQzYTAxM2RkNTUyMjY2NzA3NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzE4Y2MyODEwOTM2NGFkM2EwMTNkZDU1MjI2NjcwNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vUGFjIFRyYWlsIChUcmFpbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzM2YzUyZDUxZGVlNDQxYTgwODJmMzJjNTJiMTBjZDQuc2V0Q29udGVudChodG1sX2MxOGNjMjgxMDkzNjRhZDNhMDEzZGQ1NTIyNjY3MDc0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMjFlNDNhNDJlZjY0YWI0YmZkYWJjMTRhMjg2ZjQ0ZS5iaW5kUG9wdXAocG9wdXBfYzM2YzUyZDUxZGVlNDQxYTgwODJmMzJjNTJiMTBjZDQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViMjIzYjVjZDhkODRlNmZiNTNiYzczMWMzODQyNTI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU3OTgwMzQ2Njc5NjksIC05Ni42NTM4OTI1MTcwODk4NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lNDkxNDVkZWQwZjI0N2MwYjVmNjQ5MTZmOTU4MjlkMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMWE3MjBiNjNiM2NiNDZlNGE5ZDgyZjY1YTdkYjYyNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzFhNzIwYjYzYjNjYjQ2ZTRhOWQ4MmY2NWE3ZGI2MjU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaWNrb3J5IFJvYWQgQkJRICZhbXA7IENhdGVyaW5nIENvLiAoQkJRIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lNDkxNDVkZWQwZjI0N2MwYjVmNjQ5MTZmOTU4MjlkMS5zZXRDb250ZW50KGh0bWxfMWE3MjBiNjNiM2NiNDZlNGE5ZDgyZjY1YTdkYjYyNTQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzViMjIzYjVjZDhkODRlNmZiNTNiYzczMWMzODQyNTI0LmJpbmRQb3B1cChwb3B1cF9lNDkxNDVkZWQwZjI0N2MwYjVmNjQ5MTZmOTU4MjlkMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2UwMGJhMzZiZTM0NDNkYmFiYjVlMmVjNGFhMGU1Y2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTc5NTM5MDYxMzI3MDUsIC05Ni42MjU5NDQwNDc3NzgxOV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80YjFhZmIyZjMwYWU0YWEwYTkwMjdlYWMzMWUxNWVjZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfM2RkNGIzYWE1M2MyNGQyYThhMGM1ZmE4MjdiOTY3ZjggPSAkKGA8ZGl2IGlkPSJodG1sXzNkZDRiM2FhNTNjMjRkMmE4YTBjNWZhODI3Yjk2N2Y4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmF0YSBCYXIgJmFtcDsgTG91bmdlIChCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzRiMWFmYjJmMzBhZTRhYTBhOTAyN2VhYzMxZTE1ZWNlLnNldENvbnRlbnQoaHRtbF8zZGQ0YjNhYTUzYzI0ZDJhOGEwYzVmYTgyN2I5NjdmOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfM2UwMGJhMzZiZTM0NDNkYmFiYjVlMmVjNGFhMGU1Y2IuYmluZFBvcHVwKHBvcHVwXzRiMWFmYjJmMzBhZTRhYTBhOTAyN2VhYzMxZTE1ZWNlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjlmNzNjMWEwOGE0NTRmOGUyOGRiNDA1MTMyZTMwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMzc0NDI3MDY0OTk2LCAtOTYuNjI2OTc5NDEwNjQ4MzVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODAzMDRkNGQ2ZDkzNDcxNjkxNGQ4NWM5MWY2MjAzZGQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JhMmFiMmFmOGRhMjQyODJiMmZkY2JiMDIxMDhmOTFlID0gJChgPGRpdiBpZD0iaHRtbF9iYTJhYjJhZjhkYTI0MjgyYjJmZGNiYjAyMTA4ZjkxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnVmZmFsbyBXaW5ncyAmYW1wOyBSaW5ncyAoUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODAzMDRkNGQ2ZDkzNDcxNjkxNGQ4NWM5MWY2MjAzZGQuc2V0Q29udGVudChodG1sX2JhMmFiMmFmOGRhMjQyODJiMmZkY2JiMDIxMDhmOTFlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lYjlmNzNjMWEwOGE0NTRmOGUyOGRiNDA1MTMyZTMwNC5iaW5kUG9wdXAocG9wdXBfODAzMDRkNGQ2ZDkzNDcxNjkxNGQ4NWM5MWY2MjAzZGQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3YWI3ODk4YWQyYzQ3MzhhMDJjOWU4ODc0MjA5MDI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0MjY5MTA1Mzg1NzQsIC05Ni42ODQzMDU4OTE4ODUzOV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81Nzg0ODNjNmZkZTQ0OGUyYTgxYzc2MmRmZjkzZmUxYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZWFkMjE5ZmU4Y2M0NGVlOWIzZGYyNWI0ODZmYzlhMTQgPSAkKGA8ZGl2IGlkPSJodG1sX2VhZDIxOWZlOGNjNDRlZTliM2RmMjViNDg2ZmM5YTE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CcnlhbiBMaWZlcG9pbnRlIC0gRml0bmVzcyAoR3ltKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81Nzg0ODNjNmZkZTQ0OGUyYTgxYzc2MmRmZjkzZmUxYS5zZXRDb250ZW50KGh0bWxfZWFkMjE5ZmU4Y2M0NGVlOWIzZGYyNWI0ODZmYzlhMTQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2E3YWI3ODk4YWQyYzQ3MzhhMDJjOWU4ODc0MjA5MDI2LmJpbmRQb3B1cChwb3B1cF81Nzg0ODNjNmZkZTQ0OGUyYTgxYzc2MmRmZjkzZmUxYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUzNDFjNzkxYTljNDhiNGIwMGI3ZmFmZWFiMjUyNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzQ1MzgwMzExMjIzMywgLTk2Ljc3NTQwODE2NzQzODE5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzkyMzI3MTA4M2RmZDQxNDRiZWUxZTJlNjQ1ZGNhOGEwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMmEzMGQ4MmViMzE0ODllOTVmZjA5Njg4NGE3YzgzOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJhMzBkODJlYjMxNDg5ZTk1ZmYwOTY4ODRhN2M4MzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpb25lZXJzIFBhcmsgKFBhcmspPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzkyMzI3MTA4M2RmZDQxNDRiZWUxZTJlNjQ1ZGNhOGEwLnNldENvbnRlbnQoaHRtbF9jMmEzMGQ4MmViMzE0ODllOTVmZjA5Njg4NGE3YzgzOSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOWUzNDFjNzkxYTljNDhiNGIwMGI3ZmFmZWFiMjUyNzMuYmluZFBvcHVwKHBvcHVwXzkyMzI3MTA4M2RmZDQxNDRiZWUxZTJlNjQ1ZGNhOGEwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MGI3YTVlYzQ3OTY0OGYyYTMwYWIwYjQ2NGExYjg2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NzY2OSwgLTk2LjYyMjUyM10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84YzM5MmFjYzgzNjI0NGNkODZmMmExMTY1NzQ2ZGIxZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOGQyOTlhZDdhNDMxNGIzMGJkNmZhZDQxMGI1MWU4ZjggPSAkKGA8ZGl2IGlkPSJodG1sXzhkMjk5YWQ3YTQzMTRiMzBiZDZmYWQ0MTBiNTFlOGY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IeS1WZWUgKEdyb2NlcnkgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzhjMzkyYWNjODM2MjQ0Y2Q4NmYyYTExNjU3NDZkYjFkLnNldENvbnRlbnQoaHRtbF84ZDI5OWFkN2E0MzE0YjMwYmQ2ZmFkNDEwYjUxZThmOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTBiN2E1ZWM0Nzk2NDhmMmEzMGFiMGI0NjRhMWI4NjAuYmluZFBvcHVwKHBvcHVwXzhjMzkyYWNjODM2MjQ0Y2Q4NmYyYTExNjU3NDZkYjFkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTc2YWIwOTFlODQ0OWU0YWRjYTgzMGE4YzgzOTRjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDgzNDUwMjk5NDEzLCAtOTYuNjU0ODk1OTE5ODcxMjddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmM0OTNmMjdlZWIzNDFiMjlmZGVmMGQ0MDUzYWZjMGMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzY3OTZiYTk1MmM1ZTRhYmI5ZmJiYmFjODMwNTUyMzcyID0gJChgPGRpdiBpZD0iaHRtbF82Nzk2YmE5NTJjNWU0YWJiOWZiYmJhYzgzMDU1MjM3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGF6emFyaSYjMzk7cyBQaXp6YSAoUGl6emEgUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZjNDkzZjI3ZWViMzQxYjI5ZmRlZjBkNDA1M2FmYzBjLnNldENvbnRlbnQoaHRtbF82Nzk2YmE5NTJjNWU0YWJiOWZiYmJhYzgzMDU1MjM3Mik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNDU3NmFiMDkxZTg0NDllNGFkY2E4MzBhOGM4Mzk0Y2QuYmluZFBvcHVwKHBvcHVwX2ZjNDkzZjI3ZWViMzQxYjI5ZmRlZjBkNDA1M2FmYzBjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMTVhNjliOTkxNTY0MzRmOWQ2YTEwZDhjNjE3ZjE3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDQ0MDcyNDQwNTQ5LCAtOTYuNjAzNDAzMjIyOTAzNzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTAzZTc0YjkxYjk3NGQ1Yzg0ZTg3YzIwMDA2ZmJmNGYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzUzODUwOTBkZTY3NjQyMTk5MDIzNTVhMjEyY2Y3NWQyID0gJChgPGRpdiBpZD0iaHRtbF81Mzg1MDkwZGU2NzY0MjE5OTAyMzU1YTIxMmNmNzVkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmlyZXdvcmtzIFdvb2QgRmlyZWQgR3JpbGwgKE5ldyBBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xMDNlNzRiOTFiOTc0ZDVjODRlODdjMjAwMDZmYmY0Zi5zZXRDb250ZW50KGh0bWxfNTM4NTA5MGRlNjc2NDIxOTkwMjM1NWEyMTJjZjc1ZDIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2YxNWE2OWI5OTE1NjQzNGY5ZDZhMTBkOGM2MTdmMTdjLmJpbmRQb3B1cChwb3B1cF8xMDNlNzRiOTFiOTc0ZDVjODRlODdjMjAwMDZmYmY0ZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQyNmY0YmJlZGIyNGIzOGI2OTY2NDFiZGExMjI4Y2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAyMDYsIC05Ni42MzcxNDRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODE5YmQxMDU1NmRiNDljNjhjNmJmOTcyYzdhZjIyYTcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JiMmI1YjZiOTU0NzQ5NjI5ZTRkMDUzNmNkMDZjNjMxID0gJChgPGRpdiBpZD0iaHRtbF9iYjJiNWI2Yjk1NDc0OTYyOWU0ZDA1MzZjZDA2YzYzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGV4YXMgUm9hZGhvdXNlIChTdGVha2hvdXNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84MTliZDEwNTU2ZGI0OWM2OGM2YmY5NzJjN2FmMjJhNy5zZXRDb250ZW50KGh0bWxfYmIyYjViNmI5NTQ3NDk2MjllNGQwNTM2Y2QwNmM2MzEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzZkMjZmNGJiZWRiMjRiMzhiNjk2NjQxYmRhMTIyOGNiLmJpbmRQb3B1cChwb3B1cF84MTliZDEwNTU2ZGI0OWM2OGM2YmY5NzJjN2FmMjJhNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNiNGVlMmVlYTY5NDY0OWIzZjg1ZWQ4YzBiNTEzMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDMxNTM0Nzk2NjU1MjQsIC05Ni42MTM3Mzk1ODk2ODk3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhlNzRmNjk1ZWM5ZjQ1N2JhMTVkNWNjNWRlZWVkNzBkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hYjRiYmI1MDQ2M2E0ZDkzYmU5M2FkOTIyOWU3NmVhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWI0YmJiNTA0NjNhNGQ5M2JlOTNhZDkyMjllNzZlYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1haG9uZXkgR29sZiBDb3Vyc2UgKEdvbGYgQ291cnNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84ZTc0ZjY5NWVjOWY0NTdiYTE1ZDVjYzVkZWVlZDcwZC5zZXRDb250ZW50KGh0bWxfYWI0YmJiNTA0NjNhNGQ5M2JlOTNhZDkyMjllNzZlYTgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzUzYjRlZTJlZWE2OTQ2NDliM2Y4NWVkOGMwYjUxMzM5LmJpbmRQb3B1cChwb3B1cF84ZTc0ZjY5NWVjOWY0NTdiYTE1ZDVjYzVkZWVlZDcwZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmFlMTkyNWIxNmE0NDlkYWE3ZjI0MzhmYmRkODc3MWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDI4NjE0NjcxOTU5LCAtOTYuNjgwMDIzMjU0Mjc5MzVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjcwN2YxZWJlNGQzNDQyYzgzMjZmM2ViYzk4ZmNhZjUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NkN2M2ZDAzZTRiNjRjNDliYTQwMmY1OTA2ZDY0MTQ3ID0gJChgPGRpdiBpZD0iaHRtbF9jZDdjNmQwM2U0YjY0YzQ5YmE0MDJmNTkwNmQ2NDE0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFybmVzICZhbXA7IE5vYmxlIChCb29rc3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzY3MDdmMWViZTRkMzQ0MmM4MzI2ZjNlYmM5OGZjYWY1LnNldENvbnRlbnQoaHRtbF9jZDdjNmQwM2U0YjY0YzQ5YmE0MDJmNTkwNmQ2NDE0Nyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYmFlMTkyNWIxNmE0NDlkYWE3ZjI0MzhmYmRkODc3MWEuYmluZFBvcHVwKHBvcHVwXzY3MDdmMWViZTRkMzQ0MmM4MzI2ZjNlYmM5OGZjYWY1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTkyNjg5MTcxZDc0MTcwYTdhYTU4MDJhZjEwZmQwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzEyMzgxODkxMDk5LCAtOTYuNjI0ODIxMjE5NjY0ODJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODc2ZWEwYzFkMzBjNGY3MzhkYzNjMWFhY2I0ODI5OWMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JjZjgxZTJlZTg5MTQ5MDViYmE1ZTBiY2E4OTIyN2VjID0gJChgPGRpdiBpZD0iaHRtbF9iY2Y4MWUyZWU4OTE0OTA1YmJhNWUwYmNhODkyMjdlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFN0aWxsIChMaXF1b3IgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzg3NmVhMGMxZDMwYzRmNzM4ZGMzYzFhYWNiNDgyOTljLnNldENvbnRlbnQoaHRtbF9iY2Y4MWUyZWU4OTE0OTA1YmJhNWUwYmNhODkyMjdlYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfY2U5MjY4OTE3MWQ3NDE3MGE3YWE1ODAyYWYxMGZkMDkuYmluZFBvcHVwKHBvcHVwXzg3NmVhMGMxZDMwYzRmNzM4ZGMzYzFhYWNiNDgyOTljKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMWM2NjRlMjM4ZjI0ZDE4ODU1MTZjNmI2ODQ2NGEzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NTA0OTgzOTYxMzg0LCAtOTYuNjQzMzMyMDc3ODUxMjRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMmVmZTlhYTMxZTgyNDhkMzllMzU3OTA3MzhiZTgzNDggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2I3YjBhNTZhNjk2MTRjM2JiOGEyZGVlZTUwNjBhMDMxID0gJChgPGRpdiBpZD0iaHRtbF9iN2IwYTU2YTY5NjE0YzNiYjhhMmRlZWU1MDYwYTAzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SnVpY2UgU3RvcCAoSnVpY2UgQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yZWZlOWFhMzFlODI0OGQzOWUzNTc5MDczOGJlODM0OC5zZXRDb250ZW50KGh0bWxfYjdiMGE1NmE2OTYxNGMzYmI4YTJkZWVlNTA2MGEwMzEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2UxYzY2NGUyMzhmMjRkMTg4NTUxNmM2YjY4NDY0YTMzLmJpbmRQb3B1cChwb3B1cF8yZWZlOWFhMzFlODI0OGQzOWUzNTc5MDczOGJlODM0OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWZjNDQ2Y2U0YzBjNGRkMThjNmE1Y2IzNmZjYzRiNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzk2NzM4MjIzMzU1MDQsIC05Ni42OTcxODQ4OTY4OTgxOF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82ZjhjMjFlMWRmMGU0ZGU3YTE3OGY0MjgzYTk2NjU1ZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjU1MTU5YjQ2NWNlNGE0ZDk1NTk1OThhYTMyM2YxNmQgPSAkKGA8ZGl2IGlkPSJodG1sXzI1NTE1OWI0NjVjZTRhNGQ5NTU5NTk4YWEzMjNmMTZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db3N0Y28gKFdhcmVob3VzZSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNmY4YzIxZTFkZjBlNGRlN2ExNzhmNDI4M2E5NjY1NWQuc2V0Q29udGVudChodG1sXzI1NTE1OWI0NjVjZTRhNGQ5NTU5NTk4YWEzMjNmMTZkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hZmM0NDZjZTRjMGM0ZGQxOGM2YTVjYjM2ZmNjNGI1MS5iaW5kUG9wdXAocG9wdXBfNmY4YzIxZTFkZjBlNGRlN2ExNzhmNDI4M2E5NjY1NWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyYWE1NjVhZjk4ZDQyZDI5NzZlYzgzZTMwOTMwYWViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU3MDQ2ODA5MTM0NjM2LCAtOTYuNzAxMjA1MDM1NTkxNzFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjk4ZTE3MmQyODBjNDRjOWJlYzVmMGExZGEyYzU1Y2MgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzE2OGVmNTU3MGNlZDRmMzliMmZhOTFjMTgzM2VlMjkxID0gJChgPGRpdiBpZD0iaHRtbF8xNjhlZjU1NzBjZWQ0ZjM5YjJmYTkxYzE4MzNlZTI5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2Nvb3RlciYjMzk7cyBDb2ZmZWVob3VzZSAoQ29mZmVlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y5OGUxNzJkMjgwYzQ0YzliZWM1ZjBhMWRhMmM1NWNjLnNldENvbnRlbnQoaHRtbF8xNjhlZjU1NzBjZWQ0ZjM5YjJmYTkxYzE4MzNlZTI5MSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNzJhYTU2NWFmOThkNDJkMjk3NmVjODNlMzA5MzBhZWIuYmluZFBvcHVwKHBvcHVwX2Y5OGUxNzJkMjgwYzQ0YzliZWM1ZjBhMWRhMmM1NWNjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTYwNzNhZjI0Yzc0YzYwYWJiNWYxNjg1YTRhYWU5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1ODI0OTEsIC05Ni42NDAyMDkwOTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jOTFhNjAyMGY2NWE0MmZkODU5MGFiMjhjZTUzZjdkZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDBkY2E3YzVkYjhiNGU2MWE3OGJkMWY3MjAwYjI1OGMgPSAkKGA8ZGl2IGlkPSJodG1sX2QwZGNhN2M1ZGI4YjRlNjFhNzhiZDFmNzIwMGIyNThjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdXBlciBTYXZlciAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzkxYTYwMjBmNjVhNDJmZDg1OTBhYjI4Y2U1M2Y3ZGYuc2V0Q29udGVudChodG1sX2QwZGNhN2M1ZGI4YjRlNjFhNzhiZDFmNzIwMGIyNThjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82NTYwNzNhZjI0Yzc0YzYwYWJiNWYxNjg1YTRhYWU5MS5iaW5kUG9wdXAocG9wdXBfYzkxYTYwMjBmNjVhNDJmZDg1OTBhYjI4Y2U1M2Y3ZGYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyNWQ2MTRhNTYxMDQwYTA4MTk0YmEzZTc5OTU2MTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODU3NTUxMzc0NjQ0OTg0LCAtOTYuNjgxNTM1NTQyMDExMjZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjljYThjMmE3MTUzNDRjMTgyNzU5ODBjMTY2MjkzMDkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA3OTBhODAzYzI1MTQ1YjhiYmViZTczZGEyYjNiMmFlID0gJChgPGRpdiBpZD0iaHRtbF8wNzkwYTgwM2MyNTE0NWI4YmJlYmU3M2RhMmIzYjJhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VsbHMgRmFyZ28gQmFuayAoQmFuayk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjljYThjMmE3MTUzNDRjMTgyNzU5ODBjMTY2MjkzMDkuc2V0Q29udGVudChodG1sXzA3OTBhODAzYzI1MTQ1YjhiYmViZTczZGEyYjNiMmFlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zMjVkNjE0YTU2MTA0MGEwODE5NGJhM2U3OTk1NjE4Mi5iaW5kUG9wdXAocG9wdXBfNjljYThjMmE3MTUzNDRjMTgyNzU5ODBjMTY2MjkzMDkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2ZTIxMTIyYzNlNjQ5YTE5OWI0YzBkODkwNTcxNDc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQwMzAxMzI5NTQzMDcsIC05Ni42NDc5NTExNDg2Nzg5NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85YzMwZGI2MzhlNWQ0NzM1OWI5MGJhOWIzMGIxNTg4ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2Q5MDRjMzYzODU1NGY5MDllNDA3ZmNhMWY5NTAzNjUgPSAkKGA8ZGl2IGlkPSJodG1sXzdkOTA0YzM2Mzg1NTRmOTA5ZTQwN2ZjYTFmOTUwMzY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYWRvbm5hIFByb0FjdGl2ZSBIZWFsdGggJmFtcDsgRml0bmVzcyAoR3ltKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85YzMwZGI2MzhlNWQ0NzM1OWI5MGJhOWIzMGIxNTg4Zi5zZXRDb250ZW50KGh0bWxfN2Q5MDRjMzYzODU1NGY5MDllNDA3ZmNhMWY5NTAzNjUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzc2ZTIxMTIyYzNlNjQ5YTE5OWI0YzBkODkwNTcxNDc4LmJpbmRQb3B1cChwb3B1cF85YzMwZGI2MzhlNWQ0NzM1OWI5MGJhOWIzMGIxNTg4ZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTJjMDFiNWU0NTlhNDgwOGI5NDBmOTI5NDllMDQ5NzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU2OTQ2ODYxMjUwNiwgLTk2LjYzMjE2MDkzNzI3MTVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTk3MDlhNDlkOGNjNGM5YWEyNGFiNmUwMTJlNzA3MTcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzNjZGY5YTlkMTI1YzQ1Yjk4ZDgzNWFhZGJiMzQ0MjcwID0gJChgPGRpdiBpZD0iaHRtbF8zY2RmOWE5ZDEyNWM0NWI5OGQ4MzVhYWRiYjM0NDI3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbWVzIExha2UgR29sZiBDb3Vyc2UgKEdvbGYgQ291cnNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hOTcwOWE0OWQ4Y2M0YzlhYTI0YWI2ZTAxMmU3MDcxNy5zZXRDb250ZW50KGh0bWxfM2NkZjlhOWQxMjVjNDViOThkODM1YWFkYmIzNDQyNzApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2UyYzAxYjVlNDU5YTQ4MDhiOTQwZjkyOTQ5ZTA0OTczLmJpbmRQb3B1cChwb3B1cF9hOTcwOWE0OWQ4Y2M0YzlhYTI0YWI2ZTAxMmU3MDcxNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWEwNjNjOTY1NDE2NDFiNzgwYTczOWUwMTUxNjhlNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzg2NjMsIC05Ni42ODAyMDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODA2MjdlZDAyNGIyNDUxOGJiM2NiMzFmYThiMWU3YmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VlZDI2NDJmZTRhMjRhYjQ4MzAzMGFkMGJjOWZkMWY2ID0gJChgPGRpdiBpZD0iaHRtbF9lZWQyNjQyZmU0YTI0YWI0ODMwMzBhZDBiYzlmZDFmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGV0U21hcnQgKFBldCBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODA2MjdlZDAyNGIyNDUxOGJiM2NiMzFmYThiMWU3YmEuc2V0Q29udGVudChodG1sX2VlZDI2NDJmZTRhMjRhYjQ4MzAzMGFkMGJjOWZkMWY2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hYTA2M2M5NjU0MTY0MWI3ODBhNzM5ZTAxNTE2OGU3Mi5iaW5kUG9wdXAocG9wdXBfODA2MjdlZDAyNGIyNDUxOGJiM2NiMzFmYThiMWU3YmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4ZTFmYmM1OGJiMTQ1OTliOGIwNzVhMGU2YWRmZTFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyNTQ3LCAtOTYuNjc0NzY3N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84MTRiOTY5YTY3ZWI0NDhiOGY3MTVkN2EyNTEzZDE3NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTM1YmZmMTg0ZTZjNGJiYzljOTM1MWQ2MWM5MTQzY2EgPSAkKGA8ZGl2IGlkPSJodG1sXzkzNWJmZjE4NGU2YzRiYmM5YzkzNTFkNjFjOTE0M2NhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbHRhIEJlYXV0eSAoQ29zbWV0aWNzIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzgxNGI5NjlhNjdlYjQ0OGI4ZjcxNWQ3YTI1MTNkMTc3LnNldENvbnRlbnQoaHRtbF85MzViZmYxODRlNmM0YmJjOWM5MzUxZDYxYzkxNDNjYSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMDhlMWZiYzU4YmIxNDU5OWI4YjA3NWEwZTZhZGZlMWEuYmluZFBvcHVwKHBvcHVwXzgxNGI5NjlhNjdlYjQ0OGI4ZjcxNWQ3YTI1MTNkMTc3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iN2NlN2M0ZWEzMGU0NDA0OGU0ODI0ZDBiMGY0ZTkwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg2MzY3OSwgLTk2LjY3OTE5OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wNjA3NWFiMTZkOGQ0OTBiOTAyYjZlZjgxM2M5MzVjZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2ExNGEyMDJlYmUyNGNjZmEyZWVjMWE4NzNkM2Q3OWIgPSAkKGA8ZGl2IGlkPSJodG1sX2NhMTRhMjAyZWJlMjRjY2ZhMmVlYzFhODczZDNkNzliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZXRTbWFydCAoUGV0IFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wNjA3NWFiMTZkOGQ0OTBiOTAyYjZlZjgxM2M5MzVjZi5zZXRDb250ZW50KGh0bWxfY2ExNGEyMDJlYmUyNGNjZmEyZWVjMWE4NzNkM2Q3OWIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2I3Y2U3YzRlYTMwZTQ0MDQ4ZTQ4MjRkMGIwZjRlOTBhLmJpbmRQb3B1cChwb3B1cF8wNjA3NWFiMTZkOGQ0OTBiOTAyYjZlZjgxM2M5MzVjZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM0OTlmMzU3ZGI1NGExMGE0MzU5M2FlZTY4MmUxZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTY1ODU4NjU1MDcyNywgLTk2LjY2NDIxMDg2Mjg4NzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTRjYWYwNDk4MTFjNDk1NWE4MmYxNjllYmMxYzlkODcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzMyY2NlNzM5NmIzYjRjMjE5MDVkOWEyZjNjYmQwZjg2ID0gJChgPGRpdiBpZD0iaHRtbF8zMmNjZTczOTZiM2I0YzIxOTA1ZDlhMmYzY2JkMGY4NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hpbmEgSG91c2UgKENoaW5lc2UgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTRjYWYwNDk4MTFjNDk1NWE4MmYxNjllYmMxYzlkODcuc2V0Q29udGVudChodG1sXzMyY2NlNzM5NmIzYjRjMjE5MDVkOWEyZjNjYmQwZjg2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83MzQ5OWYzNTdkYjU0YTEwYTQzNTkzYWVlNjgyZTFmMS5iaW5kUG9wdXAocG9wdXBfMTRjYWYwNDk4MTFjNDk1NWE4MmYxNjllYmMxYzlkODcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzMDVmYzNkNWNmMDQwM2FhYWIyN2U4NjM1M2FmYTk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQ0MzIxMTc4MTQwMjM0LCAtOTYuNzM2MjkyODM5MDUwM10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84NmUzYTQyM2NjNmY0ZDI4ODk3ZGY5MzE2YTJkYjViYiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNWM0YTlmYTc0M2EyNDRhZjk0NjE0MWM0ZDJlZjhlMjQgPSAkKGA8ZGl2IGlkPSJodG1sXzVjNGE5ZmE3NDNhMjQ0YWY5NDYxNDFjNGQyZWY4ZTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYW1wdG9uIElubiBieSBIaWx0b24gKEhvdGVsKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NmUzYTQyM2NjNmY0ZDI4ODk3ZGY5MzE2YTJkYjViYi5zZXRDb250ZW50KGh0bWxfNWM0YTlmYTc0M2EyNDRhZjk0NjE0MWM0ZDJlZjhlMjQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2UzMDVmYzNkNWNmMDQwM2FhYWIyN2U4NjM1M2FmYTk5LmJpbmRQb3B1cChwb3B1cF84NmUzYTQyM2NjNmY0ZDI4ODk3ZGY5MzE2YTJkYjViYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODFhNTRkNmYwOTZmNGUyNzk4ZmRkNjE5NGFmMmVlZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTMxMTQ2MzkwOTgyMTQsIC05Ni42NDE0NjU0OTMwNTY1Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wMjhjOWJiZjE3YmE0ODA0OWI1OWVjOTJiYThlN2M3ZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODcxODA3MTRlYmZlNDI3OGI1ODk1OGRkZDY5YzQzZDkgPSAkKGA8ZGl2IGlkPSJodG1sXzg3MTgwNzE0ZWJmZTQyNzhiNTg5NThkZGQ2OWM0M2Q5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYWlzaW5nIENhbmUmIzM5O3MgQ2hpY2tlbiBGaW5nZXJzIChGcmllZCBDaGlja2VuIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wMjhjOWJiZjE3YmE0ODA0OWI1OWVjOTJiYThlN2M3ZS5zZXRDb250ZW50KGh0bWxfODcxODA3MTRlYmZlNDI3OGI1ODk1OGRkZDY5YzQzZDkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzgxYTU0ZDZmMDk2ZjRlMjc5OGZkZDYxOTRhZjJlZWRhLmJpbmRQb3B1cChwb3B1cF8wMjhjOWJiZjE3YmE0ODA0OWI1OWVjOTJiYThlN2M3ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWU0MmY3Mzg2MWE4NDMwNmIxYzg1Njg0MDI0MzFmZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjYyMTY0Nzk1ODU2OCwgLTk2LjY3NjcwNzU5MDg0NDY5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzFkZjMyNTUzNTZkNDQwNDk4OWQ4YTI1ZmQ3OGVkZjU4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zZjNkNmY1YTAzNzg0MGU0YjMyMzQ4OWY2MGI0NTVjYyA9ICQoYDxkaXYgaWQ9Imh0bWxfM2YzZDZmNWEwMzc4NDBlNGIzMjM0ODlmNjBiNDU1Y2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyZWRkeSYjMzk7cyBTdGVha2J1cmdlcnMgKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWRmMzI1NTM1NmQ0NDA0OTg5ZDhhMjVmZDc4ZWRmNTguc2V0Q29udGVudChodG1sXzNmM2Q2ZjVhMDM3ODQwZTRiMzIzNDg5ZjYwYjQ1NWNjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hZTQyZjczODYxYTg0MzA2YjFjODU2ODQwMjQzMWZmMS5iaW5kUG9wdXAocG9wdXBfMWRmMzI1NTM1NmQ0NDA0OTg5ZDhhMjVmZDc4ZWRmNTgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiMjFkOGEyY2VlNDRjNGRiYzFhOTdlZDZmYjcxODNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0OTEwNDY0Mjc0MjIsIC05Ni42NDI5MTQzNjYxMzYzMl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80OTJiMDdjMmMwZTQ0NDA3ODVhNjBlZWRjM2Q0OTM3MiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZGQ4NjAzNDNkMjc3NDE4OWEwYjI1ZDU2N2QwMDAzNmEgPSAkKGA8ZGl2IGlkPSJodG1sX2RkODYwMzQzZDI3NzQxODlhMGIyNWQ1NjdkMDAwMzZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DdXBjYWtlcyAmYW1wOyBNb3Jl4oCmIChDdXBjYWtlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQ5MmIwN2MyYzBlNDQ0MDc4NWE2MGVlZGMzZDQ5MzcyLnNldENvbnRlbnQoaHRtbF9kZDg2MDM0M2QyNzc0MTg5YTBiMjVkNTY3ZDAwMDM2YSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfY2IyMWQ4YTJjZWU0NGM0ZGJjMWE5N2VkNmZiNzE4M2EuYmluZFBvcHVwKHBvcHVwXzQ5MmIwN2MyYzBlNDQ0MDc4NWE2MGVlZGMzZDQ5MzcyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjFiNTAzZWY0NzI0NmZkOWJjMjM4NjBlOTUxNmMyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNDUxMDIwMzcyMjE0NSwgLTk2LjcwMjY4ODEzMDE1NDU3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzUyNWJjY2FjNDIyODQ1Nzg4MjRjOGUyMGZmYjJjYTJhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jN2Q4OWU2NGUxMGQ0YjI1YmMxMTFjOGY4ZjdlYTQyMyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzdkODllNjRlMTBkNGIyNWJjMTExYzhmOGY3ZWE0MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZldGlzaCBOYWlscyAoU3BhKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81MjViY2NhYzQyMjg0NTc4ODI0YzhlMjBmZmIyY2EyYS5zZXRDb250ZW50KGh0bWxfYzdkODllNjRlMTBkNGIyNWJjMTExYzhmOGY3ZWE0MjMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzhmMWI1MDNlZjQ3MjQ2ZmQ5YmMyMzg2MGU5NTE2YzIyLmJpbmRQb3B1cChwb3B1cF81MjViY2NhYzQyMjg0NTc4ODI0YzhlMjBmZmIyY2EyYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTAzOGJlNzhlMDE4NDdkZDljYjA3NGFjZDE3OWI1NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NjAzNjIyMjI1NDM1NiwgLTk2LjY4MTE5OTQ0MjY3OTk0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2QzOTFhNGU0ODY2MDQ0ZGU4MjAyMmU0YjhjN2ZiYzhiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ODI0NTI1MmNhMTk0ODUwYmI2M2Q3YTEyNzk1YTY4YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDgyNDUyNTJjYTE5NDg1MGJiNjNkN2ExMjc5NWE2OGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkN1bHZlciYjMzk7cyAoRmFzdCBGb29kIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2QzOTFhNGU0ODY2MDQ0ZGU4MjAyMmU0YjhjN2ZiYzhiLnNldENvbnRlbnQoaHRtbF80ODI0NTI1MmNhMTk0ODUwYmI2M2Q3YTEyNzk1YTY4YSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTAzOGJlNzhlMDE4NDdkZDljYjA3NGFjZDE3OWI1NzIuYmluZFBvcHVwKHBvcHVwX2QzOTFhNGU0ODY2MDQ0ZGU4MjAyMmU0YjhjN2ZiYzhiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTE4ZmIxZWM1MjI0ZWE5ODYyYThhY2FjNDQ1MDgxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MDM4MDYxMjEyNDg4NCwgLTk2LjY0MzgwMzA4NjcxNTc0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzFlYzA0MDk5ZjExMjQ1OTc4MjE3NDMzNDUxOGI4MzNkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81YWRjNzA2NzA5MmE0MmNlYjFmNDBlMzkyNGQzYTViOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWFkYzcwNjcwOTJhNDJjZWIxZjQwZTM5MjRkM2E1YjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRvbiAmYW1wOyBNaWxsaWUmIzM5O3MgKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWVjMDQwOTlmMTEyNDU5NzgyMTc0MzM0NTE4YjgzM2Quc2V0Q29udGVudChodG1sXzVhZGM3MDY3MDkyYTQyY2ViMWY0MGUzOTI0ZDNhNWI4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81YTE4ZmIxZWM1MjI0ZWE5ODYyYThhY2FjNDQ1MDgxMi5iaW5kUG9wdXAocG9wdXBfMWVjMDQwOTlmMTEyNDU5NzgyMTc0MzM0NTE4YjgzM2QpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlYTgyOTMzZjk5YjQ5ZWRhOWI1NDBjNmZhYTMxNWIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxOTk3LCAtOTYuNjkzMTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMThkM2JmODQxMDkyNDRlYzhiYmJjMGVmMTQ5ZjI5NjQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA0MDU2ZWFlMDY1NjRjZDI5OGQ2NGMxYzJiOWFlMGM2ID0gJChgPGRpdiBpZD0iaHRtbF8wNDA1NmVhZTA2NTY0Y2QyOThkNjRjMWMyYjlhZTBjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsZGVybmVzcyBSaWRnZSAtIExvZGdlIFJlc3RhdXJhbnQgKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE4ZDNiZjg0MTA5MjQ0ZWM4YmJiYzBlZjE0OWYyOTY0LnNldENvbnRlbnQoaHRtbF8wNDA1NmVhZTA2NTY0Y2QyOThkNjRjMWMyYjlhZTBjNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNmVhODI5MzNmOTliNDllZGE5YjU0MGM2ZmFhMzE1YjAuYmluZFBvcHVwKHBvcHVwXzE4ZDNiZjg0MTA5MjQ0ZWM4YmJiYzBlZjE0OWYyOTY0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNTIxZTFjYzBjNTk0ODk0OTY1M2YyNDllMjRjYjA2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1NzE5NTI3NjEwNjc1LCAtOTYuNjM3NzIxMzQyNzM1NjNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZTBjZjY4ZDgxOGFjNDA4YWE4NzNjZGJhNTM3MzMxZTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NjMjVhYmQxYmQ5MjQzMTg5OTNkYzdlNWE3NjkxZDQ5ID0gJChgPGRpdiBpZD0iaHRtbF9jYzI1YWJkMWJkOTI0MzE4OTkzZGM3ZTVhNzY5MWQ0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW5naW5lIEhvdXNlIENhZmUgKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2UwY2Y2OGQ4MThhYzQwOGFhODczY2RiYTUzNzMzMWU1LnNldENvbnRlbnQoaHRtbF9jYzI1YWJkMWJkOTI0MzE4OTkzZGM3ZTVhNzY5MWQ0OSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMzUyMWUxY2MwYzU5NDg5NDk2NTNmMjQ5ZTI0Y2IwNjIuYmluZFBvcHVwKHBvcHVwX2UwY2Y2OGQ4MThhYzQwOGFhODczY2RiYTUzNzMzMWU1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTBiNmY1ODg1ZTc0NGU5YjQwYjY2NGJhODNkMzFlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MDE5LCAtOTYuNjQyNDk5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JmNDY5NDQyNzc5YjQzMjk4YzU2NGQ4ZWJhNzFlMDAxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84ZGQ0MGE4OTlmZDA0NTFiOThkOWNhNGM3NTc2OWZlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGRkNDBhODk5ZmQwNDUxYjk4ZDljYTRjNzU3NjlmZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmN1cyBFZGdld29vZCBDaW5lbWEgKE1vdmllIFRoZWF0ZXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JmNDY5NDQyNzc5YjQzMjk4YzU2NGQ4ZWJhNzFlMDAxLnNldENvbnRlbnQoaHRtbF84ZGQ0MGE4OTlmZDA0NTFiOThkOWNhNGM3NTc2OWZlMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYTEwYjZmNTg4NWU3NDRlOWI0MGI2NjRiYTgzZDMxZTQuYmluZFBvcHVwKHBvcHVwX2JmNDY5NDQyNzc5YjQzMjk4YzU2NGQ4ZWJhNzFlMDAxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NDQwYzllNTU5MmQ0YTJjOGFiNTdiY2QxMGI1ODVhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MjA4NjczOTI5NTc2LCAtOTYuNjc5Mzk0NzM2ODEwNTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTlmZDY3OGY4YzUxNDk0NWE3MmM3NzEyMGQ4OTIzZjAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzM2NGRhZmQzMmRmNzQwYzNiNzNmYzIwMDJiNTNlNzZlID0gJChgPGRpdiBpZD0iaHRtbF8zNjRkYWZkMzJkZjc0MGMzYjczZmMyMDAyYjUzZTc2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmljdG9yaWEmIzM5O3MgU2VjcmV0IChMaW5nZXJpZSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTlmZDY3OGY4YzUxNDk0NWE3MmM3NzEyMGQ4OTIzZjAuc2V0Q29udGVudChodG1sXzM2NGRhZmQzMmRmNzQwYzNiNzNmYzIwMDJiNTNlNzZlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83NDQwYzllNTU5MmQ0YTJjOGFiNTdiY2QxMGI1ODVhOC5iaW5kUG9wdXAocG9wdXBfOTlmZDY3OGY4YzUxNDk0NWE3MmM3NzEyMGQ4OTIzZjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiYzJiZTVkNTg3NDRiYWVhYzExMGEzOTBlYzdhZTJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODYwNzE4MzY2NzY2MTMsIC05Ni42NDA3MTA2MzY3ODUxNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zMjA4Y2Y1YzdkNmY0YjY4YTIxMTU5NDZiNDVhMGI4YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjFmOWQ4ZWIyMjBhNGY5MTgyMWU4OTY5ZWUxNDQwZjkgPSAkKGA8ZGl2IGlkPSJodG1sXzYxZjlkOGViMjIwYTRmOTE4MjFlODk2OWVlMTQ0MGY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYW5jaG8gVmlsbGEgTWV4aWNhbiBHcmlsbCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zMjA4Y2Y1YzdkNmY0YjY4YTIxMTU5NDZiNDVhMGI4Yi5zZXRDb250ZW50KGh0bWxfNjFmOWQ4ZWIyMjBhNGY5MTgyMWU4OTY5ZWUxNDQwZjkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzNiYzJiZTVkNTg3NDRiYWVhYzExMGEzOTBlYzdhZTJmLmJpbmRQb3B1cChwb3B1cF8zMjA4Y2Y1YzdkNmY0YjY4YTIxMTU5NDZiNDVhMGI4YikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzg1NGViMDJjNzk1NGQ2ZWE2N2Y4NGU2Y2FhYTZmZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njg1ODEyMTE2OTczOSwgLTk2LjYyNDQ2MTUwMzg1MzY1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2EyZDNjM2IwZGJiOTRhNjZhMzJhOGVkNmFjMGMwOWNjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yMWY4ODg5ZmI3MDQ0YWRiODhhNjAwZGQ5M2ZkODEwMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjFmODg4OWZiNzA0NGFkYjg4YTYwMGRkOTNmZDgxMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBvcGV5ZXMgTG91aXNpYW5hIEtpdGNoZW4gKEZyaWVkIENoaWNrZW4gSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EyZDNjM2IwZGJiOTRhNjZhMzJhOGVkNmFjMGMwOWNjLnNldENvbnRlbnQoaHRtbF8yMWY4ODg5ZmI3MDQ0YWRiODhhNjAwZGQ5M2ZkODEwMCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNzg1NGViMDJjNzk1NGQ2ZWE2N2Y4NGU2Y2FhYTZmZmYuYmluZFBvcHVwKHBvcHVwX2EyZDNjM2IwZGJiOTRhNjZhMzJhOGVkNmFjMGMwOWNjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YzJhYjU1YjcyM2Y0N2FjYjQ3Nzc5N2M0YjI5Y2JiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDE2NzIwNjExMDQxNCwgLTk2LjY4MTM3Njk5NzIzMDIzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ4YWFkZmUxOWYzMTQxOWZiMjVhODI5Nzk4ZWQwNGZjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hY2NkOTc0NjY0YzU0YmVmOGE4M2Q5MmM0YmE1YjQ2YyA9ICQoYDxkaXYgaWQ9Imh0bWxfYWNjZDk3NDY2NGM1NGJlZjhhODNkOTJjNGJhNWI0NmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhbW91cyBEYXZlJiMzOTtzIChCQlEgSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQ4YWFkZmUxOWYzMTQxOWZiMjVhODI5Nzk4ZWQwNGZjLnNldENvbnRlbnQoaHRtbF9hY2NkOTc0NjY0YzU0YmVmOGE4M2Q5MmM0YmE1YjQ2Yyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNGMyYWI1NWI3MjNmNDdhY2I0Nzc3OTdjNGIyOWNiYjIuYmluZFBvcHVwKHBvcHVwXzQ4YWFkZmUxOWYzMTQxOWZiMjVhODI5Nzk4ZWQwNGZjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDA3MmRkY2IxN2I0NjI4OThmZWUxNTUxYmQ5MmU5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MjA2NjQxNDM3NzE5LCAtOTYuNjA2ODMzODA3NTE5MzRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZWIzYjAzMjZkZmZhNDg5ZWFiMzBiODdkZGYzZDkzMWYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2E4MDIyMzE2MjA2ZjRmZTBhYmJiZWFkMzNiNDJmMzU4ID0gJChgPGRpdiBpZD0iaHRtbF9hODAyMjMxNjIwNmY0ZmUwYWJiYmVhZDMzYjQyZjM1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2Nvb3RlciYjMzk7cyBDb2ZmZWVob3VzZSAmYW1wOyBCcm93biBCYWdnZXJzIChTYW5kd2ljaCBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWIzYjAzMjZkZmZhNDg5ZWFiMzBiODdkZGYzZDkzMWYuc2V0Q29udGVudChodG1sX2E4MDIyMzE2MjA2ZjRmZTBhYmJiZWFkMzNiNDJmMzU4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jZDA3MmRkY2IxN2I0NjI4OThmZWUxNTUxYmQ5MmU5NS5iaW5kUG9wdXAocG9wdXBfZWIzYjAzMjZkZmZhNDg5ZWFiMzBiODdkZGYzZDkzMWYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhY2U0YTY3YTY3NDQ1MzVhZGZiZDViMWVkOWRhYWQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM4NDAxNDk5OTk5OTksIC05Ni42ODQ5MzU0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzJhN2I5YWE2NmY0YzRhMjE5MjBkZDk0NDk3YTRiYzI5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jZmU0YzJmZDk5MzQ0MzBmOTI3ZDIxOTU5NTI2ZTQyOSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2ZlNGMyZmQ5OTM0NDMwZjkyN2QyMTk1OTUyNmU0MjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1SG90IE1vbmdvbGlhbiBHcmlsbCAoTW9uZ29saWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzJhN2I5YWE2NmY0YzRhMjE5MjBkZDk0NDk3YTRiYzI5LnNldENvbnRlbnQoaHRtbF9jZmU0YzJmZDk5MzQ0MzBmOTI3ZDIxOTU5NTI2ZTQyOSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNGFjZTRhNjdhNjc0NDUzNWFkZmJkNWIxZWQ5ZGFhZDAuYmluZFBvcHVwKHBvcHVwXzJhN2I5YWE2NmY0YzRhMjE5MjBkZDk0NDk3YTRiYzI5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjNlZDJhOWJlMWM0NDFhYjNmNGU0M2U3OWU0ODIyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczODg5MDE1LCAtOTYuNjgxNzg1NzZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmVmZTE1MjYxZGU5NGU0ZjlkYjI3ZDc1YjJlZTU0NmQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzc2ZTE2Y2E2MmFhNTQxM2M5NTY5OGFjMjYxNjRiYWFlID0gJChgPGRpdiBpZD0iaHRtbF83NmUxNmNhNjJhYTU0MTNjOTU2OThhYzI2MTY0YmFhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVkIFJvYmluIEdvdXJtZXQgQnVyZ2VycyBhbmQgQnJld3MgKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNmVmZTE1MjYxZGU5NGU0ZjlkYjI3ZDc1YjJlZTU0NmQuc2V0Q29udGVudChodG1sXzc2ZTE2Y2E2MmFhNTQxM2M5NTY5OGFjMjYxNjRiYWFlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xNjNlZDJhOWJlMWM0NDFhYjNmNGU0M2U3OWU0ODIyZC5iaW5kUG9wdXAocG9wdXBfNmVmZTE1MjYxZGU5NGU0ZjlkYjI3ZDc1YjJlZTU0NmQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5NGZlZjAwODE5ODQwOTU5ODg1MjdmNjZhNDE1MTlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5OTMzMjA0MDQ3MjMsIC05Ni42NDEyNzI4NzQwNzAwNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zZDg1NTQxMjgwNmI0ZjNhOTYzMWNmOWVlNTA3NGM2ZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjcxOGUzMGMzNjFkNGUwNGI5ZmY3YmRlZGRmYTc4MTMgPSAkKGA8ZGl2IGlkPSJodG1sXzI3MThlMzBjMzYxZDRlMDRiOWZmN2JkZWRkZmE3ODEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TY29vdGVycyAoQ29mZmVlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzNkODU1NDEyODA2YjRmM2E5NjMxY2Y5ZWU1MDc0YzZkLnNldENvbnRlbnQoaHRtbF8yNzE4ZTMwYzM2MWQ0ZTA0YjlmZjdiZGVkZGZhNzgxMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjk0ZmVmMDA4MTk4NDA5NTk4ODUyN2Y2NmE0MTUxOWQuYmluZFBvcHVwKHBvcHVwXzNkODU1NDEyODA2YjRmM2E5NjMxY2Y5ZWU1MDc0YzZkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZTRhMTZlZDQ2ZjM0MTQwYTZkNjk4ZTQ0MDlhYjJhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4MjQxOTksIC05Ni43MzAzMjg4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2I4ZGM4M2U5MWMwZTQ2OTlhMTMxYjE1NmQyZjQ2YTY3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hZTUzZTdlOGNmY2I0ZGRmYjcxMjVhMDZiYzMzOTBjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWU1M2U3ZThjZmNiNGRkZmI3MTI1YTA2YmMzMzkwYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhbGxicm9vayBZTUNBIChHeW0gLyBGaXRuZXNzIENlbnRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjhkYzgzZTkxYzBlNDY5OWExMzFiMTU2ZDJmNDZhNjcuc2V0Q29udGVudChodG1sX2FlNTNlN2U4Y2ZjYjRkZGZiNzEyNWEwNmJjMzM5MGM4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80ZTRhMTZlZDQ2ZjM0MTQwYTZkNjk4ZTQ0MDlhYjJhNS5iaW5kUG9wdXAocG9wdXBfYjhkYzgzZTkxYzBlNDY5OWExMzFiMTU2ZDJmNDZhNjcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1NTg4NThiNTVkODQxZWM5NjliMmU4NTMyZTUxZDg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI3Nzg1NzAwMzEzODIsIC05Ni42NjU0NzMwODM5NTgxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y2N2FkNmVjYzYxMDRkNWQ4YjhjYzRkMzBiYWVhZDI3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83ZjYyMmRjMjY0ZjA0OTYzODQ0YzBjZGEyZmI5MTkxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2Y2MjJkYzI2NGYwNDk2Mzg0NGMwY2RhMmZiOTE5MTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRhcmdldCAoQmlnIEJveCBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjY3YWQ2ZWNjNjEwNGQ1ZDhiOGNjNGQzMGJhZWFkMjcuc2V0Q29udGVudChodG1sXzdmNjIyZGMyNjRmMDQ5NjM4NDRjMGNkYTJmYjkxOTEwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zNTU4ODU4YjU1ZDg0MWVjOTY5YjJlODUzMmU1MWQ4Ni5iaW5kUG9wdXAocG9wdXBfZjY3YWQ2ZWNjNjEwNGQ1ZDhiOGNjNGQzMGJhZWFkMjcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwZDM3M2Y1NmIyYzRhOWRiZDBhMTlmNTZhNzY5ODdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5Mjc1LCAtOTYuNjQzNTM5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzAyMmNjODVkNWQ3NjQ5ODY5OTllYzg1NGYzMDIwMDEzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zYTYzMjViMmU1NTg0MmE3OWFkNTM4YmNmYzUxNWNkNiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2E2MzI1YjJlNTU4NDJhNzlhZDUzOGJjZmM1MTVjZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvY2FsIEJlZXIsIFBhdGlvLCBhbmQgS2l0Y2hlbiAoUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDIyY2M4NWQ1ZDc2NDk4Njk5OWVjODU0ZjMwMjAwMTMuc2V0Q29udGVudChodG1sXzNhNjMyNWIyZTU1ODQyYTc5YWQ1MzhiY2ZjNTE1Y2Q2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82MGQzNzNmNTZiMmM0YTlkYmQwYTE5ZjU2YTc2OTg3Yi5iaW5kUG9wdXAocG9wdXBfMDIyY2M4NWQ1ZDc2NDk4Njk5OWVjODU0ZjMwMjAwMTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzZTZhOWZlOTVhMDQ1M2I5Njc5OGEzMDIxNWJhYTA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5NTQ5NTg0NzUwNzQsIC05Ni42NzkzMDE5NTg1MzI0OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84NjBmMTRkNTUxZjY0ZTZkYmRlNmQwYTY4ZWUwYWNlYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmJlZjdlYTEwZmExNDNkYzk1ZTRiZTc2MDI1Y2NhZjkgPSAkKGA8ZGl2IGlkPSJodG1sXzJiZWY3ZWExMGZhMTQzZGM5NWU0YmU3NjAyNWNjYWY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGVycnkgT24gVG9wIChGcm96ZW4gWW9ndXJ0IFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzg2MGYxNGQ1NTFmNjRlNmRiZGU2ZDBhNjhlZTBhY2VhLnNldENvbnRlbnQoaHRtbF8yYmVmN2VhMTBmYTE0M2RjOTVlNGJlNzYwMjVjY2FmOSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjNlNmE5ZmU5NWEwNDUzYjk2Nzk4YTMwMjE1YmFhMDguYmluZFBvcHVwKHBvcHVwXzg2MGYxNGQ1NTFmNjRlNmRiZGU2ZDBhNjhlZTBhY2VhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZDI3Y2Q5MjNjNjk0NzQ5OGRiOTcwY2UyY2E2MDc3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTUxMTA3LCAtOTYuNjc5MTk5NDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOWYwMzlmZTI2NzNiNDk0ODk5Njg3OTY5YTgyMGYzZjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q2ZjgzYTM3Y2U5ZDRiYWY4NmIyNjM0YjU2YmJjZTU1ID0gJChgPGRpdiBpZD0iaHRtbF9kNmY4M2EzN2NlOWQ0YmFmODZiMjYzNGI1NmJiY2U1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhcmJ1Y2tzIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOWYwMzlmZTI2NzNiNDk0ODk5Njg3OTY5YTgyMGYzZjEuc2V0Q29udGVudChodG1sX2Q2ZjgzYTM3Y2U5ZDRiYWY4NmIyNjM0YjU2YmJjZTU1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hZDI3Y2Q5MjNjNjk0NzQ5OGRiOTcwY2UyY2E2MDc3Yi5iaW5kUG9wdXAocG9wdXBfOWYwMzlmZTI2NzNiNDk0ODk5Njg3OTY5YTgyMGYzZjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5MGZiYzUxNzA5NTQzYjRiYTA5ODllNWRlMDIyMDcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5MTQ2OSwgLTk2LjcwMDc4ODNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjlkYTg4MjNlN2RkNGVjNDhmNmIzNzE3NWZlZTg0MTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzQ5OWE4NGVkYTdmZjRmMzNhZThiZWQ4ODg2YTNmNmE1ID0gJChgPGRpdiBpZD0iaHRtbF80OTlhODRlZGE3ZmY0ZjMzYWU4YmVkODg4NmEzZjZhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFuZXJhIEJyZWFkIChCYWtlcnkpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2I5ZGE4ODIzZTdkZDRlYzQ4ZjZiMzcxNzVmZWU4NDE2LnNldENvbnRlbnQoaHRtbF80OTlhODRlZGE3ZmY0ZjMzYWU4YmVkODg4NmEzZjZhNSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNzkwZmJjNTE3MDk1NDNiNGJhMDk4OWU1ZGUwMjIwNzIuYmluZFBvcHVwKHBvcHVwX2I5ZGE4ODIzZTdkZDRlYzQ4ZjZiMzcxNzVmZWU4NDE2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NGZlNWUyYzgzZTY0MDAwODgyNTliMjY4NjM4MGYwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3ODU5LCAtOTYuNjg2ODkyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzZmODRkNWVhM2QyNjRmMzA4OTc3OTQ3NjA1NjBlMGRhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hZTdiZjdiNzcxYjQ0YTY1YTViMzgzOWFjZTc3OGU5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWU3YmY3Yjc3MWI0NGE2NWE1YjM4MzlhY2U3NzhlOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlc3QgV2VzdGVybiBQbHVzIExpbmNvbG4gSW5uICZhbXA7IFN1aXRlcyAoSG90ZWwpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZmODRkNWVhM2QyNjRmMzA4OTc3OTQ3NjA1NjBlMGRhLnNldENvbnRlbnQoaHRtbF9hZTdiZjdiNzcxYjQ0YTY1YTViMzgzOWFjZTc3OGU5ZCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNzRmZTVlMmM4M2U2NDAwMDg4MjU5YjI2ODYzODBmMDUuYmluZFBvcHVwKHBvcHVwXzZmODRkNWVhM2QyNjRmMzA4OTc3OTQ3NjA1NjBlMGRhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTNkNjVkYTcwMGQ0Njk5YTc1YzA1OGI2OTY2MjZmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczODE5NywgLTk2LjY5ODQyNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wOTBkMmVmNDFjNDA0MDdhYjFlZWVjNThlOTZiM2MwZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDU4MGI1YzA0YTkxNDU4Nzg1ZmFjYzA5ZTFjZWM1NjMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1ODBiNWMwNGE5MTQ1ODc4NWZhY2MwOWUxY2VjNTYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TbGltIENoaWNrZW5zIChSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wOTBkMmVmNDFjNDA0MDdhYjFlZWVjNThlOTZiM2MwZi5zZXRDb250ZW50KGh0bWxfZDU4MGI1YzA0YTkxNDU4Nzg1ZmFjYzA5ZTFjZWM1NjMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2VlM2Q2NWRhNzAwZDQ2OTlhNzVjMDU4YjY5NjYyNmYwLmJpbmRQb3B1cChwb3B1cF8wOTBkMmVmNDFjNDA0MDdhYjFlZWVjNThlOTZiM2MwZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjRjYTU0Yjc4Y2I1NDNiMGI3OGQ5NzY0ZjhlOGU2YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzg2NzMsIC05Ni42ODA4OTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMDQ5MDNlNjEzNTM0NDY4N2JkYTliODNiMWEwODcxODQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MyYjkyYWM5ZmMzMDRjZWRhYzdjNmEyNTJhMzFkMmQzID0gJChgPGRpdiBpZD0iaHRtbF9jMmI5MmFjOWZjMzA0Y2VkYWM3YzZhMjUyYTMxZDJkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmVyc2V5IE1pa2UmIzM5O3MgU3VicyAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzA0OTAzZTYxMzUzNDQ2ODdiZGE5YjgzYjFhMDg3MTg0LnNldENvbnRlbnQoaHRtbF9jMmI5MmFjOWZjMzA0Y2VkYWM3YzZhMjUyYTMxZDJkMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYjRjYTU0Yjc4Y2I1NDNiMGI3OGQ5NzY0ZjhlOGU2YWEuYmluZFBvcHVwKHBvcHVwXzA0OTAzZTYxMzUzNDQ2ODdiZGE5YjgzYjFhMDg3MTg0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYmY2OTdmMDJiY2E0YjZlOWNhMTJjMmE2ZjIxMDYwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDM3MjA4Mzg5OTM0NSwgLTk2LjY4MzI3MDkzMTI0MzldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTliYWIzYzdiNzgyNGEzMmJlZGVhZWNkNTU1NjgyMmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2RiZjVmNzI4ZDEyZjRkMWQ5MjE4N2UyNDMwODE2NDk4ID0gJChgPGRpdiBpZD0iaHRtbF9kYmY1ZjcyOGQxMmY0ZDFkOTIxODdlMjQzMDgxNjQ5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FsZ3JlZW5zIChQaGFybWFjeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTliYWIzYzdiNzgyNGEzMmJlZGVhZWNkNTU1NjgyMmEuc2V0Q29udGVudChodG1sX2RiZjVmNzI4ZDEyZjRkMWQ5MjE4N2UyNDMwODE2NDk4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wYmY2OTdmMDJiY2E0YjZlOWNhMTJjMmE2ZjIxMDYwMy5iaW5kUG9wdXAocG9wdXBfMTliYWIzYzdiNzgyNGEzMmJlZGVhZWNkNTU1NjgyMmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkZmI4NDBmNDE0MDQ5ODY4ZDcxYWM1NTliNmRlNGJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5MjU5Mzk2MTQyMjY2LCAtOTYuNjc5NDQ0MjEyODMzMTJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjVkYzJiMTYwZDI0NDE1NDk1ZTdlMTZjZTdjMDI4MWMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZkZmEwNmZjMmI2OTQ5NjE5OTc4OTdjNTE0OTBjMGI5ID0gJChgPGRpdiBpZD0iaHRtbF82ZGZhMDZmYzJiNjk0OTYxOTk3ODk3YzUxNDkwYzBiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hpcG90bGUgTWV4aWNhbiBHcmlsbCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yNWRjMmIxNjBkMjQ0MTU0OTVlN2UxNmNlN2MwMjgxYy5zZXRDb250ZW50KGh0bWxfNmRmYTA2ZmMyYjY5NDk2MTk5Nzg5N2M1MTQ5MGMwYjkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzNkZmI4NDBmNDE0MDQ5ODY4ZDcxYWM1NTliNmRlNGJkLmJpbmRQb3B1cChwb3B1cF8yNWRjMmIxNjBkMjQ0MTU0OTVlN2UxNmNlN2MwMjgxYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmI0ODQzMDRhNDJiNGFkODhiMWI1NzIxOWVkNGVkZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzg2MTIsIC05Ni42ODMwNzldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzcxOTE0NGQ4MmE3NDRiNGJlOWNhZmE3YTcxNjlkNDIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA5MjdhNGUyMzkzOTQzNTNhZDJhMDc5MjgwYTgwY2VmID0gJChgPGRpdiBpZD0iaHRtbF8wOTI3YTRlMjM5Mzk0MzUzYWQyYTA3OTI4MGE4MGNlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmlsbGFnZSBJbm4gKEJyZWFrZmFzdCBTcG90KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNzE5MTQ0ZDgyYTc0NGI0YmU5Y2FmYTdhNzE2OWQ0Mi5zZXRDb250ZW50KGh0bWxfMDkyN2E0ZTIzOTM5NDM1M2FkMmEwNzkyODBhODBjZWYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzZiNDg0MzA0YTQyYjRhZDg4YjFiNTcyMTllZDRlZGUwLmJpbmRQb3B1cChwb3B1cF9jNzE5MTQ0ZDgyYTc0NGI0YmU5Y2FmYTdhNzE2OWQ0MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzliYTFlOTllYmNjNDViYTk4NzlhNTUyYmIxODljYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjkwMzA5MzY2OTM0LCAtOTYuNjc5Njc4MjQ0MTUxOTRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzdkYTNiODgyOGYzNDdjYzk0ZjI0NzZiMzI4NTRlZjggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZhY2U4YmI4NDA5YTQ4ZDI4MzM5OTUxOTE4YzFjOTgxID0gJChgPGRpdiBpZD0iaHRtbF82YWNlOGJiODQwOWE0OGQyODMzOTk1MTkxOGMxYzk4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXNpYW4gRnVzaW9uIChBc2lhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jN2RhM2I4ODI4ZjM0N2NjOTRmMjQ3NmIzMjg1NGVmOC5zZXRDb250ZW50KGh0bWxfNmFjZThiYjg0MDlhNDhkMjgzMzk5NTE5MThjMWM5ODEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2M5YmExZTk5ZWJjYzQ1YmE5ODc5YTU1MmJiMTg5Y2FlLmJpbmRQb3B1cChwb3B1cF9jN2RhM2I4ODI4ZjM0N2NjOTRmMjQ3NmIzMjg1NGVmOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjg5ZmQ1NWIyOTAxNDBhNTgzMmJkOWRmMzBkZmNmMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjM4MjEsIC05Ni42ODA1MTNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTYyMmUwMzM5ZGNjNDcxNmFkNTg5MWQwMWFlMzQ0YjYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2IzNDA2OTcwZDFmYjRlZTFiNjkyOWNlOGQ3ZjBiYzU5ID0gJChgPGRpdiBpZD0iaHRtbF9iMzQwNjk3MGQxZmI0ZWUxYjY5MjljZThkN2YwYmM1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S29obCYjMzk7cyAoRGVwYXJ0bWVudCBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTYyMmUwMzM5ZGNjNDcxNmFkNTg5MWQwMWFlMzQ0YjYuc2V0Q29udGVudChodG1sX2IzNDA2OTcwZDFmYjRlZTFiNjkyOWNlOGQ3ZjBiYzU5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yODlmZDU1YjI5MDE0MGE1ODMyYmQ5ZGYzMGRmY2YyMC5iaW5kUG9wdXAocG9wdXBfOTYyMmUwMzM5ZGNjNDcxNmFkNTg5MWQwMWFlMzQ0YjYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyZWI4OGNlNzQ3MzRkYjI5MjY1YmMyMGUwZDAwMzVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUzMDM5ODQ1Njc2NTUsIC05Ni42MDU1MDUxODgxMDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTk1YTM4ZjU1MmQzNGI0ODg0ZDVkNmUxYjFlMDI3ZjYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzEzOTY2ZDg0OTlmOTQyNDM4ODAyMTY4MDdhNWE5ZWEzID0gJChgPGRpdiBpZD0iaHRtbF8xMzk2NmQ4NDk5Zjk0MjQzODgwMjE2ODA3YTVhOWVhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RHVua2luJiMzOTsgKERvbnV0IFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE5NWEzOGY1NTJkMzRiNDg4NGQ1ZDZlMWIxZTAyN2Y2LnNldENvbnRlbnQoaHRtbF8xMzk2NmQ4NDk5Zjk0MjQzODgwMjE2ODA3YTVhOWVhMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZDJlYjg4Y2U3NDczNGRiMjkyNjViYzIwZTBkMDAzNWMuYmluZFBvcHVwKHBvcHVwXzE5NWEzOGY1NTJkMzRiNDg4NGQ1ZDZlMWIxZTAyN2Y2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMDg1YzhlYzBjZWQ0ZDIwOGMxMDljZWM4MjAxNmVlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MTk0MzI1MjkyODMyLCAtOTYuNzI1NDI1OTM2MDQwMzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTM3NGI3MmY2MDQzNDk1NWE2NDhlYzc5ZDFmMWE2ZDAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzJhZTc5MjY0MTBmNzRiMTFiMjNiNmFiODVlMDE5ZjEyID0gJChgPGRpdiBpZD0iaHRtbF8yYWU3OTI2NDEwZjc0YjExYjIzYjZhYjg1ZTAxOWYxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGluY29sbiBSYWNlIENvdXJzZSAoUmFjZXRyYWNrKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xMzc0YjcyZjYwNDM0OTU1YTY0OGVjNzlkMWYxYTZkMC5zZXRDb250ZW50KGh0bWxfMmFlNzkyNjQxMGY3NGIxMWIyM2I2YWI4NWUwMTlmMTIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2UwODVjOGVjMGNlZDRkMjA4YzEwOWNlYzgyMDE2ZWVkLmJpbmRQb3B1cChwb3B1cF8xMzc0YjcyZjYwNDM0OTU1YTY0OGVjNzlkMWYxYTZkMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjMyYjFkMjNjYzI3NGEzZWJjNWJmYTJjYzg1MmVlOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NzkyNzI0ODE1MTQ4MjUsIC05Ni42ODE0MTYwNDY4NDc4M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81NDVkOTA1Y2QzMGQ0MDFhOTdmMDUzNDU0YjkzMWVjMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzE5NjY5ZTlkZDcxNDEzNGIyYjkzNDY0MThiZDFmODYgPSAkKGA8ZGl2IGlkPSJodG1sXzMxOTY2OWU5ZGQ3MTQxMzRiMmI5MzQ2NDE4YmQxZjg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DcmFja2VyIEJhcnJlbCBPbGQgQ291bnRyeSBTdG9yZSAoQW1lcmljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTQ1ZDkwNWNkMzBkNDAxYTk3ZjA1MzQ1NGI5MzFlYzIuc2V0Q29udGVudChodG1sXzMxOTY2OWU5ZGQ3MTQxMzRiMmI5MzQ2NDE4YmQxZjg2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82MzJiMWQyM2NjMjc0YTNlYmM1YmZhMmNjODUyZWU5ZS5iaW5kUG9wdXAocG9wdXBfNTQ1ZDkwNWNkMzBkNDAxYTk3ZjA1MzQ1NGI5MzFlYzIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiMDU2Y2VjNTBmYTRhNWZiYjMwZTlkMzUzZTllZjYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODcwMDMyODI3MDIwODE1LCAtOTYuNzIzMTk4MzkyODE1OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84ZjI4MWQxMDY3NDY0MDI1ODc4MWYzMzJlMmFhMWE0YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZjUzYzNmNGQ1ZjVjNGNjYWFiMDQ1MDFiZjY0MWMyMTkgPSAkKGA8ZGl2IGlkPSJodG1sX2Y1M2MzZjRkNWY1YzRjY2FhYjA0NTAxYmY2NDFjMjE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IeWxhbmRlciBCYXIgJmFtcDsgR3JpbGwgKEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOGYyODFkMTA2NzQ2NDAyNTg3ODFmMzMyZTJhYTFhNGIuc2V0Q29udGVudChodG1sX2Y1M2MzZjRkNWY1YzRjY2FhYjA0NTAxYmY2NDFjMjE5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xYjA1NmNlYzUwZmE0YTVmYmIzMGU5ZDM1M2U5ZWY2MC5iaW5kUG9wdXAocG9wdXBfOGYyODFkMTA2NzQ2NDAyNTg3ODFmMzMyZTJhYTFhNGIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwZWY1ZGMzYWU1MTRhZGE4YzlkNTBmZjhiOTg1OTY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc3MTkxNjEzNjc1NDksIC05Ni43MjY5ODE4MTUzNzQ1M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84ODVlZWNmN2U3Yzk0MmRhYTM2ZDE4YWFmY2I4OWU3NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMWZjNjMzZWMwNmQ0NDJlMmI5MjJjY2UyZjNlMGQ0ZTcgPSAkKGA8ZGl2IGlkPSJodG1sXzFmYzYzM2VjMDZkNDQyZTJiOTIyY2NlMmYzZTBkNGU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TY2hpbGxpbmdCcmlkZ2UgQ29yayAmYW1wOyBUYXAgSG91c2UgKEJlZXIgR2FyZGVuKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84ODVlZWNmN2U3Yzk0MmRhYTM2ZDE4YWFmY2I4OWU3Ny5zZXRDb250ZW50KGh0bWxfMWZjNjMzZWMwNmQ0NDJlMmI5MjJjY2UyZjNlMGQ0ZTcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2MwZWY1ZGMzYWU1MTRhZGE4YzlkNTBmZjhiOTg1OTY0LmJpbmRQb3B1cChwb3B1cF84ODVlZWNmN2U3Yzk0MmRhYTM2ZDE4YWFmY2I4OWU3NykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzIxMmViNjUyMWViNDYyNGExODkzMGVlNTU5YmZlNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzkzNzI2ODQ5MDQ5MSwgLTk2LjY0MzAyNDMxNzYyMTcyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E2MDliOGVjY2ZmNzQ2MzNhNTEzNjNjZmM4MTU2NDdmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNzVhM2NlOTIwNzM0MTQ1OWMyMmViNjJlNGY4MzZlYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjc1YTNjZTkyMDczNDE0NTljMjJlYjYyZTRmODM2ZWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlppcGxpbmUgQmVlciBIYWxsIChCcmV3ZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hNjA5YjhlY2NmZjc0NjMzYTUxMzYzY2ZjODE1NjQ3Zi5zZXRDb250ZW50KGh0bWxfYjc1YTNjZTkyMDczNDE0NTljMjJlYjYyZTRmODM2ZWEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzcyMTJlYjY1MjFlYjQ2MjRhMTg5MzBlZTU1OWJmZTQ3LmJpbmRQb3B1cChwb3B1cF9hNjA5YjhlY2NmZjc0NjMzYTUxMzYzY2ZjODE1NjQ3ZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY1MTcxMGJhOTk5NDk1ODg3NjFlYzZiMzU2NWZiYTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Nzg0ODk2OTA0NTc0MiwgLTk2LjY4MTI0NzAzMTQ1MzQyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICJibHVlIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmZhZWM1ZmU4NzEwNDNiMDg0MTk1YzA3MmU2ODE4YjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2NhOGUyNzIwMzQxNDRkMThhNTk0YWJmYjc2NjJkYzNiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81YTE3NmI3Njk3ZmQ0MWZmOWI4ZmY2YzI2MDIyYTgwNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWExNzZiNzY5N2ZkNDFmZjliOGZmNmMyNjAyMmE4MDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0YXIgQ2l0eSBNb3RvciBTcG9ydHMgKE1vdG9yc3BvcnRzIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NhOGUyNzIwMzQxNDRkMThhNTk0YWJmYjc2NjJkYzNiLnNldENvbnRlbnQoaHRtbF81YTE3NmI3Njk3ZmQ0MWZmOWI4ZmY2YzI2MDIyYTgwNyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNWY1MTcxMGJhOTk5NDk1ODg3NjFlYzZiMzU2NWZiYTQuYmluZFBvcHVwKHBvcHVwX2NhOGUyNzIwMzQxNDRkMThhNTk0YWJmYjc2NjJkYzNiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjczM2M3YjBhOTk0NDBmYWY0YjAxOTA1NjYwYjBiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDk5NjY5OTk5OTk5LCAtOTYuNzc5MjkzMDk5OTk5OTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODg0M2ZiOWI2ZWRhNDE5Mjg3NmJlNDJkYjVjMTA0YTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZjZDgzZTc5MDAwZTQ1MTNhYTcxMzEzMDQwNjVjMjQ5ID0gJChgPGRpdiBpZD0iaHRtbF82Y2Q4M2U3OTAwMGU0NTEzYWE3MTMxMzA0MDY1YzI0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJvbnRpZXIgSGFybGV5LURhdmlkc29uIChNb3RvcmN5Y2xlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzg4NDNmYjliNmVkYTQxOTI4NzZiZTQyZGI1YzEwNGE1LnNldENvbnRlbnQoaHRtbF82Y2Q4M2U3OTAwMGU0NTEzYWE3MTMxMzA0MDY1YzI0OSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMmI3MzNjN2IwYTk5NDQwZmFmNGIwMTkwNTY2MGIwYmMuYmluZFBvcHVwKHBvcHVwXzg4NDNmYjliNmVkYTQxOTI4NzZiZTQyZGI1YzEwNGE1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDVhMGJlNDQ2NTc0NTE4YTU3MzQ2Zjk1ZDY0MmI0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczODgxLCAtOTYuNjgwMTVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNTg5ZDExYzhlMzZkNDkxMzkzZGQ4Yzg0YWI0MTA4YmUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRlNWY0M2VkMWQ0MTQ4Mjg4NjJiYTc5YWUwZjMyZTQ2ID0gJChgPGRpdiBpZD0iaHRtbF80ZTVmNDNlZDFkNDE0ODI4ODYyYmE3OWFlMGYzMmU0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVwcGVySmF4IEdyaWxsIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81ODlkMTFjOGUzNmQ0OTEzOTNkZDhjODRhYjQxMDhiZS5zZXRDb250ZW50KGh0bWxfNGU1ZjQzZWQxZDQxNDgyODg2MmJhNzlhZTBmMzJlNDYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzkwNWEwYmU0NDY1NzQ1MThhNTczNDZmOTVkNjQyYjRhLmJpbmRQb3B1cChwb3B1cF81ODlkMTFjOGUzNmQ0OTEzOTNkZDhjODRhYjQxMDhiZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDUyNjU5MmQxMTc3NDI2YjgyZGFmYzAwODg0YjQ3ZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjM5NzM5MzYyNjQzMywgLTk2LjY4MTcwNDUyMTE3OTJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjhkMzRhYzBlM2E4NGM4YWI2YmZjNzgzZDUwZTJlZjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2EyOTM0NWEyZTEwNDQ5MWJhOTczMzRkNzc0NDhmYjM4ID0gJChgPGRpdiBpZD0iaHRtbF9hMjkzNDVhMmUxMDQ0OTFiYTk3MzM0ZDc3NDQ4ZmIzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QUxESSAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjhkMzRhYzBlM2E4NGM4YWI2YmZjNzgzZDUwZTJlZjMuc2V0Q29udGVudChodG1sX2EyOTM0NWEyZTEwNDQ5MWJhOTczMzRkNzc0NDhmYjM4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kNTI2NTkyZDExNzc0MjZiODJkYWZjMDA4ODRiNDdkZC5iaW5kUG9wdXAocG9wdXBfNjhkMzRhYzBlM2E4NGM4YWI2YmZjNzgzZDUwZTJlZjMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwM2U1NDhmNTcxZjQ5ZTQ4NmZlZDA2Y2NlZDM1ODI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE2MTA4MTM3MjAxODcsIC05Ni43OTUxMzEyMjI3ODE5NV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiYmx1ZSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmYWVjNWZlODcxMDQzYjA4NDE5NWMwNzJlNjgxOGI1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iYmY5MjgwZDZiODE0NTkyOTViNTZmZTUyOTdjNjZmYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfM2FmZmQyMGZhZjI3NDgwMjhlNmM5N2JhYmU5NjE4OTQgPSAkKGA8ZGl2IGlkPSJodG1sXzNhZmZkMjBmYWYyNzQ4MDI4ZTZjOTdiYWJlOTYxODk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DcmV0ZSBDYXJyaWVyL1NoYWZmZXIgVHJ1Y2tpbmcgKEJ1aWxkaW5nKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iYmY5MjgwZDZiODE0NTkyOTViNTZmZTUyOTdjNjZmYS5zZXRDb250ZW50KGh0bWxfM2FmZmQyMGZhZjI3NDgwMjhlNmM5N2JhYmU5NjE4OTQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2YwM2U1NDhmNTcxZjQ5ZTQ4NmZlZDA2Y2NlZDM1ODI5LmJpbmRQb3B1cChwb3B1cF9iYmY5MjgwZDZiODE0NTkyOTViNTZmZTUyOTdjNjZmYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNhMjBkZjZhMDg4NGE3MGE5YjNjZDQ5ODJiODgwMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44ODczNDc2Nzc1NDU5LCAtOTYuNjc4NjE3Mjk4NjAzMDZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjllODRhOTUwOTZhNDBhMmEzZDQ2YzE2NGI5Y2JmOGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRkNWNjMzE2ZGRiNTQ1NjFhZTMxZjU4OTBmNzRjYjc1ID0gJChgPGRpdiBpZD0iaHRtbF80ZDVjYzMxNmRkYjU0NTYxYWUzMWY1ODkwZjc0Y2I3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFtcHRvbiBJbm4gJmFtcDsgU3VpdGVzIChIb3RlbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjllODRhOTUwOTZhNDBhMmEzZDQ2YzE2NGI5Y2JmOGUuc2V0Q29udGVudChodG1sXzRkNWNjMzE2ZGRiNTQ1NjFhZTMxZjU4OTBmNzRjYjc1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kY2EyMGRmNmEwODg0YTcwYTliM2NkNDk4MmI4ODAyMi5iaW5kUG9wdXAocG9wdXBfZjllODRhOTUwOTZhNDBhMmEzZDQ2YzE2NGI5Y2JmOGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3YzAxNzhiNmY0ZDQ0YzM5MjY2OGNhZWM4ZDY4ZDdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc4MTQzNywgLTk2LjczNTEyMTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogImJsdWUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZmFlYzVmZTg3MTA0M2IwODQxOTVjMDcyZTY4MThiNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2IzMmM3ZDFkYTM5NDUzNjhmZmFhODU0NDU5OGQwNjYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg3YmFjMDBiNWU5ZjRhNzFhMzZhNWYxNmNhZjY4NjFjID0gJChgPGRpdiBpZD0iaHRtbF84N2JhYzAwYjVlOWY0YTcxYTM2YTVmMTZjYWY2ODYxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3VwZXIgU2F2ZXIgKFN1cGVybWFya2V0KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83YjMyYzdkMWRhMzk0NTM2OGZmYWE4NTQ0NTk4ZDA2Ni5zZXRDb250ZW50KGh0bWxfODdiYWMwMGI1ZTlmNGE3MWEzNmE1ZjE2Y2FmNjg2MWMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzI3YzAxNzhiNmY0ZDQ0YzM5MjY2OGNhZWM4ZDY4ZDdlLmJpbmRQb3B1cChwb3B1cF83YjMyYzdkMWRhMzk0NTM2OGZmYWE4NTQ0NTk4ZDA2NikKICAgICAgICA7CgogICAgICAgIAogICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x22da030c748>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# add markers to map\n",
    "for lat, lng, name, categories in zip(nearby_venues['lat'], nearby_venues['lng'], nearby_venues['name'], nearby_venues['categories']):\n",
    "    label = '{} ({})'.format(name, categories)\n",
    "    label = folium.Popup(label, parse_html=True)\n",
    "    folium.CircleMarker(\n",
    "        [lat, lng],\n",
    "        radius=5,\n",
    "        popup=label,\n",
    "        color='blue',\n",
    "        fill=True,\n",
    "        fill_color='#3186cc',\n",
    "        fill_opacity=0.7,\n",
    "        ).add_to(map_LNK)\n",
    "\n",
    "map_LNK"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# This function will return the sum of squares found in the data\n",
    "def calculate_wcss(data):\n",
    "    wcss = []\n",
    "    for n in range(2, 21):\n",
    "        kmeans = KMeans(n_clusters=n)\n",
    "        kmeans.fit(X=data)\n",
    "        wcss.append(kmeans.inertia_)\n",
    "\n",
    "    return wcss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>40.802319</td>\n",
       "      <td>-96.683149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>40.800463</td>\n",
       "      <td>-96.680036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>40.814234</td>\n",
       "      <td>-96.701008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>40.813599</td>\n",
       "      <td>-96.700540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>40.796821</td>\n",
       "      <td>-96.674826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227</th>\n",
       "      <td>40.738810</td>\n",
       "      <td>-96.680150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>228</th>\n",
       "      <td>40.723974</td>\n",
       "      <td>-96.681705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229</th>\n",
       "      <td>40.816108</td>\n",
       "      <td>-96.795131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>230</th>\n",
       "      <td>40.887348</td>\n",
       "      <td>-96.678617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>40.878144</td>\n",
       "      <td>-96.735121</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>232 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           lat        lng\n",
       "0    40.802319 -96.683149\n",
       "1    40.800463 -96.680036\n",
       "2    40.814234 -96.701008\n",
       "3    40.813599 -96.700540\n",
       "4    40.796821 -96.674826\n",
       "..         ...        ...\n",
       "227  40.738810 -96.680150\n",
       "228  40.723974 -96.681705\n",
       "229  40.816108 -96.795131\n",
       "230  40.887348 -96.678617\n",
       "231  40.878144 -96.735121\n",
       "\n",
       "[232 rows x 2 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Drop 'str' cols so we can use k-means clustering\n",
    "cluster_df = nearby_venues.drop(columns=['name', 'categories'])\n",
    "cluster_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.34804817245236686,\n",
       " 0.2123621655263781,\n",
       " 0.15941308819059363,\n",
       " 0.1124422749740121,\n",
       " 0.08793974648902303,\n",
       " 0.07787546934076488,\n",
       " 0.06760201626926661,\n",
       " 0.058603531149823695,\n",
       " 0.05307694673631565,\n",
       " 0.046405418408475035,\n",
       " 0.04248508032750019,\n",
       " 0.03737141937875458,\n",
       " 0.03418960068046657,\n",
       " 0.030142252086911396,\n",
       " 0.027788439492930205,\n",
       " 0.025640780223738995,\n",
       " 0.023750332291644125,\n",
       " 0.022590054827965667,\n",
       " 0.019589286338306075]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# calculating the within clusters sum-of-squares for 19 cluster amounts\n",
    "sum_of_squares = calculate_wcss(cluster_df)\n",
    "sum_of_squares"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# This function will return the optimal number of clusters\n",
    "def optimal_number_of_clusters(wcss):\n",
    "    x1, y1 = 2, wcss[0]\n",
    "    x2, y2 = 20, wcss[len(wcss)-1]\n",
    "\n",
    "    distances = []\n",
    "    for i in range(len(wcss)):\n",
    "        x0 = i+2\n",
    "        y0 = wcss[i]\n",
    "        numerator = abs((y2-y1)*x0 - (x2-x1)*y0 + x2*y1 - y2*x1)\n",
    "        denominator = math.sqrt((y2 - y1)**2 + (x2 - x1)**2)\n",
    "        distances.append(numerator/denominator)\n",
    "    \n",
    "    return distances.index(max(distances)) + 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# calculating the optimal number of clusters\n",
    "n = optimal_number_of_clusters(sum_of_squares)\n",
    "n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Labels: \n",
      " [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 2 0 2 2 2 2 2 2 0 2 2 2 2 2 2\n",
      " 0 2 2 2 2 2 2 2 0 0 2 3 0 0 2 0 2 2 2 3 2 2 2 0 2 2 2 4 0 0 4 2 2 0 3 0 0\n",
      " 2 3 5 2 3 3 0 3 5 0 2 0 2 0 2 0 2 0 0 2 0 2 2 0 1 2 2 5 2 1 0 0 3 3 5 3 3\n",
      " 0 0 0 5 4 1 0 0 3 3 3 3 1 1 0 4 5 1 3 0 0 3 3 4 4 3 1 3 3 5 3 4 4 0 3 3 3\n",
      " 1 0 2 1 1 3 1 1 3 5 1 1 3 4 4 0 3 0 0 1 5 3 3 3 3 0 1 3 3 1 1 3 4 3 3 1 1\n",
      " 4 1 5 3 1 3 1 4 3 1 0 3 1 0 3 1 3 1 1 3 4 1 3 1 1 1 4 1 1 1 1 1 1 1 3 1 4\n",
      " 4 4 3 4 5 1 1 5 4 4] \n",
      "\n",
      "Cluster centers: \n",
      " [[ 40.820588   -96.63913461]\n",
      " [ 40.74178794 -96.68440311]\n",
      " [ 40.81084834 -96.70181345]\n",
      " [ 40.76406174 -96.64015094]\n",
      " [ 40.86489106 -96.69252935]\n",
      " [ 40.80880071 -96.75189142]]\n"
     ]
    }
   ],
   "source": [
    "# set number of clusters equal to the optimal number\n",
    "kclusters = n\n",
    "\n",
    "# run k-means clustering\n",
    "kmeans = KMeans(n_clusters=kclusters, random_state=0).fit(cluster_df)\n",
    "\n",
    "# check cluster labels generated for each row in the dataframe\n",
    "print(\"Labels:\", \"\\n\", kmeans.labels_, \"\\n\")\n",
    "print(\"Cluster centers:\", \"\\n\", kmeans.cluster_centers_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Cluster Labels</th>\n",
       "      <th>name</th>\n",
       "      <th>categories</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>Sunken Gardens</td>\n",
       "      <td>Garden</td>\n",
       "      <td>40.802319</td>\n",
       "      <td>-96.683149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>Lincoln Children's Zoo</td>\n",
       "      <td>Zoo</td>\n",
       "      <td>40.800463</td>\n",
       "      <td>-96.680036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>Honest Abe's Burgers &amp; Freedom</td>\n",
       "      <td>Burger Joint</td>\n",
       "      <td>40.814234</td>\n",
       "      <td>-96.701008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>Yia Yia's</td>\n",
       "      <td>Pizza Place</td>\n",
       "      <td>40.813599</td>\n",
       "      <td>-96.700540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>Antelope Park</td>\n",
       "      <td>Park</td>\n",
       "      <td>40.796821</td>\n",
       "      <td>-96.674826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227</th>\n",
       "      <td>1</td>\n",
       "      <td>PepperJax Grill</td>\n",
       "      <td>American Restaurant</td>\n",
       "      <td>40.738810</td>\n",
       "      <td>-96.680150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>228</th>\n",
       "      <td>1</td>\n",
       "      <td>ALDI</td>\n",
       "      <td>Grocery Store</td>\n",
       "      <td>40.723974</td>\n",
       "      <td>-96.681705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229</th>\n",
       "      <td>5</td>\n",
       "      <td>Crete Carrier/Shaffer Trucking</td>\n",
       "      <td>Building</td>\n",
       "      <td>40.816108</td>\n",
       "      <td>-96.795131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>230</th>\n",
       "      <td>4</td>\n",
       "      <td>Hampton Inn &amp; Suites</td>\n",
       "      <td>Hotel</td>\n",
       "      <td>40.887348</td>\n",
       "      <td>-96.678617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>4</td>\n",
       "      <td>Super Saver</td>\n",
       "      <td>Supermarket</td>\n",
       "      <td>40.878144</td>\n",
       "      <td>-96.735121</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>232 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Cluster Labels                            name           categories  \\\n",
       "0                 2                  Sunken Gardens               Garden   \n",
       "1                 2          Lincoln Children's Zoo                  Zoo   \n",
       "2                 2  Honest Abe's Burgers & Freedom         Burger Joint   \n",
       "3                 2                       Yia Yia's          Pizza Place   \n",
       "4                 2                   Antelope Park                 Park   \n",
       "..              ...                             ...                  ...   \n",
       "227               1                 PepperJax Grill  American Restaurant   \n",
       "228               1                            ALDI        Grocery Store   \n",
       "229               5  Crete Carrier/Shaffer Trucking             Building   \n",
       "230               4            Hampton Inn & Suites                Hotel   \n",
       "231               4                     Super Saver          Supermarket   \n",
       "\n",
       "           lat        lng  \n",
       "0    40.802319 -96.683149  \n",
       "1    40.800463 -96.680036  \n",
       "2    40.814234 -96.701008  \n",
       "3    40.813599 -96.700540  \n",
       "4    40.796821 -96.674826  \n",
       "..         ...        ...  \n",
       "227  40.738810 -96.680150  \n",
       "228  40.723974 -96.681705  \n",
       "229  40.816108 -96.795131  \n",
       "230  40.887348 -96.678617  \n",
       "231  40.878144 -96.735121  \n",
       "\n",
       "[232 rows x 5 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# add clustering labels to dataframe\n",
    "nearby_venues.insert(0, 'Cluster Labels', kmeans.labels_)\n",
    "nearby_venues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1ID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFs0MC44MDY4NjIsIC05Ni42ODE2NzldLAogICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgICAgICAgICAgICAgem9vbTogMTIsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl8yYWNjZmU5ZWY4NzQ0YTBkYTU0MGE0OGQ4OTFiNjMxMCA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyYWU5YmE5MTMyMTQ2Y2VhZmQzZTU0ZmUxMjc3NDBhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAyMzE4OTE3NTAyMjM0LCAtOTYuNjgzMTQ4NTIwNjM0OTddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzdlNDY4NDY0MzkzNDdiN2EyNWViNDMxNWNiZWM0NGMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzVlYzM5NWY2NGUwOTRjZWY4NGQ1ODhlNDNhMTkxODUwID0gJChgPGRpdiBpZD0iaHRtbF81ZWMzOTVmNjRlMDk0Y2VmODRkNTg4ZTQzYTE5MTg1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFN1bmtlbiBHYXJkZW5zIChHYXJkZW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M3ZTQ2ODQ2NDM5MzQ3YjdhMjVlYjQzMTVjYmVjNDRjLnNldENvbnRlbnQoaHRtbF81ZWMzOTVmNjRlMDk0Y2VmODRkNTg4ZTQzYTE5MTg1MCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfODJhZTliYTkxMzIxNDZjZWFmZDNlNTRmZTEyNzc0MGEuYmluZFBvcHVwKHBvcHVwX2M3ZTQ2ODQ2NDM5MzQ3YjdhMjVlYjQzMTVjYmVjNDRjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kODY1YWNlNDkyZjI0YWRlOWM1OWY0ZTQzMTA5ZDdhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwMDQ2Mjg5MjExNDIwNCwgLTk2LjY4MDAzNjMyNDgxNDY3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2NlMzIzOWE4N2JlNTQyNTI5MjViODFlN2QyNGE5MmYzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ZDY5MGIyN2QyYTc0ODY3YjU0MDAwMTBmMDY1MjFlYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGQ2OTBiMjdkMmE3NDg2N2I1NDAwMDEwZjA2NTIxZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBMaW5jb2xuIENoaWxkcmVuJiMzOTtzIFpvbyAoWm9vKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jZTMyMzlhODdiZTU0MjUyOTI1YjgxZTdkMjRhOTJmMy5zZXRDb250ZW50KGh0bWxfNGQ2OTBiMjdkMmE3NDg2N2I1NDAwMDEwZjA2NTIxZWIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2Q4NjVhY2U0OTJmMjRhZGU5YzU5ZjRlNDMxMDlkN2EwLmJpbmRQb3B1cChwb3B1cF9jZTMyMzlhODdiZTU0MjUyOTI1YjgxZTdkMjRhOTJmMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJiNWNmOWJkMDkwNGNlZThkZTUzMzMzYzc2NTgxZmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQyMzM5NTg2NzQ1ODUsIC05Ni43MDEwMDc5MTIyOTE2NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yYzNjMTY4MGRiNGI0ZTdjODM4NWY4Mzk0YzFlZDZkYyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzdjOGFkN2YyNGE0NGYzYmI2ZWFkZTYxZDBmZDRiODMgPSAkKGA8ZGl2IGlkPSJodG1sXzM3YzhhZDdmMjRhNDRmM2JiNmVhZGU2MWQwZmQ0YjgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSG9uZXN0IEFiZSYjMzk7cyBCdXJnZXJzICZhbXA7IEZyZWVkb20gKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMmMzYzE2ODBkYjRiNGU3YzgzODVmODM5NGMxZWQ2ZGMuc2V0Q29udGVudChodG1sXzM3YzhhZDdmMjRhNDRmM2JiNmVhZGU2MWQwZmQ0YjgzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83MmI1Y2Y5YmQwOTA0Y2VlOGRlNTMzMzNjNzY1ODFmYi5iaW5kUG9wdXAocG9wdXBfMmMzYzE2ODBkYjRiNGU3YzgzODVmODM5NGMxZWQ2ZGMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmZGRkMDgwYzYyOTQzM2NhOTBkMjgwOGIxNWIzODc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzNTk5NDA4MjU4NzcsIC05Ni43MDA1Mzk4NzEzNTM3NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81OWY4M2NkN2M1MTA0ZDA5Yjk0NTA3YTMwZGI2OWE1ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODA3NmUwYzY0YjdlNDYwZjlmN2E0ODM2MWMwM2M4ZjIgPSAkKGA8ZGl2IGlkPSJodG1sXzgwNzZlMGM2NGI3ZTQ2MGY5ZjdhNDgzNjFjMDNjOGYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gWWlhIFlpYSYjMzk7cyAoUGl6emEgUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU5ZjgzY2Q3YzUxMDRkMDliOTQ1MDdhMzBkYjY5YTVmLnNldENvbnRlbnQoaHRtbF84MDc2ZTBjNjRiN2U0NjBmOWY3YTQ4MzYxYzAzYzhmMik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMGZkZGQwODBjNjI5NDMzY2E5MGQyODA4YjE1YjM4NzkuYmluZFBvcHVwKHBvcHVwXzU5ZjgzY2Q3YzUxMDRkMDliOTQ1MDdhMzBkYjY5YTVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjY0ZDZiMjA5MGY0Nzg1YjYyNjI5ZmYwOGNkMzNjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NjgyMDc3NDc5ODc3NSwgLTk2LjY3NDgyNTkyMTAzMjMyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2NlZTk1YWVlMmYxZjQyNmQ5YmE5MmE0ZGU1NDZlODg0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kMDIxYjcwYzEwNTg0MDk2YThhZDcyM2Y5MTQ5Njg0NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDAyMWI3MGMxMDU4NDA5NmE4YWQ3MjNmOTE0OTY4NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBBbnRlbG9wZSBQYXJrIChQYXJrKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jZWU5NWFlZTJmMWY0MjZkOWJhOTJhNGRlNTQ2ZTg4NC5zZXRDb250ZW50KGh0bWxfZDAyMWI3MGMxMDU4NDA5NmE4YWQ3MjNmOTE0OTY4NDUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzRmNjRkNmIyMDkwZjQ3ODViNjI2MjlmZjA4Y2QzM2M0LmJpbmRQb3B1cChwb3B1cF9jZWU5NWFlZTJmMWY0MjZkOWJhOTJhNGRlNTQ2ZTg4NCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY0NmVlM2RlMDYwNDE3ZGIzNmJkNjE5N2FiODgzN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ5MjUxMzA2MTQ0NTUsIC05Ni43MDIxNzAyMTU3NjQxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ2Y2VkZTUzNDc0NDRlYzRiODAwMDBhOWU2ZDI4YjBmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNWU5ZTZhYzdiYzU0NTJhYjE4MTliZmE1NmRjYTY0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjVlOWU2YWM3YmM1NDUyYWIxODE5YmZhNTZkY2E2NGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBCaXNvbiBXaXRjaGVzIChTYW5kd2ljaCBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDZjZWRlNTM0NzQ0NGVjNGI4MDAwMGE5ZTZkMjhiMGYuc2V0Q29udGVudChodG1sX2I1ZTllNmFjN2JjNTQ1MmFiMTgxOWJmYTU2ZGNhNjRkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9mZjQ2ZWUzZGUwNjA0MTdkYjM2YmQ2MTk3YWI4ODM3YS5iaW5kUG9wdXAocG9wdXBfNDZjZWRlNTM0NzQ0NGVjNGI4MDAwMGE5ZTZkMjhiMGYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3NzM1OTc5Mzg5NDQyNTQ5OTYzNDQ3MzNjMzc2ZGJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzNzc3LCAtOTYuNzAwMDQ2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JhM2Q0NWM3NDZkNzRjZTA5MmEwZDRmMDdhZTI5MGQ1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lOTQ4ZjA1ODQwMjY0NzU5ODE1Mjk0N2M4NjMwZmRkMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTk0OGYwNTg0MDI2NDc1OTgxNTI5NDdjODYzMGZkZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBGdXp6eSYjMzk7cyBUYWNvIFNob3AgKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmEzZDQ1Yzc0NmQ3NGNlMDkyYTBkNGYwN2FlMjkwZDUuc2V0Q29udGVudChodG1sX2U5NDhmMDU4NDAyNjQ3NTk4MTUyOTQ3Yzg2MzBmZGQyKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jNzczNTk3OTM4OTQ0MjU0OTk2MzQ0NzMzYzM3NmRiZi5iaW5kUG9wdXAocG9wdXBfYmEzZDQ1Yzc0NmQ3NGNlMDkyYTBkNGYwN2FlMjkwZDUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyYTAyMWJiNDYyMTRhY2Q4NjMyOGM1MTI2NTZjNzAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxODgwMTMyNjQ5MDUsIC05Ni42ODE0NTU0OTM3MjM2Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yYmQyN2ZjMTA2NGU0MGY5YTg0OWJjMmNhZGVkZDRmOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYmIzZjdkMDE2ZDYyNDgyZDliZDUwY2ZjZDZhYWM4MmQgPSAkKGA8ZGl2IGlkPSJodG1sX2JiM2Y3ZDAxNmQ2MjQ4MmQ5YmQ1MGNmY2Q2YWFjODJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gUGllemFubyYjMzk7cyAoSXRhbGlhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yYmQyN2ZjMTA2NGU0MGY5YTg0OWJjMmNhZGVkZDRmOS5zZXRDb250ZW50KGh0bWxfYmIzZjdkMDE2ZDYyNDgyZDliZDUwY2ZjZDZhYWM4MmQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2YyYTAyMWJiNDYyMTRhY2Q4NjMyOGM1MTI2NTZjNzAxLmJpbmRQb3B1cChwb3B1cF8yYmQyN2ZjMTA2NGU0MGY5YTg0OWJjMmNhZGVkZDRmOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTU3NzFkYzk2MzM0NGM3NDliNDQ4N2JlNWMyNGEyN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTAyODAyOTI5MzA0NiwgLTk2LjY5MDQxMDk0MTYxMTVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjU1MjdhZTM4YTg0NDdkNmJlNTVjNjUwYmE2YmM4MDAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q1OGM0OWQyNGU2YjQwZTY5MTc3MGMzMjE3YWU2ZjBjID0gJChgPGRpdiBpZD0iaHRtbF9kNThjNDlkMjRlNmI0MGU2OTE3NzBjMzIxN2FlNmYwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFRoZSBNaWxsIEAgVGVsZWdyYXBoIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMjU1MjdhZTM4YTg0NDdkNmJlNTVjNjUwYmE2YmM4MDAuc2V0Q29udGVudChodG1sX2Q1OGM0OWQyNGU2YjQwZTY5MTc3MGMzMjE3YWU2ZjBjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xNTc3MWRjOTYzMzQ0Yzc0OWI0NDg3YmU1YzI0YTI3YS5iaW5kUG9wdXAocG9wdXBfMjU1MjdhZTM4YTg0NDdkNmJlNTVjNjUwYmE2YmM4MDApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5MWRlMzdhYzgwYjRjN2ViZDdkMTg1YWJjMTEwYzVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0MjMyMTc2MjA4NSwgLTk2LjcwNzYxMDY1ODc0Mjc4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzJmZDAzNDU2MDk1ZDQ5MDM4NzNmM2RmYTZhMzRkNjU3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zMDZmODM0MTE1MDk0Mjg4OWQzOTk3MGIwNjA2NTdkOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzA2ZjgzNDExNTA5NDI4ODlkMzk5NzBiMDYwNjU3ZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBCbHVlIE9yY2hpZCAoVGhhaSBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yZmQwMzQ1NjA5NWQ0OTAzODczZjNkZmE2YTM0ZDY1Ny5zZXRDb250ZW50KGh0bWxfMzA2ZjgzNDExNTA5NDI4ODlkMzk5NzBiMDYwNjU3ZDkpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2Q5MWRlMzdhYzgwYjRjN2ViZDdkMTg1YWJjMTEwYzVlLmJpbmRQb3B1cChwb3B1cF8yZmQwMzQ1NjA5NWQ0OTAzODczZjNkZmE2YTM0ZDY1NykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTc0ODJkYjlkN2YyNGIwOTkxZjlmZmJlYmE4MTU2MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTA3NzQyLCAtOTYuNzA2Njc0Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83MTc5ZTg0NWQ5MDA0M2VhOTM5M2RhZTIyMTJhOThjOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWI1ZjVlMDI5YWViNDFiNzkwOGM3YTBiYWRkM2IzMWUgPSAkKGA8ZGl2IGlkPSJodG1sX2FiNWY1ZTAyOWFlYjQxYjc5MDhjN2EwYmFkZDNiMzFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gR3JlZW4gR8OidGVhdSAoRnJlbmNoIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzcxNzllODQ1ZDkwMDQzZWE5MzkzZGFlMjIxMmE5OGM4LnNldENvbnRlbnQoaHRtbF9hYjVmNWUwMjlhZWI0MWI3OTA4YzdhMGJhZGQzYjMxZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTc0ODJkYjlkN2YyNGIwOTkxZjlmZmJlYmE4MTU2MTEuYmluZFBvcHVwKHBvcHVwXzcxNzllODQ1ZDkwMDQzZWE5MzkzZGFlMjIxMmE5OGM4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZWY2OWI3YjhiNGE0Yzk2ODViOTQ4MWFkZmVhNWU5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMDU3OTgzMzk1MjEzLCAtOTYuNzA2MDA4OTczNjAzNzddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTUxMGQ0YjFjNmE5NDIxMGFiNDYxNTBhNWY5OWI4YTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzU3YmU0MmJmOThmNzRiOWM5NWUxODBkZWI4YzEyMDAwID0gJChgPGRpdiBpZD0iaHRtbF81N2JlNDJiZjk4Zjc0YjljOTVlMTgwZGViOGMxMjAwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIE1lbW9yaWFsIFN0YWRpdW0gKENvbGxlZ2UgRm9vdGJhbGwgRmllbGQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E1MTBkNGIxYzZhOTQyMTBhYjQ2MTUwYTVmOTliOGEyLnNldENvbnRlbnQoaHRtbF81N2JlNDJiZjk4Zjc0YjljOTVlMTgwZGViOGMxMjAwMCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOGVmNjliN2I4YjRhNGM5Njg1Yjk0ODFhZGZlYTVlOTMuYmluZFBvcHVwKHBvcHVwX2E1MTBkNGIxYzZhOTQyMTBhYjQ2MTUwYTVmOTliOGEyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDI2MTJiYzVjZmY0NTM3OWZiZDdmMGQ0NDM4NTVmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDgwNTg0ODE0MjA0LCAtOTYuNzA5ODI5MTYwNzM4MzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZDE5NmIzMzE2MDU4NDk1Yjg5MTA1YTlmMjFjZjZhNjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdhOWU1ZDQ0MDI2ZDRmOTZhYjg4ODczOGQ3ODFlYmEyID0gJChgPGRpdiBpZD0iaHRtbF83YTllNWQ0NDAyNmQ0Zjk2YWI4ODg3MzhkNzgxZWJhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFRoZSBNaWxsIENvZmZlZSAmYW1wOyBUZWEgKENvZmZlZSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kMTk2YjMzMTYwNTg0OTViODkxMDVhOWYyMWNmNmE2My5zZXRDb250ZW50KGh0bWxfN2E5ZTVkNDQwMjZkNGY5NmFiODg4NzM4ZDc4MWViYTIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzk0MjYxMmJjNWNmZjQ1Mzc5ZmJkN2YwZDQ0Mzg1NWZhLmJpbmRQb3B1cChwb3B1cF9kMTk2YjMzMTYwNTg0OTViODkxMDVhOWYyMWNmNmE2MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTY1M2NlYzg5NjA1NGE1OThiNWEzODY4ZWIwNTAxYWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQyMTU2MTg5OTk3NTQsIC05Ni43MDc0MDI5OTE1NjA0N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jMDEwMGE3NzBlMzA0ODQwYTNhYzZjYzdjMjQzNzk2ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzg1MjkyYmIxYjc0NGY4ZmJjNDE0ZTUyMjExNTIyM2QgPSAkKGA8ZGl2IGlkPSJodG1sXzc4NTI5MmJiMWI3NDRmOGZiYzQxNGU1MjIxMTUyMjNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gQm9pbGVyIEJyZXdpbmcgQ29tcGFueSAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzAxMDBhNzcwZTMwNDg0MGEzYWM2Y2M3YzI0Mzc5NmYuc2V0Q29udGVudChodG1sXzc4NTI5MmJiMWI3NDRmOGZiYzQxNGU1MjIxMTUyMjNkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNjUzY2VjODk2MDU0YTU5OGI1YTM4NjhlYjA1MDFhYy5iaW5kUG9wdXAocG9wdXBfYzAxMDBhNzcwZTMwNDg0MGEzYWM2Y2M3YzI0Mzc5NmYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3NzQ5N2Y1ZmE1ZTRkODZiNDFjOTc5Mjg3ZDdlZGRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NzA2MzQwNDYzNTEsIC05Ni43MTEwMjQ0OTIwOTc4OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kZWJkY2FlNDcxZGY0YzQ4OGU4NTQzNmIwOTM0NDZiYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDU3NmUwYzI0NTc1NGQ5ZWFmMGZhNzA5N2RjYzk2OWEgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1NzZlMGMyNDU3NTRkOWVhZjBmYTcwOTdkY2M5NjlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSXZhbm5hIENvbmUgKEljZSBDcmVhbSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kZWJkY2FlNDcxZGY0YzQ4OGU4NTQzNmIwOTM0NDZiYS5zZXRDb250ZW50KGh0bWxfZDU3NmUwYzI0NTc1NGQ5ZWFmMGZhNzA5N2RjYzk2OWEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA3NzQ5N2Y1ZmE1ZTRkODZiNDFjOTc5Mjg3ZDdlZGRiLmJpbmRQb3B1cChwb3B1cF9kZWJkY2FlNDcxZGY0YzQ4OGU4NTQzNmIwOTM0NDZiYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdkZjgxYTliNWQyNDU1MTgyZTVmNzhkNTYyM2U4YzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQyNjA2LCAtOTYuNzA0ODE0Mzk5OTk5OTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjkxYThmOTgwOGNjNDU3MGFiMzBiOWM2Y2VjYWYzM2QgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MwZTIyYWZhNjJhMjRkMTdhYjNhZmU4MzRhMzJhMjJhID0gJChgPGRpdiBpZD0iaHRtbF9jMGUyMmFmYTYyYTI0ZDE3YWIzYWZlODM0YTMyYTIyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIE1hcmN1cyBMaW5jb2xuIEdyYW5kIENpbmVtYSAoTW92aWUgVGhlYXRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjkxYThmOTgwOGNjNDU3MGFiMzBiOWM2Y2VjYWYzM2Quc2V0Q29udGVudChodG1sX2MwZTIyYWZhNjJhMjRkMTdhYjNhZmU4MzRhMzJhMjJhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zN2RmODFhOWI1ZDI0NTUxODJlNWY3OGQ1NjIzZThjMi5iaW5kUG9wdXAocG9wdXBfNjkxYThmOTgwOGNjNDU3MGFiMzBiOWM2Y2VjYWYzM2QpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5NTgzMGE0ZDM0MzQ5NjBiNmIyYTIwNjQxZTk5YWJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE4MDA0NjYwNTExOTcsIC05Ni43MTIzMTgwODI1ODMzMV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zYjM0YjkyZWI4MDA0MDMwYjkxODZlZWRiODcxMmI3YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTk2YWM5NmE1NGM5NGViMmE0NWYzMjJlNjQ0MjgwMDAgPSAkKGA8ZGl2IGlkPSJodG1sXzE5NmFjOTZhNTRjOTRlYjJhNDVmMzIyZTY0NDI4MDAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gUGlubmFjbGUgQmFuayBBcmVuYSAoQ29sbGVnZSBCYXNrZXRiYWxsIENvdXJ0KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zYjM0YjkyZWI4MDA0MDMwYjkxODZlZWRiODcxMmI3Yi5zZXRDb250ZW50KGh0bWxfMTk2YWM5NmE1NGM5NGViMmE0NWYzMjJlNjQ0MjgwMDApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzM5NTgzMGE0ZDM0MzQ5NjBiNmIyYTIwNjQxZTk5YWJmLmJpbmRQb3B1cChwb3B1cF8zYjM0YjkyZWI4MDA0MDMwYjkxODZlZWRiODcxMmI3YikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTA3ZDI5YzI5N2FiNDdjZDhhY2NhYWUzMDY0NDg4YTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjI3MDI0ODYyOTcyMywgLTk2LjY4MzE4NzkzNDM1NjQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzUwOTM2ZmU1MjQzYTRkNjA4MDNlMjU2ZWU3NWUyOWY3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lMzM1MWVhMjU4ZTI0N2ZiYWY2MDAwMGRjMGRmYTYzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTMzNTFlYTI1OGUyNDdmYmFmNjAwMDBkYzBkZmE2M2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBCYW5od2ljaCBDYWZlIChDYWbDqSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTA5MzZmZTUyNDNhNGQ2MDgwM2UyNTZlZTc1ZTI5Zjcuc2V0Q29udGVudChodG1sX2UzMzUxZWEyNThlMjQ3ZmJhZjYwMDAwZGMwZGZhNjNlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMDdkMjljMjk3YWI0N2NkOGFjY2FhZTMwNjQ0ODhhMi5iaW5kUG9wdXAocG9wdXBfNTA5MzZmZTUyNDNhNGQ2MDgwM2UyNTZlZTc1ZTI5ZjcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhMGZjMDI4ZGUwYzQyMjE5ZmZiNGE3NDIwNTUyNjIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0ODk0MTA0NjQyOTc0LCAtOTYuNzEwNjYzNTM0ODI1NjFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZTU4ZDczYzFhODJkNDk1ZWI3YzAwYjIxNGExMjU3YWQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzNmMDQ0M2E3Yjg0OTRhYjhiNWFjN2Y1OWZiZjk3NDc1ID0gJChgPGRpdiBpZD0iaHRtbF8zZjA0NDNhN2I4NDk0YWI4YjVhYzdmNTlmYmY5NzQ3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEZhcm1lcnPigJkgTWFya2V0IChGYXJtZXJzIE1hcmtldCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTU4ZDczYzFhODJkNDk1ZWI3YzAwYjIxNGExMjU3YWQuc2V0Q29udGVudChodG1sXzNmMDQ0M2E3Yjg0OTRhYjhiNWFjN2Y1OWZiZjk3NDc1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81YTBmYzAyOGRlMGM0MjIxOWZmYjRhNzQyMDU1MjYyMy5iaW5kUG9wdXAocG9wdXBfZTU4ZDczYzFhODJkNDk1ZWI3YzAwYjIxNGExMjU3YWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjNjliZmFkZWU4YjQwZTA5OTMwYzNhYzdmMTBiMjA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzNTg5NjY0ODU5OSwgLTk2LjcwMjMzMDc1MDc1MjY4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZkYmIxOWJkNDZhMTQzYjE4MzNjNmQ5ZGYyOTZlOTljID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yNjJhMGRiYjM3MzI0YjNmYTI3YWFjYzdjOWUxYzg5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjYyYTBkYmIzNzMyNGIzZmEyN2FhY2M3YzllMWM4OWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBUaGUgU3VsdGFuJiMzOTtzIEtpdGUgKE1pZGRsZSBFYXN0ZXJuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZkYmIxOWJkNDZhMTQzYjE4MzNjNmQ5ZGYyOTZlOTljLnNldENvbnRlbnQoaHRtbF8yNjJhMGRiYjM3MzI0YjNmYTI3YWFjYzdjOWUxYzg5Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYWM2OWJmYWRlZThiNDBlMDk5MzBjM2FjN2YxMGIyMDguYmluZFBvcHVwKHBvcHVwX2ZkYmIxOWJkNDZhMTQzYjE4MzNjNmQ5ZGYyOTZlOTljKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYzExOWFkYTIxNGU0ZTdmOGY1MmU3ZTcwN2Y0YzE5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDE1Mzg3MzQ1Njk0LCAtOTYuNjU1MTQ2MTA1NDQ4NDddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWMzMTQ1MDU5YWU4NDFmZjk0M2VlZWM4YjIxMDMzMzggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y3NThiOTBjYTZlZjQ0Y2ZhZDZlODE2OTIwNmNmYzZkID0gJChgPGRpdiBpZD0iaHRtbF9mNzU4YjkwY2E2ZWY0NGNmYWQ2ZTgxNjkyMDZjZmM2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIHlvZ3VydGluaSAoRnJvemVuIFlvZ3VydCBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hYzMxNDUwNTlhZTg0MWZmOTQzZWVlYzhiMjEwMzMzOC5zZXRDb250ZW50KGh0bWxfZjc1OGI5MGNhNmVmNDRjZmFkNmU4MTY5MjA2Y2ZjNmQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2VjMTE5YWRhMjE0ZTRlN2Y4ZjUyZTdlNzA3ZjRjMTkxLmJpbmRQb3B1cChwb3B1cF9hYzMxNDUwNTlhZTg0MWZmOTQzZWVlYzhiMjEwMzMzOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdmYmJkY2RiY2M3NGM4N2IwY2ZmYTBkY2Q3YzAxNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTkxODczNzEyMTQ2OSwgLTk2LjY3MTcyODgyMDg0Mjg2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZjN2Y2MjgwODkzOTQyNWI5NDI0NzMzYmVmYTE1MjFiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zNmY3ZDVjN2Q5M2Q0YmU3YjQwNDgxZDE1ODI0NzU0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzZmN2Q1YzdkOTNkNGJlN2I0MDQ4MWQxNTgyNDc1NDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBNb3JhbiYjMzk7cyBMaXF1b3IgV29ya3MgKEJlZXIgR2FyZGVuKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mYzdmNjI4MDg5Mzk0MjViOTQyNDczM2JlZmExNTIxYi5zZXRDb250ZW50KGh0bWxfMzZmN2Q1YzdkOTNkNGJlN2I0MDQ4MWQxNTgyNDc1NDIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzg3ZmJiZGNkYmNjNzRjODdiMGNmZmEwZGNkN2MwMTczLmJpbmRQb3B1cChwb3B1cF9mYzdmNjI4MDg5Mzk0MjViOTQyNDczM2JlZmExNTIxYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTViOWY0OGU4YTE0NDBhNTkyNGZhOGExZGZhMjhjNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTY0MTc3NTY0MDMxOCwgLTk2LjcxMTYyODc1MDQ2OTMzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVlZDJiODEzZDIwNTRjMTdhNDBhYTViMDllNmM1N2JjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zNTQzODY3ZTQ5OWI0YmM3OWIxMzNkNzdlZmY3YTdjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzU0Mzg2N2U0OTliNGJjNzliMTMzZDc3ZWZmN2E3YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBUaGUgUmFpbHlhcmQgKFBsYXphKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81ZWQyYjgxM2QyMDU0YzE3YTQwYWE1YjA5ZTZjNTdiYy5zZXRDb250ZW50KGh0bWxfMzU0Mzg2N2U0OTliNGJjNzliMTMzZDc3ZWZmN2E3YzYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzU1YjlmNDhlOGExNDQwYTU5MjRmYThhMWRmYTI4YzYwLmJpbmRQb3B1cChwb3B1cF81ZWQyYjgxM2QyMDU0YzE3YTQwYWE1YjA5ZTZjNTdiYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjZlZjBlNzU2YmY3NDM3Y2E3MzAzZmNlNDNlMTgyZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDAwNTg5NDI2MDM1OSwgLTk2LjY1MDc3OTE5MzA1MjI5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc3ZWQ1NmYzYzM5NjQ0OWZiMDcwZThlNmUxMTY1MjhhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hZmVjNjY4ZjAwZTQ0YWY3OTZlZThiYzJjMDg0MjlkNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWZlYzY2OGYwMGU0NGFmNzk2ZWU4YmMyYzA4NDI5ZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBQaWVkbW9udCBCaXN0cm8gKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc3ZWQ1NmYzYzM5NjQ0OWZiMDcwZThlNmUxMTY1MjhhLnNldENvbnRlbnQoaHRtbF9hZmVjNjY4ZjAwZTQ0YWY3OTZlZThiYzJjMDg0MjlkNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjZlZjBlNzU2YmY3NDM3Y2E3MzAzZmNlNDNlMTgyZTguYmluZFBvcHVwKHBvcHVwXzc3ZWQ1NmYzYzM5NjQ0OWZiMDcwZThlNmUxMTY1MjhhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MWVlNTliOTJmMzE0YTUyODBkMzQwMTc2NjM5ZTVmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDQ4MTMyNDc4MDA0LCAtOTYuNzEyMDkyMDMxOTQ2NTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjA1ZjQ4MTZhOGUwNGIyNzkyN2FmNWI3ZGNlNzgwNDEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzEyM2YzYzVkMTFiZTRkNTY5ZTgyMDRjZGJhOWQzMzQ2ID0gJChgPGRpdiBpZD0iaHRtbF8xMjNmM2M1ZDExYmU0ZDU2OWU4MjA0Y2RiYTlkMzM0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEhvcENhdCAoQmVlciBCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzIwNWY0ODE2YThlMDRiMjc5MjdhZjViN2RjZTc4MDQxLnNldENvbnRlbnQoaHRtbF8xMjNmM2M1ZDExYmU0ZDU2OWU4MjA0Y2RiYTlkMzM0Nik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTFlZTU5YjkyZjMxNGE1MjgwZDM0MDE3NjYzOWU1ZjUuYmluZFBvcHVwKHBvcHVwXzIwNWY0ODE2YThlMDRiMjc5MjdhZjViN2RjZTc4MDQxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzY4NzU4ZWYwZjQ0NGIyOGMzYzNlODY1MjAxYTdmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NjYyMDQ5ODQzNTQ1LCAtOTYuNjk2NjIxMTQ0MDA4MTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfM2E1YzAzOTYyY2Y0NDYyNWJhN2EwZmRmNjMwMzUxMzEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VkYTFiZTNiODY2YTQ4N2VhN2EwYzU5NWY4ZDVhNjQ0ID0gJChgPGRpdiBpZD0iaHRtbF9lZGExYmUzYjg2NmE0ODdlYTdhMGM1OTVmOGQ1YTY0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEdyYXRlZnVsIEJyZWFkICZhbXA7IEZyZWFrYmVhdCBWZWdldGFyaWFuIChWZWdldGFyaWFuIC8gVmVnYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2E1YzAzOTYyY2Y0NDYyNWJhN2EwZmRmNjMwMzUxMzEuc2V0Q29udGVudChodG1sX2VkYTFiZTNiODY2YTQ4N2VhN2EwYzU5NWY4ZDVhNjQ0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82YzY4NzU4ZWYwZjQ0NGIyOGMzYzNlODY1MjAxYTdmZC5iaW5kUG9wdXAocG9wdXBfM2E1YzAzOTYyY2Y0NDYyNWJhN2EwZmRmNjMwMzUxMzEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmODA2OWI2N2Q3ZjQyYTc4NTFkOTgxMjFiZWI5ZWYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1Njk1ODQwNjc5MzQ2LCAtOTYuNzExMzUzMTI4MTAwODhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTUwZGM3MzQzOTg0NDViOWEzYWZlNjYyOGNiYzlkOWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzY3MDg3MzM5MjU3ODQxZWZhYzYzMjUyYTQ5MGRjOGNhID0gJChgPGRpdiBpZD0iaHRtbF82NzA4NzMzOTI1Nzg0MWVmYWM2MzI1MmE0OTBkYzhjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEtpbmthaWRlciBUYXAgUm9vbSAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTUwZGM3MzQzOTg0NDViOWEzYWZlNjYyOGNiYzlkOWUuc2V0Q29udGVudChodG1sXzY3MDg3MzM5MjU3ODQxZWZhYzYzMjUyYTQ5MGRjOGNhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hZjgwNjliNjdkN2Y0MmE3ODUxZDk4MTIxYmViOWVmMy5iaW5kUG9wdXAocG9wdXBfMTUwZGM3MzQzOTg0NDViOWEzYWZlNjYyOGNiYzlkOWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ODhkZGE2OWY4ZDQ3NjJiZjg3Yzk4MmEzMTZhNWFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA2MTA1NTk0NjkwNTg1LCAtOTYuNzA1ODI5MTczMjU3MTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzdjNzBiNjFhNWQxNGFkM2E5MDUwNmM0NGIyZmNiYTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2M2MGM1YmMzZmI0ZjRiMTM5MGU5ZWEwOWY4YmQyY2U1ID0gJChgPGRpdiBpZD0iaHRtbF9jNjBjNWJjM2ZiNGY0YjEzOTBlOWVhMDlmOGJkMmNlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIERhIFZpbmNpJiMzOTtzIEl0YWxpYW4gU2lkZXdhbGsgKEl0YWxpYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzdjNzBiNjFhNWQxNGFkM2E5MDUwNmM0NGIyZmNiYTUuc2V0Q29udGVudChodG1sX2M2MGM1YmMzZmI0ZjRiMTM5MGU5ZWEwOWY4YmQyY2U1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kNjg4ZGRhNjlmOGQ0NzYyYmY4N2M5ODJhMzE2YTVhZS5iaW5kUG9wdXAocG9wdXBfYzdjNzBiNjFhNWQxNGFkM2E5MDUwNmM0NGIyZmNiYTUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzNmNmMTFlMmQzYjRmODNhNjFmZGM5Y2NjZjE4YzkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0ODM3ODk5NjQyMzMsIC05Ni43MDIwMzM4NzU2MDIyNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82OTRkZjBlNGQyODM0OTY3OTZhMWVlNGQ1MzNlN2FlZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTk5ZThmZjBiNDAxNDk0ZDhhODUwZmJlNzRkNzhhOTAgPSAkKGA8ZGl2IGlkPSJodG1sXzE5OWU4ZmYwYjQwMTQ5NGQ4YTg1MGZiZTc0ZDc4YTkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gVGhlIENvZmZlZSBIb3VzZSAoQ2Fmw6kpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzY5NGRmMGU0ZDI4MzQ5Njc5NmExZWU0ZDUzM2U3YWVkLnNldENvbnRlbnQoaHRtbF8xOTllOGZmMGI0MDE0OTRkOGE4NTBmYmU3NGQ3OGE5MCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTM2Y2YxMWUyZDNiNGY4M2E2MWZkYzljY2NmMThjOTAuYmluZFBvcHVwKHBvcHVwXzY5NGRmMGU0ZDI4MzQ5Njc5NmExZWU0ZDUzM2U3YWVkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzYyNjFjODEzNmE0MWU1YWQ4MGM1NzdiOTI3YWJhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDkwODgyMDY4MzM2NCwgLTk2LjcxMDEwMTc4MjQ1ODUyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MzMDEzMmY1N2Q0MDQ2YzI5ZmNmZGEzYmYxMDRiMjYyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iMTNkZTMwNWU1Y2Q0ZmYwYWEyZmQ3ZDM3ODc0MzlkZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjEzZGUzMDVlNWNkNGZmMGFhMmZkN2QzNzg3NDM5ZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBUaGUgT3ZlbiAoSW5kaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2MzMDEzMmY1N2Q0MDQ2YzI5ZmNmZGEzYmYxMDRiMjYyLnNldENvbnRlbnQoaHRtbF9iMTNkZTMwNWU1Y2Q0ZmYwYWEyZmQ3ZDM3ODc0MzlkZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMjM2MjYxYzgxMzZhNDFlNWFkODBjNTc3YjkyN2FiYTguYmluZFBvcHVwKHBvcHVwX2MzMDEzMmY1N2Q0MDQ2YzI5ZmNmZGEzYmYxMDRiMjYyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGMyNmRkYTJmMzk0ZGY5OGY5MzRkNTU2NTA4OTg1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDA4NjMsIC05Ni42NDgyNzQxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE5MDM5ZTQyNWM2MjRmMjg5YWQwMDI3NmY4NTAwYmI1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81NzBmODgyYzAyODU0MmIxYTI5OWEwYTI0ZmFhYThiOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTcwZjg4MmMwMjg1NDJiMWEyOTlhMGEyNGZhYWE4YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBGcmVzaCBUaHltZSBGYXJtZXJzIE1hcmtldCAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTkwMzllNDI1YzYyNGYyODlhZDAwMjc2Zjg1MDBiYjUuc2V0Q29udGVudChodG1sXzU3MGY4ODJjMDI4NTQyYjFhMjk5YTBhMjRmYWFhOGI5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kOGMyNmRkYTJmMzk0ZGY5OGY5MzRkNTU2NTA4OTg1Mi5iaW5kUG9wdXAocG9wdXBfMTkwMzllNDI1YzYyNGYyODlhZDAwMjc2Zjg1MDBiYjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxNWUzZTcxYmNmZDRmZmViYzMzYTExMWZlMTlmMTljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NjA2NjE4OTUwOTA0LCAtOTYuNzA5ODc0MzYxNjI5MjhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzA1NjhkNjExMGNlNGFiMjkxZjA3YTE5MjIwMzFhOTAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzVlOTBhM2UyYzRiNTRhNGQ4MTQ5NDRhZGQyODRkZmY1ID0gJChgPGRpdiBpZD0iaHRtbF81ZTkwYTNlMmM0YjU0YTRkODE0OTQ0YWRkMjg0ZGZmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIENyZXNjZW50IE1vb24gQ29mZmVlIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzA1NjhkNjExMGNlNGFiMjkxZjA3YTE5MjIwMzFhOTAuc2V0Q29udGVudChodG1sXzVlOTBhM2UyYzRiNTRhNGQ4MTQ5NDRhZGQyODRkZmY1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lMTVlM2U3MWJjZmQ0ZmZlYmMzM2ExMTFmZTE5ZjE5Yy5iaW5kUG9wdXAocG9wdXBfYzA1NjhkNjExMGNlNGFiMjkxZjA3YTE5MjIwMzFhOTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhZGM1Nzc2ZTQ2MDRmOThiZTk4MjBlYTE4NjllN2ZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIzOTE0LCAtOTYuNjkxODYyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNlMWFmMjg0YWVjYjQ3ZjFhMDA1ODJmZmVmZmVhNjA1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82ZGNmNmQ4NTAwZjk0YzEwOTVlZGIwODZkYzU4OWFiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNmRjZjZkODUwMGY5NGMxMDk1ZWRiMDg2ZGM1ODlhYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBUaGUgQmF5IChTa2F0ZSBQYXJrKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zZTFhZjI4NGFlY2I0N2YxYTAwNTgyZmZlZmZlYTYwNS5zZXRDb250ZW50KGh0bWxfNmRjZjZkODUwMGY5NGMxMDk1ZWRiMDg2ZGM1ODlhYmMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2VhZGM1Nzc2ZTQ2MDRmOThiZTk4MjBlYTE4NjllN2ZhLmJpbmRQb3B1cChwb3B1cF8zZTFhZjI4NGFlY2I0N2YxYTAwNTgyZmZlZmZlYTYwNSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDg2OGVlZTFjZDIwNGFiY2JjYzZkMjcwNjQzYmRjNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTUwNzU4MDQyNDc4MywgLTk2LjcxMDg0MjIxODI2MDMxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E5MWZkNTBiYTdmMTQ0MTBhZGMwMGU0YWVmN2NmYjQ0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wNjg4OWVjNjAyMDE0NGNmYjlmZjIyNmM2ZGRmNzdiZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDY4ODllYzYwMjAxNDRjZmI5ZmYyMjZjNmRkZjc3YmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBMYXpsbyYjMzk7cyBCcmV3ZXJ5ICZhbXA7IEdyaWxsIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hOTFmZDUwYmE3ZjE0NDEwYWRjMDBlNGFlZjdjZmI0NC5zZXRDb250ZW50KGh0bWxfMDY4ODllYzYwMjAxNDRjZmI5ZmYyMjZjNmRkZjc3YmQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA4NjhlZWUxY2QyMDRhYmNiY2M2ZDI3MDY0M2JkYzRjLmJpbmRQb3B1cChwb3B1cF9hOTFmZDUwYmE3ZjE0NDEwYWRjMDBlNGFlZjdjZmI0NCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ5NjRiY2IxNmUwNGY5NTgyZTgwMDI3ZTBlOTA1YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQwOTA4MjQ2MDMxMywgLTk2LjcwNTQ1MjgxMTQzOTUxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzg2N2FhMTNmZjlhZjRkZmJiMWYyNmQ3Mjc5MWUxYTgzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMWQzNTA4NGE4OGE0ZmJkYTY3OTRhYWJiOGM4MTk0ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjFkMzUwODRhODhhNGZiZGE2Nzk0YWFiYjhjODE5NGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBUaGUgSGFwcHkgUmF2ZW4gKEJlZXIgR2FyZGVuKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NjdhYTEzZmY5YWY0ZGZiYjFmMjZkNzI3OTFlMWE4My5zZXRDb250ZW50KGh0bWxfZjFkMzUwODRhODhhNGZiZGE2Nzk0YWFiYjhjODE5NGUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQ0OTY0YmNiMTZlMDRmOTU4MmU4MDAyN2UwZTkwNWE4LmJpbmRQb3B1cChwb3B1cF84NjdhYTEzZmY5YWY0ZGZiYjFmMjZkNzI3OTFlMWE4MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTBhMzUyZmU5MGU4NDE4OGI0MTAyMGUxNmEwMzg3NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjQ0NzIwNjQ3NjA4NSwgLTk2LjY4MTg2ODE1OTgwODJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTJlNDRlMzFhY2Q2NDkxY2IwYmJkOTM4MzVlMTk2ODQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA5Yzg0NjM5ODAxZjRjZDJiZDExZDI0OWIxYTcwM2Y2ID0gJChgPGRpdiBpZD0iaHRtbF8wOWM4NDYzOTgwMWY0Y2QyYmQxMWQyNDliMWE3MDNmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFZ1bmcgVGF1IChWaWV0bmFtZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzEyZTQ0ZTMxYWNkNjQ5MWNiMGJiZDkzODM1ZTE5Njg0LnNldENvbnRlbnQoaHRtbF8wOWM4NDYzOTgwMWY0Y2QyYmQxMWQyNDliMWE3MDNmNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTBhMzUyZmU5MGU4NDE4OGI0MTAyMGUxNmEwMzg3NTMuYmluZFBvcHVwKHBvcHVwXzEyZTQ0ZTMxYWNkNjQ5MWNiMGJiZDkzODM1ZTE5Njg0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDg0ZjMyOThlYjY0ZjA5YWRlNzkzZjI4MjI5YWY0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDY5MDc0NDA3NTc5LCAtOTYuNzExMTQ2Mjg5MzEwNjVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjI5Y2QzOTM1YzQ2NDE0Yjk4MmE2MmJiY2Q4MDI1ZjAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg3Nzg0ODllYjZkYzQ3YmNhY2Q3MWY3ZDdlZTc0MjQ2ID0gJChgPGRpdiBpZD0iaHRtbF84Nzc4NDg5ZWI2ZGM0N2JjYWNkNzFmN2Q3ZWU3NDI0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEluZGlnbyBCcmlkZ2UgQm9va3MgKEJvb2tzdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjI5Y2QzOTM1YzQ2NDE0Yjk4MmE2MmJiY2Q4MDI1ZjAuc2V0Q29udGVudChodG1sXzg3Nzg0ODllYjZkYzQ3YmNhY2Q3MWY3ZDdlZTc0MjQ2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hNDg0ZjMyOThlYjY0ZjA5YWRlNzkzZjI4MjI5YWY0NC5iaW5kUG9wdXAocG9wdXBfZjI5Y2QzOTM1YzQ2NDE0Yjk4MmE2MmJiY2Q4MDI1ZjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4YTg5MDE1MjAzZTQ4ZDNiNDg3NGJhZjU2ZDMyOWQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI4NjM2MjI3MjUzMDMsIC05Ni42NjY4NzM4NDMyODI0OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hZTIyZDVkMjk4NjY0ZWIyYjUwZjgyYWY0ZTI0MzcwOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWExZTM5MGIzZmIwNDM5OWE3MDFhNDFiY2FmNmM1NzUgPSAkKGA8ZGl2IGlkPSJodG1sX2FhMWUzOTBiM2ZiMDQzOTlhNzAxYTQxYmNhZjZjNTc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gVU5MIERhaXJ5IFN0b3JlIChHZW5lcmFsIENvbGxlZ2UgJmFtcDsgVW5pdmVyc2l0eSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWUyMmQ1ZDI5ODY2NGViMmI1MGY4MmFmNGUyNDM3MDguc2V0Q29udGVudChodG1sX2FhMWUzOTBiM2ZiMDQzOTlhNzAxYTQxYmNhZjZjNTc1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81OGE4OTAxNTIwM2U0OGQzYjQ4NzRiYWY1NmQzMjlkMi5iaW5kUG9wdXAocG9wdXBfYWUyMmQ1ZDI5ODY2NGViMmI1MGY4MmFmNGUyNDM3MDgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3NGQ1YjU3NjI2ZTQ3OWRhNDVlODNjODZhYWU1ZTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA4NTI4MjIxODAzNzksIC05Ni42NzMxMzc2ODYyMTI3MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xNjBhMGVmNWY2NDI0NmM0OWE1YTM5Y2Y0ZGJlMjYyMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWQ0ZDA5NGNmNGUwNDFmODk0ZTBhNDdhYTZkY2ZmMzAgPSAkKGA8ZGl2IGlkPSJodG1sX2FkNGQwOTRjZjRlMDQxZjg5NGUwYTQ3YWE2ZGNmZjMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gV29vZHMgUGFyayAoUGFyayk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTYwYTBlZjVmNjQyNDZjNDlhNWEzOWNmNGRiZTI2MjAuc2V0Q29udGVudChodG1sX2FkNGQwOTRjZjRlMDQxZjg5NGUwYTQ3YWE2ZGNmZjMwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83NzRkNWI1NzYyNmU0NzlkYTQ1ZTgzYzg2YWFlNWU4Mi5iaW5kUG9wdXAocG9wdXBfMTYwYTBlZjVmNjQyNDZjNDlhNWEzOWNmNGRiZTI2MjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1NzcxYjk5YmViYTRiMjRiZjE1NTA5MGMyOWRlZTNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1MTU5LCAtOTYuNzA5MjA3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U5NThiZDUxNTc0NzQ2NzJiMWViMmFlYjhiZjU2ZGUyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NmI1MjY2MGQ2ZjI0MWZmYWIyMTg3ZjQ2YWE5MDc5MyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzZiNTI2NjBkNmYyNDFmZmFiMjE4N2Y0NmFhOTA3OTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBUaGUgT3RoZXIgUm9vbSAoU3BlYWtlYXN5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lOTU4YmQ1MTU3NDc0NjcyYjFlYjJhZWI4YmY1NmRlMi5zZXRDb250ZW50KGh0bWxfNzZiNTI2NjBkNmYyNDFmZmFiMjE4N2Y0NmFhOTA3OTMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzE1NzcxYjk5YmViYTRiMjRiZjE1NTA5MGMyOWRlZTNhLmJpbmRQb3B1cChwb3B1cF9lOTU4YmQ1MTU3NDc0NjcyYjFlYjJhZWI4YmY1NmRlMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE0OGVmNTk3NWM0NDY2NWJlMDY1ZjZiYTk3YTVhMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTYwMjgyNDc5NzkyNiwgLTk2LjcxMDAzMzQ3MjgwOTY0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ4NGNkOWVhYjk0NjRiNDJiNzBkM2NkMTg4MWMyM2U5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lOGRmMDI1YmEyYWQ0M2YyODJkMTA0YTFjNTY3NDhhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZThkZjAyNWJhMmFkNDNmMjgyZDEwNGExYzU2NzQ4YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBMZWFkQmVsbHkgKEdhc3Ryb3B1Yik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDg0Y2Q5ZWFiOTQ2NGI0MmI3MGQzY2QxODgxYzIzZTkuc2V0Q29udGVudChodG1sX2U4ZGYwMjViYTJhZDQzZjI4MmQxMDRhMWM1Njc0OGE4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82YTQ4ZWY1OTc1YzQ0NjY1YmUwNjVmNmJhOTdhNWEwMC5iaW5kUG9wdXAocG9wdXBfNDg0Y2Q5ZWFiOTQ2NGI0MmI3MGQzY2QxODgxYzIzZTkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4NTFlNmNiYTBmOTQ2ZDVhMjYzOTY4MzU1ODNjZTgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc4ODY5OTU5OTE5MzcsIC05Ni42ODU3Nzk1Nzg4NTY0NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MzIzMmM1MjA1Zjg0NjEzYTNkZWVkNTNiMGI1N2RlMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2Y5NWU0YjQxMmFlNDJmMWIxODIyMjRiNDA0ZTJlNmEgPSAkKGA8ZGl2IGlkPSJodG1sX2NmOTVlNGI0MTJhZTQyZjFiMTgyMjI0YjQwNGUyZTZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gQ291bnRyeSBDbHViIE9mIExpbmNvbG4gKFNvY2lhbCBDbHViKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80MzIzMmM1MjA1Zjg0NjEzYTNkZWVkNTNiMGI1N2RlMS5zZXRDb250ZW50KGh0bWxfY2Y5NWU0YjQxMmFlNDJmMWIxODIyMjRiNDA0ZTJlNmEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2I4NTFlNmNiYTBmOTQ2ZDVhMjYzOTY4MzU1ODNjZTgzLmJpbmRQb3B1cChwb3B1cF80MzIzMmM1MjA1Zjg0NjEzYTNkZWVkNTNiMGI1N2RlMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDFkZDAxNmM3NmNmNDdhN2IxYzk3OTg5NTQ5OGMxMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM0MDE5Mzc0NzgwNCwgLTk2LjcwNTcxMjc0MjE4MTI2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2FiM2QxNTZjNTZjZTQwODhiNzAxNDU0N2NlMDA0NjhjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lZDcxNDc4MjAwYzE0YTQxYmUyZDcyMjYyNzFjOGU5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZWQ3MTQ3ODIwMGMxNGE0MWJlMmQ3MjI2MjcxYzhlOWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBTY29vdGVyJiMzOTtzIENvZmZlZWhvdXNlIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWIzZDE1NmM1NmNlNDA4OGI3MDE0NTQ3Y2UwMDQ2OGMuc2V0Q29udGVudChodG1sX2VkNzE0NzgyMDBjMTRhNDFiZTJkNzIyNjI3MWM4ZTliKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80MWRkMDE2Yzc2Y2Y0N2E3YjFjOTc5ODk1NDk4YzExMC5iaW5kUG9wdXAocG9wdXBfYWIzZDE1NmM1NmNlNDA4OGI3MDE0NTQ3Y2UwMDQ2OGMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzZjZjZDQxZDIyMTQ3ZDFiYzdmOTVhYWZlMmFlMTRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0OTEwNjU2MTg2NCwgLTk2LjcwOTIzODQ2NDUyMDRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjFlMDQxOGZmOTIwNGYwOGFlMTc1M2U2ZjNlMDA0N2UgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzcxYmQ1OTFlYTk3NzRkODdhOGQ1NWEyODJkMjI1ODRiID0gJChgPGRpdiBpZD0iaHRtbF83MWJkNTkxZWE5Nzc0ZDg3YThkNTVhMjgyZDIyNTg0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFRhdmVybiBvbiB0aGUgU3F1YXJlIChCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2YxZTA0MThmZjkyMDRmMDhhZTE3NTNlNmYzZTAwNDdlLnNldENvbnRlbnQoaHRtbF83MWJkNTkxZWE5Nzc0ZDg3YThkNTVhMjgyZDIyNTg0Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjNmNmNkNDFkMjIxNDdkMWJjN2Y5NWFhZmUyYWUxNGQuYmluZFBvcHVwKHBvcHVwX2YxZTA0MThmZjkyMDRmMDhhZTE3NTNlNmYzZTAwNDdlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzE5YjIzNTM3ZjA0YTEwYjg3NjNlZGUzOTU0ZjA5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NTEyNDk2MTE0NzI0LCAtOTYuNzEwNzkwMTg1NjUzMjddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjUzYWZlMzA2Nzc3NGM4NGFjYjA4MWZjMzUzNWViOGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdiMTk2NjgyZTQyMjQyNzE5NTYyY2EwMDg3NjY1YjM1ID0gJChgPGRpdiBpZD0iaHRtbF83YjE5NjY4MmU0MjI0MjcxOTU2MmNhMDA4NzY2NWIzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFdoaXRlIEVsbSBCcmV3ZXJ5IChCcmV3ZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82NTNhZmUzMDY3Nzc0Yzg0YWNiMDgxZmMzNTM1ZWI4ZS5zZXRDb250ZW50KGh0bWxfN2IxOTY2ODJlNDIyNDI3MTk1NjJjYTAwODc2NjViMzUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2YzMTliMjM1MzdmMDRhMTBiODc2M2VkZTM5NTRmMDkxLmJpbmRQb3B1cChwb3B1cF82NTNhZmUzMDY3Nzc0Yzg0YWNiMDgxZmMzNTM1ZWI4ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmM0ZGQxZGNkYjFmNDcwNGJhODYzNmUzMGU4NTVkNTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTc0ODE5ODQxMjU0MSwgLTk2LjY1NDE5MTk5OTc5MzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzQ3ZDBjYjUwZmRmNDVjMWI2OTE4ZDY1MmJiZmVkMTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzE3MjYxMmQ4ZTQ3MDQ2OWFhNzk0M2QxZjgzNjM0ZGM4ID0gJChgPGRpdiBpZD0iaHRtbF8xNzI2MTJkOGU0NzA0NjlhYTc5NDNkMWY4MzYzNGRjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIFJhaXNpbmcgQ2FuZSYjMzk7cyBDaGlja2VuIEZpbmdlcnMgKEZyaWVkIENoaWNrZW4gSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzM0N2QwY2I1MGZkZjQ1YzFiNjkxOGQ2NTJiYmZlZDE1LnNldENvbnRlbnQoaHRtbF8xNzI2MTJkOGU0NzA0NjlhYTc5NDNkMWY4MzYzNGRjOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmM0ZGQxZGNkYjFmNDcwNGJhODYzNmUzMGU4NTVkNTQuYmluZFBvcHVwKHBvcHVwXzM0N2QwY2I1MGZkZjQ1YzFiNjkxOGQ2NTJiYmZlZDE1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MzNhZTg5YTM5M2I0ZDllODZhZmViNjA4MDIzMTMxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDg4MiwgLTk2LjY1MDQ2M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82ZWJjMmZmMDc4MTU0MWQyOWNkMGQ4NTZjZDhmNzYyNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzM1NDQyOWRiMjVhNDA2ZTk0MGQ5YTVkNmU3MWRiYzYgPSAkKGA8ZGl2IGlkPSJodG1sX2MzNTQ0MjlkYjI1YTQwNmU5NDBkOWE1ZDZlNzFkYmM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gSHktVmVlIChHcm9jZXJ5IFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82ZWJjMmZmMDc4MTU0MWQyOWNkMGQ4NTZjZDhmNzYyNS5zZXRDb250ZW50KGh0bWxfYzM1NDQyOWRiMjVhNDA2ZTk0MGQ5YTVkNmU3MWRiYzYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzYzM2FlODlhMzkzYjRkOWU4NmFmZWI2MDgwMjMxMzEwLmJpbmRQb3B1cChwb3B1cF82ZWJjMmZmMDc4MTU0MWQyOWNkMGQ4NTZjZDhmNzYyNSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODA4NGJiOWNkNWVlNDNhY2FkMGMxYzFiMzI5NWIxYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTcwNTQxMjI3NzIwNiwgLTk2LjcwOTcyNDg1MjIyNzAxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzU3ZWZjMjRmN2U5YzQ0MmZhODM3YzIxOTM4MTI1NDAxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMDhkYjVkOTk3NmI0NGU0YjBiNDAzNzYzZTVhM2E1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzA4ZGI1ZDk5NzZiNDRlNGIwYjQwMzc2M2U1YTNhNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBCbHVlIFN1c2hpIFNha2UgR3JpbGwgKFN1c2hpIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU3ZWZjMjRmN2U5YzQ0MmZhODM3YzIxOTM4MTI1NDAxLnNldENvbnRlbnQoaHRtbF9jMDhkYjVkOTk3NmI0NGU0YjBiNDAzNzYzZTVhM2E1Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfODA4NGJiOWNkNWVlNDNhY2FkMGMxYzFiMzI5NWIxYjguYmluZFBvcHVwKHBvcHVwXzU3ZWZjMjRmN2U5YzQ0MmZhODM3YzIxOTM4MTI1NDAxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YTRiNjczNDU5NWY0NTFiYTU2ODU2Nzk1YTIyYzdhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MTQ0MTQxMTAxODU1LCAtOTYuNjY1OTcyNjk4NTYwODRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjQ5ZTQwNjU3N2VmNDcxMzlkMGIwYWQyMzdjZGQ5OTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA0MWZhZWQ3NWI4NjQ4NGFiMzdlMTkwODY4NmIyYmU4ID0gJChgPGRpdiBpZD0iaHRtbF8wNDFmYWVkNzViODY0ODRhYjM3ZTE5MDg2ODZiMmJlOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIERhaXJ5IFF1ZWVuIChJY2UgQ3JlYW0gU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMjQ5ZTQwNjU3N2VmNDcxMzlkMGIwYWQyMzdjZGQ5OTEuc2V0Q29udGVudChodG1sXzA0MWZhZWQ3NWI4NjQ4NGFiMzdlMTkwODY4NmIyYmU4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83YTRiNjczNDU5NWY0NTFiYTU2ODU2Nzk1YTIyYzdhYy5iaW5kUG9wdXAocG9wdXBfMjQ5ZTQwNjU3N2VmNDcxMzlkMGIwYWQyMzdjZGQ5OTEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhY2IwMGZhZDA5NjQzZmZiZGE5YjA4MTk3OTMyMjRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzMDM0NzgyMzg2NjIsIC05Ni42NTExMzk0MDgzNDk5OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yNmYyNmMzYzhlOGU0YzA0OGE1YzIyYTllMjg4MjEwOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2FlYmM4ODYyOTJhNGI4NDgxYzRhYTc0NGE0MzgxOTUgPSAkKGA8ZGl2IGlkPSJodG1sXzdhZWJjODg2MjkyYTRiODQ4MWM0YWE3NDRhNDM4MTk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gTm9vZGxlcyAmYW1wOyBDb21wYW55IChOb29kbGUgSG91c2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI2ZjI2YzNjOGU4ZTRjMDQ4YTVjMjJhOWUyODgyMTA5LnNldENvbnRlbnQoaHRtbF83YWViYzg4NjI5MmE0Yjg0ODFjNGFhNzQ0YTQzODE5NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYWFjYjAwZmFkMDk2NDNmZmJkYTliMDgxOTc5MzIyNGUuYmluZFBvcHVwKHBvcHVwXzI2ZjI2YzNjOGU4ZTRjMDQ4YTVjMjJhOWUyODgyMTA5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWQxNjg0Y2NhOWU0Y2VjYTM1MmEzYmQ2OWE0YzlhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMzc3NzY1NzIzNDA1NiwgLTk2LjY0OTQzNDA3NzAwMjM4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzMzZmQ5OGZjYmYyYjQwZTk5MTkyZTUxODk4OGU4ZjZhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85MzUxMTM3MmFiOGY0NGE3YTUzOWU0NTdiOGY5Nzc1ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTM1MTEzNzJhYjhmNDRhN2E1MzllNDU3YjhmOTc3NWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBCYXJuZXMgJmFtcDsgTm9ibGUgKEJvb2tzdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMzNmZDk4ZmNiZjJiNDBlOTkxOTJlNTE4OTg4ZThmNmEuc2V0Q29udGVudChodG1sXzkzNTExMzcyYWI4ZjQ0YTdhNTM5ZTQ1N2I4Zjk3NzVkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83MWQxNjg0Y2NhOWU0Y2VjYTM1MmEzYmQ2OWE0YzlhYi5iaW5kUG9wdXAocG9wdXBfMzNmZDk4ZmNiZjJiNDBlOTkxOTJlNTE4OTg4ZThmNmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1MjNmZTlhM2Q0ZjQ3MDY4OTNjZmNmZmFhYTA4ZTVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NTQwMzE4NTE4MjgsIC05Ni43MDExODc5NjUzNTA2Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81NDE1YWE2NDg3NWU0ZTZhOGM1ZmYzMGYxMTNiZWEzOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZjQ3OTZmYjk3ZTMxNGQ1ZGI0YzQzZGFlN2YwMmNkOTQgPSAkKGA8ZGl2IGlkPSJodG1sX2Y0Nzk2ZmI5N2UzMTRkNWRiNGM0M2RhZTdmMDJjZDk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSmFrZSYjMzk7cyBDaWdhcnMgQW5kIFNwaXJpdHMgKEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTQxNWFhNjQ4NzVlNGU2YThjNWZmMzBmMTEzYmVhMzguc2V0Q29udGVudChodG1sX2Y0Nzk2ZmI5N2UzMTRkNWRiNGM0M2RhZTdmMDJjZDk0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xNTIzZmU5YTNkNGY0NzA2ODkzY2ZjZmZhYWEwOGU1ZS5iaW5kUG9wdXAocG9wdXBfNTQxNWFhNjQ4NzVlNGU2YThjNWZmMzBmMTEzYmVhMzgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2MTU5Yjg3YzkyYjQ3YTJiMDliZTFlYjQwNGUxYTZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzNzE0MywgLTk2LjYzMzQ4NDNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTYyMjUwYmEwZTI4NDBkYTkxMzUwYTkwNTk2YjIxOTggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzBkZTc1NTE3M2M0NTQwYzZhMjRkYWU2NGYwNDQwZWViID0gJChgPGRpdiBpZD0iaHRtbF8wZGU3NTUxNzNjNDU0MGM2YTI0ZGFlNjRmMDQ0MGVlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIEtyaXNweSBLcmVtZSAoQmFrZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNjIyNTBiYTBlMjg0MGRhOTEzNTBhOTA1OTZiMjE5OC5zZXRDb250ZW50KGh0bWxfMGRlNzU1MTczYzQ1NDBjNmEyNGRhZTY0ZjA0NDBlZWIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2I2MTU5Yjg3YzkyYjQ3YTJiMDliZTFlYjQwNGUxYTZiLmJpbmRQb3B1cChwb3B1cF8xNjIyNTBiYTBlMjg0MGRhOTEzNTBhOTA1OTZiMjE5OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUyYWJkZTg0NmM4NGVmZmIxZjY1NTM3MzM4YzEzMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjMwODE2MDY1MTA2MzQsIC05Ni43MTM3ODM3NDA5OTczMV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNWJkZWM1MWI4NmI0OTM0ODMwMTliY2FhZGE0YjgwMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMGQ4YzgzZWJjN2VmNDcwZGIzOGM1MzhhM2FlZWFjNWMgPSAkKGA8ZGl2IGlkPSJodG1sXzBkOGM4M2ViYzdlZjQ3MGRiMzhjNTM4YTNhZWVhYzVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSGF3a3MgRmllbGQgYXQgSGF5bWFya2V0IFBhcmsgKENvbGxlZ2UgQmFzZWJhbGwgRGlhbW9uZCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzViZGVjNTFiODZiNDkzNDgzMDE5YmNhYWRhNGI4MDAuc2V0Q29udGVudChodG1sXzBkOGM4M2ViYzdlZjQ3MGRiMzhjNTM4YTNhZWVhYzVjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85ZTJhYmRlODQ2Yzg0ZWZmYjFmNjU1MzczMzhjMTMzMC5iaW5kUG9wdXAocG9wdXBfYzViZGVjNTFiODZiNDkzNDgzMDE5YmNhYWRhNGI4MDApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyMWJhY2EzZWE5MDQ0YmFiMjM5ZTU4NjNlMzZiYjUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NzUxMTQyMjU3MTQsIC05Ni43MDk5ODU3MzMwMzIyM10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xMzlkNTkxOWFiZjc0M2FiYjYwNWU3NDgxYzM5Njc2NSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzYyMjllYjIzZTBlNDQzOWE4MjgzMWY1NjUxMTgzMDYgPSAkKGA8ZGl2IGlkPSJodG1sXzc2MjI5ZWIyM2UwZTQ0MzlhODI4MzFmNTY1MTE4MzA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSGF5bWFya2V0IChTaG9wcGluZyBQbGF6YSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTM5ZDU5MTlhYmY3NDNhYmI2MDVlNzQ4MWMzOTY3NjUuc2V0Q29udGVudChodG1sXzc2MjI5ZWIyM2UwZTQ0MzlhODI4MzFmNTY1MTE4MzA2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jMjFiYWNhM2VhOTA0NGJhYjIzOWU1ODYzZTM2YmI1MC5iaW5kUG9wdXAocG9wdXBfMTM5ZDU5MTlhYmY3NDNhYmI2MDVlNzQ4MWMzOTY3NjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3MzRkN2Q5OTJiOTQ3YTU5OWQ5ZjFhMGIyMTZmNzQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg1NDg5ODcxMTUzMDA0LCAtOTYuNzE4NjAwMDMwOTkyNTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTcyYTY5ZjEzMTExNGNmMzliMGY4YmZlYjhkMDQ1NDIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzllZDM4M2M2MDY2YjQzOTVhMGNhOTY2Y2Q4Yjc4OWE3ID0gJChgPGRpdiBpZD0iaHRtbF85ZWQzODNjNjA2NmI0Mzk1YTBjYTk2NmNkOGI3ODlhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEdvb2QgTGlmZSBGaXRuZXNzIChHeW0gLyBGaXRuZXNzIENlbnRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTcyYTY5ZjEzMTExNGNmMzliMGY4YmZlYjhkMDQ1NDIuc2V0Q29udGVudChodG1sXzllZDM4M2M2MDY2YjQzOTVhMGNhOTY2Y2Q4Yjc4OWE3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81NzM0ZDdkOTkyYjk0N2E1OTlkOWYxYTBiMjE2Zjc0NS5iaW5kUG9wdXAocG9wdXBfOTcyYTY5ZjEzMTExNGNmMzliMGY4YmZlYjhkMDQ1NDIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwZDlmZGNjYTllZTQ5MjdiNDFlYTViMTliZTE4Zjg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg1NzcwMzc0MzUwNzA1LCAtOTYuNjUzMDQ1MDkwOTk1ODJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2ExMjkwZDIwZDc0NDJiNzhhODk5YTQ2ZmU0NzdhMGMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg0ZDdiNmEwNDRkYjRjZjI4ZGI2NDFiNWQ1ZWZjMjRhID0gJChgPGRpdiBpZD0iaHRtbF84NGQ3YjZhMDQ0ZGI0Y2YyOGRiNjQxYjVkNWVmYzI0YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIFJvbGxpbmcgV29rIChDaGluZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NhMTI5MGQyMGQ3NDQyYjc4YTg5OWE0NmZlNDc3YTBjLnNldENvbnRlbnQoaHRtbF84NGQ3YjZhMDQ0ZGI0Y2YyOGRiNjQxYjVkNWVmYzI0YSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTBkOWZkY2NhOWVlNDkyN2I0MWVhNWIxOWJlMThmODguYmluZFBvcHVwKHBvcHVwX2NhMTI5MGQyMGQ3NDQyYjc4YTg5OWE0NmZlNDc3YTBjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MzAzMmIwMzBjY2Q0Y2E3YmNjMjg3OTI3NDgyYjY3MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMzIxNDYzNjEwMDU5LCAtOTYuNzE0MTUzMzcwMTczMDRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZTI5NWRiZWMwZTc3NDc5YmE4NTA0ZGUxYzMwM2MyYmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzlhMTcxY2M4ZDJiNzQxYjNhNjJmYzYwNDgzZTc2YTNiID0gJChgPGRpdiBpZD0iaHRtbF85YTE3MWNjOGQyYjc0MWIzYTYyZmM2MDQ4M2U3NmEzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEhheW1hcmtldCBQYXJrIChQYXJrKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lMjk1ZGJlYzBlNzc0NzliYTg1MDRkZTFjMzAzYzJiYS5zZXRDb250ZW50KGh0bWxfOWExNzFjYzhkMmI3NDFiM2E2MmZjNjA0ODNlNzZhM2IpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzUzMDMyYjAzMGNjZDRjYTdiY2MyODc5Mjc0ODJiNjcxLmJpbmRQb3B1cChwb3B1cF9lMjk1ZGJlYzBlNzc0NzliYTg1MDRkZTFjMzAzYzJiYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTBiYzljMWFiZTlmNDdjZDg0ZTI2NzU0YTNkNTk1NTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTY2MDE0LCAtOTYuNzA5NzUwOF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wYTRiMGZjZWZkODY0NWU5OGNiMDU2Mzc3OTYyNmRmOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODY5ZWYwMmI4OWIyNDUyM2E5MWNlZWJkNDAwODA5ZTggPSAkKGA8ZGl2IGlkPSJodG1sXzg2OWVmMDJiODliMjQ1MjNhOTFjZWViZDQwMDgwOWU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSGlsdG9uIEdhcmRlbiBJbm4gKEhvdGVsKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wYTRiMGZjZWZkODY0NWU5OGNiMDU2Mzc3OTYyNmRmOS5zZXRDb250ZW50KGh0bWxfODY5ZWYwMmI4OWIyNDUyM2E5MWNlZWJkNDAwODA5ZTgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzEwYmM5YzFhYmU5ZjQ3Y2Q4NGUyNjc1NGEzZDU5NTU2LmJpbmRQb3B1cChwb3B1cF8wYTRiMGZjZWZkODY0NWU5OGNiMDU2Mzc3OTYyNmRmOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTlkYjMxMWYwMWM3NDE3YzhjNjhiNmRlOGYxYzZlMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTE5ODk2ODkxOTIxMSwgLTk2LjcwMjgyODk2MzY4OTQxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JiYTc1Y2I0NTYyNzQzYWE5MGUyMmFiYmMzMTk5YjVkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wNmY2MzA4MWQ5MDU0MWJkYjFkZmVmNzdkNzMxOWYwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDZmNjMwODFkOTA1NDFiZGIxZGZlZjc3ZDczMTlmMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBNZWllciYjMzk7cyBDb3JrIGFuZCBCb3R0bGUgKFdpbmUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmJhNzVjYjQ1NjI3NDNhYTkwZTIyYWJiYzMxOTliNWQuc2V0Q29udGVudChodG1sXzA2ZjYzMDgxZDkwNTQxYmRiMWRmZWY3N2Q3MzE5ZjA1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lOWRiMzExZjAxYzc0MTdjOGM2OGI2ZGU4ZjFjNmUyOC5iaW5kUG9wdXAocG9wdXBfYmJhNzVjYjQ1NjI3NDNhYTkwZTIyYWJiYzMxOTliNWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiNjU0YjBjNWI4YjRiYmVhMGNiZGRkMjc5NGY4ZmUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIxNDgxMjQ2MDUyNjMsIC05Ni42NTQzNTY1NjUwOTczNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84ODMxZjdiMjM0ZmM0YTVhYTcwOTlmZjRmYzcwOTk5NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTc0NTJkMWE1ODliNDEzYWIxMmM1OTI4MjhhMzMwMWQgPSAkKGA8ZGl2IGlkPSJodG1sXzU3NDUyZDFhNTg5YjQxM2FiMTJjNTkyODI4YTMzMDFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gRCYjMzk7TGVvbiYjMzk7cyBUYWNvIFJpY28gKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODgzMWY3YjIzNGZjNGE1YWE3MDk5ZmY0ZmM3MDk5OTYuc2V0Q29udGVudChodG1sXzU3NDUyZDFhNTg5YjQxM2FiMTJjNTkyODI4YTMzMDFkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wYjY1NGIwYzViOGI0YmJlYTBjYmRkZDI3OTRmOGZlMC5iaW5kUG9wdXAocG9wdXBfODgzMWY3YjIzNGZjNGE1YWE3MDk5ZmY0ZmM3MDk5OTYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1ZTFhMzZhNjFhMjQ1YzBiZWFlYWQwNmZlMmY3MWU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzODY1LCAtOTYuNjcyNDYyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzkwNGU4ZDFhMGE3NjQ3NWViMjZkZTYwN2ZkZjIyZTk3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85ZWZjOGJjMzAxOTg0ZDM0YjZhNDE0NmQyZGU1ZWI0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWVmYzhiYzMwMTk4NGQzNGI2YTQxNDZkMmRlNWViNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBTdGFyYnVja3MgKENvZmZlZSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85MDRlOGQxYTBhNzY0NzVlYjI2ZGU2MDdmZGYyMmU5Ny5zZXRDb250ZW50KGh0bWxfOWVmYzhiYzMwMTk4NGQzNGI2YTQxNDZkMmRlNWViNDQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzI1ZTFhMzZhNjFhMjQ1YzBiZWFlYWQwNmZlMmY3MWU3LmJpbmRQb3B1cChwb3B1cF85MDRlOGQxYTBhNzY0NzVlYjI2ZGU2MDdmZGYyMmU5NykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUwOTUxMzg2MjgxNDQwMmFlYjM4MzY2ODg4MTJmYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTMyODY1NTk3NTM4LCAtOTYuNjk2NjQzNDA2MzVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTcyODVlMGI0Y2NiNGQxOTg3NDE5ZGQ5OTg4NTM4ZTAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q0ODU4M2Q0M2ExYTQyNGNhZTAwMjU5YWUyNDAxZDI1ID0gJChgPGRpdiBpZD0iaHRtbF9kNDg1ODNkNDNhMWE0MjRjYWUwMDI1OWFlMjQwMWQyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIE4gU3RyZWV0IERyaXZlIEluIChMaXF1b3IgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E3Mjg1ZTBiNGNjYjRkMTk4NzQxOWRkOTk4ODUzOGUwLnNldENvbnRlbnQoaHRtbF9kNDg1ODNkNDNhMWE0MjRjYWUwMDI1OWFlMjQwMWQyNSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOWUwOTUxMzg2MjgxNDQwMmFlYjM4MzY2ODg4MTJmYjUuYmluZFBvcHVwKHBvcHVwX2E3Mjg1ZTBiNGNjYjRkMTk4NzQxOWRkOTk4ODUzOGUwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZWJjYWM0ZWY0OWU0ZjJkYjI0NGZmZTkyNGRiZjc3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDYwMzUsIC05Ni43MTgyOTk4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzEyZjQ5NzEzZGEzYTQwYmRhYjk3MDdlNmQyMDRhNTRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yMDhkYWM5ODRlNWY0MGEzOTU4MmQwNTE1ODA0ZmNmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjA4ZGFjOTg0ZTVmNDBhMzk1ODJkMDUxNTgwNGZjZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBCYXNzIFBybyBTaG9wcyAoU3BvcnRpbmcgR29vZHMgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTJmNDk3MTNkYTNhNDBiZGFiOTcwN2U2ZDIwNGE1NGUuc2V0Q29udGVudChodG1sXzIwOGRhYzk4NGU1ZjQwYTM5NTgyZDA1MTU4MDRmY2Y4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82ZWJjYWM0ZWY0OWU0ZjJkYjI0NGZmZTkyNGRiZjc3MC5iaW5kUG9wdXAocG9wdXBfMTJmNDk3MTNkYTNhNDBiZGFiOTcwN2U2ZDIwNGE1NGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3N2QxYzY0ODFiYTQwNGU4YjZhOWZkYzBjMWUyYzE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQzMDI3NzYyMTUwMzgsIC05Ni42ODAwOTg1NjU5NTIyNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mNDNiMTg4MWI0MDk0YzcwYWZiMDBkMTJkZTFkNGFhZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTY5Mzk5MTMwOTJiNDI4OGE4OWEzZWMzNDZhZjRmZDggPSAkKGA8ZGl2IGlkPSJodG1sX2U2OTM5OTEzMDkyYjQyODhhODlhM2VjMzQ2YWY0ZmQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gUmFpc2luZyBDYW5lJiMzOTtzIENoaWNrZW4gRmluZ2VycyAoRnJpZWQgQ2hpY2tlbiBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjQzYjE4ODFiNDA5NGM3MGFmYjAwZDEyZGUxZDRhYWUuc2V0Q29udGVudChodG1sX2U2OTM5OTEzMDkyYjQyODhhODlhM2VjMzQ2YWY0ZmQ4KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zNzdkMWM2NDgxYmE0MDRlOGI2YTlmZGMwYzFlMmMxNy5iaW5kUG9wdXAocG9wdXBfZjQzYjE4ODFiNDA5NGM3MGFmYjAwZDEyZGUxZDRhYWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxZTRkOWQ4MTg5YjRlODg5MjlhZGFiNGJjZjViMDE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzMDUyOCwgLTk2LjYzNjU3NzRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmZiYjYwYjQ3ODczNDMyNTk3ZjFmOTc2YzBmY2Y5ODIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y5MjllZWZiMmFhNzQ3NDQ4MGMxYjRmYmI2ZTlkZjg3ID0gJChgPGRpdiBpZD0iaHRtbF9mOTI5ZWVmYjJhYTc0NzQ0ODBjMWI0ZmJiNmU5ZGY4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIFBhbmVyYSBCcmVhZCAoQmFrZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mZmJiNjBiNDc4NzM0MzI1OTdmMWY5NzZjMGZjZjk4Mi5zZXRDb250ZW50KGh0bWxfZjkyOWVlZmIyYWE3NDc0NDgwYzFiNGZiYjZlOWRmODcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzIxZTRkOWQ4MTg5YjRlODg5MjlhZGFiNGJjZjViMDE2LmJpbmRQb3B1cChwb3B1cF9mZmJiNjBiNDc4NzM0MzI1OTdmMWY5NzZjMGZjZjk4MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDkzMTI5ODZiNmNlNGQwMmJjN2ZkZWI4NjQ0YWQxY2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM5NzIsIC05Ni42NTQzNTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjUxYTBiM2UyYWYyNDhlYmJmMDk2ZTBjYWJlZWQ4ZGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JiYmRlYzhhZjQxZDRmYTBiNTlkNTQ4YmIzYzMxYTFlID0gJChgPGRpdiBpZD0iaHRtbF9iYmJkZWM4YWY0MWQ0ZmEwYjU5ZDU0OGJiM2MzMWExZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIENoaWNrLWZpbC1BIChGYXN0IEZvb2QgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjUxYTBiM2UyYWYyNDhlYmJmMDk2ZTBjYWJlZWQ4ZGUuc2V0Q29udGVudChodG1sX2JiYmRlYzhhZjQxZDRmYTBiNTlkNTQ4YmIzYzMxYTFlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wOTMxMjk4NmI2Y2U0ZDAyYmM3ZmRlYjg2NDRhZDFjZi5iaW5kUG9wdXAocG9wdXBfNjUxYTBiM2UyYWYyNDhlYmJmMDk2ZTBjYWJlZWQ4ZGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2ZGQ3NDZmM2Y4NzRiNGI4NmVlNTljM2U5M2M4YWFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQwNzYxLCAtOTYuNjgyNTYwOTk5OTk5OTldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNjZTEyYzAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI2NlMTJjMCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTUxZGRjY2ZiOTJhNDEyYjhjYWNhNGY1MjM2YTU2ZTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ExMTdkNDNkMWI4YjQxNjE5NWI1OTk3M2FhMzNlNmFjID0gJChgPGRpdiBpZD0iaHRtbF9hMTE3ZDQzZDFiOGI0MTYxOTViNTk5NzNhYTMzZTZhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzRdIFBlcmZlY3QgRGluZXIgKEFzaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE1MWRkY2NmYjkyYTQxMmI4Y2FjYTRmNTIzNmE1NmU0LnNldENvbnRlbnQoaHRtbF9hMTE3ZDQzZDFiOGI0MTYxOTViNTk5NzNhYTMzZTZhYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTZkZDc0NmYzZjg3NGI0Yjg2ZWU1OWMzZTkzYzhhYWUuYmluZFBvcHVwKHBvcHVwXzE1MWRkY2NmYjkyYTQxMmI4Y2FjYTRmNTIzNmE1NmU0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYjkyOWUxNTUxNGE0NGQzYTM1ODdlNThiMzFmNDE1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMjM3MTI0MTk4NjE2LCAtOTYuNjkzNjQwMDU5ODAxMThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTBmYjcyMTdmZTQ0NDRjZGI2YjdlYTg3OGZmYzA3YzYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzc1ZGI0NjhiOTIxZTRkOGM4NThkM2ZiMDRhNzljYmYyID0gJChgPGRpdiBpZD0iaHRtbF83NWRiNDY4YjkyMWU0ZDhjODU4ZDNmYjA0YTc5Y2JmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIENvZGUgQmVlciBDb21wYW55IChCcmV3ZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hMGZiNzIxN2ZlNDQ0NGNkYjZiN2VhODc4ZmZjMDdjNi5zZXRDb250ZW50KGh0bWxfNzVkYjQ2OGI5MjFlNGQ4Yzg1OGQzZmIwNGE3OWNiZjIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2FiOTI5ZTE1NTE0YTQ0ZDNhMzU4N2U1OGIzMWY0MTU2LmJpbmRQb3B1cChwb3B1cF9hMGZiNzIxN2ZlNDQ0NGNkYjZiN2VhODc4ZmZjMDdjNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDlkZTk2NmQyZGRhNGM4ZDg0NDQzMGY5YmZmYTk3MDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ2Nzk2NDYzNzg5MywgLTk2LjcwNzkwOTgzMDY4OTk3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhmYzU0ZGUxOTQ4YzQwZWNiMjMxN2Q0MTkzYjVmZDA4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zZGFmOThiZThkYWQ0YzE2ODcwOGVjOGE5ODMzOWYwYiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2RhZjk4YmU4ZGFkNGMxNjg3MDhlYzhhOTgzMzlmMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBIdXJ0JiMzOTtzIERvbnV0IChEb251dCBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84ZmM1NGRlMTk0OGM0MGVjYjIzMTdkNDE5M2I1ZmQwOC5zZXRDb250ZW50KGh0bWxfM2RhZjk4YmU4ZGFkNGMxNjg3MDhlYzhhOTgzMzlmMGIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA5ZGU5NjZkMmRkYTRjOGQ4NDQ0MzBmOWJmZmE5NzA5LmJpbmRQb3B1cChwb3B1cF84ZmM1NGRlMTk0OGM0MGVjYjIzMTdkNDE5M2I1ZmQwOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM4ZjRhMjg3ODEwNDM5MGJhYmE1ZWEwZTVlMGE5ZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTYwMTI5NDc1MTk3NjYsIC05Ni42NDE4ODI1NzM0NjAwN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yZmZmZDk3OTUzNWM0NWU0YWIzZTU3ODc0NjE3OTkwOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDIzZTg3MGY4NmZmNDQ4N2FhOWQwZWFlYWRjMzEzZGYgPSAkKGA8ZGl2IGlkPSJodG1sX2QyM2U4NzBmODZmZjQ0ODdhYTlkMGVhZWFkYzMxM2RmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gTGEgUGF6IE1leGljYW4gUmVzdGF1cmFudCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yZmZmZDk3OTUzNWM0NWU0YWIzZTU3ODc0NjE3OTkwOS5zZXRDb250ZW50KGh0bWxfZDIzZTg3MGY4NmZmNDQ4N2FhOWQwZWFlYWRjMzEzZGYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzEzOGY0YTI4NzgxMDQzOTBiYWJhNWVhMGU1ZTBhOWVhLmJpbmRQb3B1cChwb3B1cF8yZmZmZDk3OTUzNWM0NWU0YWIzZTU3ODc0NjE3OTkwOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ5ZjBhYmE5NzhlNGJiYmE0NDQzODVmNWEwZTg3N2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Nzk0NjEzOTU3MzkyNiwgLTk2LjYzMzU1OTMxODg3OTY2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Q2YjM4OGFhMTAwYjQwZTBiMmQ2MTQzNmUwMjBlMjkwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lOTFlNWVkOTdmOWE0MjJmOTU3Y2UwNzIxOWI4YzY0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTkxZTVlZDk3ZjlhNDIyZjk1N2NlMDcyMTliOGM2NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBIb2xtZXMgTGFrZSAoTGFrZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDZiMzg4YWExMDBiNDBlMGIyZDYxNDM2ZTAyMGUyOTAuc2V0Q29udGVudChodG1sX2U5MWU1ZWQ5N2Y5YTQyMmY5NTdjZTA3MjE5YjhjNjQxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl84ZDlmMGFiYTk3OGU0YmJiYTQ0NDM4NWY1YTBlODc3Yy5iaW5kUG9wdXAocG9wdXBfZDZiMzg4YWExMDBiNDBlMGIyZDYxNDM2ZTAyMGUyOTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViYzRjZjg2MzRkNTRjZDc4YmM5ZmU2YmUxZDQ2MTljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0OTM4LCAtOTYuNjU0NDQ1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2I0YzNmNjM3N2Q2ZDQxNjM5M2M0NjM1ZmNkMjcyZTgxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lN2U0YTY4MWEwNzI0YWIwODA5ZjQ3YTRhMjM0N2NkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTdlNGE2ODFhMDcyNGFiMDgwOWY0N2E0YTIzNDdjZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBQYW5kYSBHYXJkZW4gKENoaW5lc2UgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjRjM2Y2Mzc3ZDZkNDE2MzkzYzQ2MzVmY2QyNzJlODEuc2V0Q29udGVudChodG1sX2U3ZTRhNjgxYTA3MjRhYjA4MDlmNDdhNGEyMzQ3Y2Q0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81YmM0Y2Y4NjM0ZDU0Y2Q3OGJjOWZlNmJlMWQ0NjE5Yy5iaW5kUG9wdXAocG9wdXBfYjRjM2Y2Mzc3ZDZkNDE2MzkzYzQ2MzVmY2QyNzJlODEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhNTVlNjFlOTIyOTQwNmI5YTVhZGQ1YWVkYWRlOTFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIxMDgwMTA3ODI5NTIsIC05Ni42MjQxOTk2NzQ0NTg0Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iNTRiZDg4MTZiMDM0YTA4YTJmNjIwYjA5NjAzOTA2MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzA3N2NhNmYwZTkxNDA4NWJhY2M2OWQzOTRlYTY1MTcgPSAkKGA8ZGl2IGlkPSJodG1sXzcwNzdjYTZmMGU5MTQwODViYWNjNjlkMzk0ZWE2NTE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gSG9uZXN0IEFiZSYjMzk7cyBCdXJnZXJzICZhbXA7IEZyZWVkb20gKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjU0YmQ4ODE2YjAzNGEwOGEyZjYyMGIwOTYwMzkwNjAuc2V0Q29udGVudChodG1sXzcwNzdjYTZmMGU5MTQwODViYWNjNjlkMzk0ZWE2NTE3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81YTU1ZTYxZTkyMjk0MDZiOWE1YWRkNWFlZGFkZTkxYy5iaW5kUG9wdXAocG9wdXBfYjU0YmQ4ODE2YjAzNGEwOGEyZjYyMGIwOTYwMzkwNjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2ZTkzZjA4MjlmNjQ2YThiZWM0YmZmN2U4Y2NiMzQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1NTQ2MywgLTk2LjcxMDEyMzRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZDhkNTM3YTk2Y2M1NGJhYmJmYjllZWNiMWE1NjZmZDQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2I4ZTg3ZWJiZmI4MjQ4M2Q5ZTc3ZDhhZDlhMGZhMzgxID0gJChgPGRpdiBpZD0iaHRtbF9iOGU4N2ViYmZiODI0ODNkOWU3N2Q4YWQ5YTBmYTM4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFRoZSBTdGFybGl0ZSBMb3VuZ2UgKExvdW5nZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDhkNTM3YTk2Y2M1NGJhYmJmYjllZWNiMWE1NjZmZDQuc2V0Q29udGVudChodG1sX2I4ZTg3ZWJiZmI4MjQ4M2Q5ZTc3ZDhhZDlhMGZhMzgxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9iNmU5M2YwODI5ZjY0NmE4YmVjNGJmZjdlOGNjYjM0MS5iaW5kUG9wdXAocG9wdXBfZDhkNTM3YTk2Y2M1NGJhYmJmYjllZWNiMWE1NjZmZDQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmMGY1MjQ4MjRjODRhMjhhNjQ2MzgwYzM2NjlkMTI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg3Njk3ODQxMzQyNjcsIC05Ni42NTM5MTc3Nzk3MjU4Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83NTgzYTRjOGQ2N2I0NDcwOWU3ZGQyMzNmYTZkMjM5YyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTMxYTU3YjI5ZjJlNDZkMWE3NmIzYzBkOTNmN2YzMDMgPSAkKGA8ZGl2IGlkPSJodG1sX2EzMWE1N2IyOWYyZTQ2ZDFhNzZiM2MwZDkzZjdmMzAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gUmFtbyYjMzk7cyBQaXp6YSBCdXN0ZXImIzM5O3MgQkJRIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzU4M2E0YzhkNjdiNDQ3MDllN2RkMjMzZmE2ZDIzOWMuc2V0Q29udGVudChodG1sX2EzMWE1N2IyOWYyZTQ2ZDFhNzZiM2MwZDkzZjdmMzAzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lZjBmNTI0ODI0Yzg0YTI4YTY0NjM4MGMzNjY5ZDEyOC5iaW5kUG9wdXAocG9wdXBfNzU4M2E0YzhkNjdiNDQ3MDllN2RkMjMzZmE2ZDIzOWMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczZWRmNDE2YWY2NzQ4NWFhZDFlNmI1MTYyOTlmNjQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0MTExNjk5MzU3OTIsIC05Ni43MzIwMjgxMjY3MTY2MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzE3MTcxNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMTcxNzE3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hZDQ2YmI4MjRhZTA0MWI4ODUxNzFjNzI5NjY0MjYyZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzE5ZjI2Yjc4NGZmNGY4Nzg2MTQwMGYxZWZlMzAzZDAgPSAkKGA8ZGl2IGlkPSJodG1sXzcxOWYyNmI3ODRmZjRmODc4NjE0MDBmMWVmZTMwM2QwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNV0gRGFpcnkgUXVlZW4gKEljZSBDcmVhbSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hZDQ2YmI4MjRhZTA0MWI4ODUxNzFjNzI5NjY0MjYyZC5zZXRDb250ZW50KGh0bWxfNzE5ZjI2Yjc4NGZmNGY4Nzg2MTQwMGYxZWZlMzAzZDApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzczZWRmNDE2YWY2NzQ4NWFhZDFlNmI1MTYyOTlmNjQxLmJpbmRQb3B1cChwb3B1cF9hZDQ2YmI4MjRhZTA0MWI4ODUxNzFjNzI5NjY0MjYyZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDUxY2ZjMTFiNDVmNGY0YjhmODk3ZjIxMjE4YjlmNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTczMDQ2OTM3NzY4NCwgLTk2LjcwOTY2OTA3NDA2MTgyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ4OTVkYTVmZTFkNjQ3MzU5YzBjN2Y1Zjc4YTgzODAwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yZmZkMTVlMjMwOGU0ZDQ1OGE1NTdiY2M1ZGViMjVjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMmZmZDE1ZTIzMDhlNGQ0NThhNTU3YmNjNWRlYjI1YzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBDb3VydHlhcmQgYnkgTWFycmlvdHQgKEhvdGVsKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80ODk1ZGE1ZmUxZDY0NzM1OWMwYzdmNWY3OGE4MzgwMC5zZXRDb250ZW50KGh0bWxfMmZmZDE1ZTIzMDhlNGQ0NThhNTU3YmNjNWRlYjI1YzgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzA1MWNmYzExYjQ1ZjRmNGI4Zjg5N2YyMTIxOGI5ZjQyLmJpbmRQb3B1cChwb3B1cF80ODk1ZGE1ZmUxZDY0NzM1OWMwYzdmNWY3OGE4MzgwMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTZmYWVjZTE0YjJmNGVlZjk3ZjM1YjYzZjAzOGMwYWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzMwNTIwMTU0MjQ4MywgLTk2LjY1NDUyODM5NDM1MDE0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzIxNmZhYzhlMjJmNDRlYzRiNWM1YzhmY2MxOTM1OTU2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNGZkMGZjYmViMDQ0MDkxYWNjOWVlYjVkYmU3NzI4NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjRmZDBmY2JlYjA0NDA5MWFjYzllZWI1ZGJlNzcyODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBUaGUgTWlsbCAoQ29mZmVlIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzIxNmZhYzhlMjJmNDRlYzRiNWM1YzhmY2MxOTM1OTU2LnNldENvbnRlbnQoaHRtbF9iNGZkMGZjYmViMDQ0MDkxYWNjOWVlYjVkYmU3NzI4NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTZmYWVjZTE0YjJmNGVlZjk3ZjM1YjYzZjAzOGMwYWMuYmluZFBvcHVwKHBvcHVwXzIxNmZhYzhlMjJmNDRlYzRiNWM1YzhmY2MxOTM1OTU2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Y2Y1ZmVlOTA2MjM0YzQ5YTU1YmMwNDZmNDQwODBmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NTQ2NDQzMjM5OTY3LCAtOTYuNjU0MzExMzIyNTI3NzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZDg2NTk1ZGFmNDczNDhhNzgzZjdmN2FjZTM0M2NhMWIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzYyMWNhYzVhOGRkOTRmYzNhYjQ2ZTM0ZTIwNTgyNmZlID0gJChgPGRpdiBpZD0iaHRtbF82MjFjYWM1YThkZDk0ZmMzYWI0NmUzNGUyMDU4MjZmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIEZyZWRkeSYjMzk7cyAoQnVyZ2VyIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kODY1OTVkYWY0NzM0OGE3ODNmN2Y3YWNlMzQzY2ExYi5zZXRDb250ZW50KGh0bWxfNjIxY2FjNWE4ZGQ5NGZjM2FiNDZlMzRlMjA1ODI2ZmUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzljZjVmZWU5MDYyMzRjNDlhNTViYzA0NmY0NDA4MGZjLmJpbmRQb3B1cChwb3B1cF9kODY1OTVkYWY0NzM0OGE3ODNmN2Y3YWNlMzQzY2ExYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWEzMTY1M2Y1ODU5NDRhYjg1OGIxYjA0ZTU4MTE1MzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTE1NjU0MjE4NzA1OCwgLTk2LjYyNTU4MDc1Nzg2NDY4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y5NzUxNjYxYmFmODRhNTA5ZDNlOTUzNjM3NjY2Mjg1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMTQzOTNkZGE1ZmQ0ZjU2YTM4YmQ1MDM5ZjNkY2M4NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjE0MzkzZGRhNWZkNGY1NmEzOGJkNTAzOWYzZGNjODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBUYWNvIElubiAoVGFjbyBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjk3NTE2NjFiYWY4NGE1MDlkM2U5NTM2Mzc2NjYyODUuc2V0Q29udGVudChodG1sX2YxNDM5M2RkYTVmZDRmNTZhMzhiZDUwMzlmM2RjYzg0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hYTMxNjUzZjU4NTk0NGFiODU4YjFiMDRlNTgxMTUzNi5iaW5kUG9wdXAocG9wdXBfZjk3NTE2NjFiYWY4NGE1MDlkM2U5NTM2Mzc2NjYyODUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4ZmMyOWIxZWNiODRkOGViN2U4YTFjOTc1YWY0YWFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg2Nzk1MDU1NjExOTA0LCAtOTYuNjQzNjIxNjY0Mzg0MThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNGY0ZTczNmJjZDZlNGIyOGIwYTE5MmRmZjAxZWI4NmIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzgwMGEyOWJiZTIxNjRkYjY5YWNhN2U2YzA2Mjk3M2JkID0gJChgPGRpdiBpZD0iaHRtbF84MDBhMjliYmUyMTY0ZGI2OWFjYTdlNmMwNjI5NzNiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIExpbmNvbG4gQ29tbXVuaXR5IFBsYXlob3VzZSAoVGhlYXRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNGY0ZTczNmJjZDZlNGIyOGIwYTE5MmRmZjAxZWI4NmIuc2V0Q29udGVudChodG1sXzgwMGEyOWJiZTIxNjRkYjY5YWNhN2U2YzA2Mjk3M2JkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9iOGZjMjliMWVjYjg0ZDhlYjdlOGExYzk3NWFmNGFhYy5iaW5kUG9wdXAocG9wdXBfNGY0ZTczNmJjZDZlNGIyOGIwYTE5MmRmZjAxZWI4NmIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwNWVmMDgwYmVhNjQ1MzRhMDMzNmJiYTk3N2E2ODMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEyOTc5NzA5OTk3MDgsIC05Ni43MzY3ODI0MjA1OTIzNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzE3MTcxNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMTcxNzE3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85OTgwZjI3OWRiZjg0ZjE3ODQ1MTVhYjhhNDMxZjg3YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYmU1OWE2MTE0YmQ1NGJjYWEyNzczMTlhYmIxMmUzMGMgPSAkKGA8ZGl2IGlkPSJodG1sX2JlNTlhNjExNGJkNTRiY2FhMjc3MzE5YWJiMTJlMzBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNV0gQmlnIFJlZCBSZXN0YXVyYW50ICZhbXA7IFNwb3J0cyBCYXIgKFNwb3J0cyBCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk5ODBmMjc5ZGJmODRmMTc4NDUxNWFiOGE0MzFmODdhLnNldENvbnRlbnQoaHRtbF9iZTU5YTYxMTRiZDU0YmNhYTI3NzMxOWFiYjEyZTMwYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNjA1ZWYwODBiZWE2NDUzNGEwMzM2YmJhOTc3YTY4MzEuYmluZFBvcHVwKHBvcHVwXzk5ODBmMjc5ZGJmODRmMTc4NDUxNWFiOGE0MzFmODdhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYWRhNTU4MDliNDk0OGVlODE5ZTIyZTdhMWZiMTY3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgzNjI3NzExNDk5Mjk3LCAtOTYuNjU0NDE5MDE0MzI5MTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2Q5NGI3ZmY2MTgxNDk0NjhjZWYwZjNkNGY0ZmJkNmIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JkZTM5YTExMDRkMTQ0YzU5NWNhZTU4YWFjYzNmY2U4ID0gJChgPGRpdiBpZD0iaHRtbF9iZGUzOWExMTA0ZDE0NGM1OTVjYWU1OGFhY2MzZmNlOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIEhvdXNlIE9mIEh1bmFuIChDaGluZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzdkOTRiN2ZmNjE4MTQ5NDY4Y2VmMGYzZDRmNGZiZDZiLnNldENvbnRlbnQoaHRtbF9iZGUzOWExMTA0ZDE0NGM1OTVjYWU1OGFhY2MzZmNlOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZWFkYTU1ODA5YjQ5NDhlZTgxOWUyMmU3YTFmYjE2NzQuYmluZFBvcHVwKHBvcHVwXzdkOTRiN2ZmNjE4MTQ5NDY4Y2VmMGYzZDRmNGZiZDZiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGU1YTdiMDJiMzc0OTg3YWRlMGExZjlhMzA5MzdiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNzY2MDI1MTAwNzI5LCAtOTYuNzAwNzM4Mzg5MjY3NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wNThhZmM4ZmU3YTE0ZDg5OWJkNDFkMDFjYTg4NzcyOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMDdiMDQyNWUwOWE3NDk0ZDk4NTUwOWQzMmE2NjY5ZmEgPSAkKGA8ZGl2IGlkPSJodG1sXzA3YjA0MjVlMDlhNzQ5NGQ5ODU1MDlkMzJhNjY2OWZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gTmVicmFza2EgVW5pb24gKFN0dWRlbnQgQ2VudGVyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wNThhZmM4ZmU3YTE0ZDg5OWJkNDFkMDFjYTg4NzcyOS5zZXRDb250ZW50KGh0bWxfMDdiMDQyNWUwOWE3NDk0ZDk4NTUwOWQzMmE2NjY5ZmEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzE4ZTVhN2IwMmIzNzQ5ODdhZGUwYTFmOWEzMDkzN2JlLmJpbmRQb3B1cChwb3B1cF8wNThhZmM4ZmU3YTE0ZDg5OWJkNDFkMDFjYTg4NzcyOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY4YzY4ZjFhYmNmNDE4YThiM2EwZWViNmUyNWJiZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTc0MDMwMTMxNTA1NzUsIC05Ni42NTQ5MjYyNjIxOTE3MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80ZDFmYjJmOWExMGQ0OGY5YWNmODQ2MzEzMTVmZTdkZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTRkMmNkMzBmNTdmNGY3YmI1M2IyNzdmYzU3MjU5MTYgPSAkKGA8ZGl2IGlkPSJodG1sX2E0ZDJjZDMwZjU3ZjRmN2JiNTNiMjc3ZmM1NzI1OTE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gU2NoYWVmZXImIzM5O3MgKEZ1cm5pdHVyZSAvIEhvbWUgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzRkMWZiMmY5YTEwZDQ4ZjlhY2Y4NDYzMTMxNWZlN2RkLnNldENvbnRlbnQoaHRtbF9hNGQyY2QzMGY1N2Y0ZjdiYjUzYjI3N2ZjNTcyNTkxNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmY4YzY4ZjFhYmNmNDE4YThiM2EwZWViNmUyNWJiZmUuYmluZFBvcHVwKHBvcHVwXzRkMWZiMmY5YTEwZDQ4ZjlhY2Y4NDYzMTMxNWZlN2RkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OTlkNmZkODczMzQ0ZGEwODM1OTcxM2YwOGY1YmY3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMzc5OTQ5NzQ4MDgxNSwgLTk2LjcwMDI1ODA5NDg2MzQ3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNDI4NUY0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM0Mjg1RjQiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzcwODUxOWVhOTkwYzRmMWU5NTIxOTU0Yzg0MTYwMTI0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hZGZlOGZiMGZhZDI0Yzk4Yjk0NmFkMTM5ZWFhNzgwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWRmZThmYjBmYWQyNGM5OGI5NDZhZDEzOWVhYTc4MDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsyXSBMYXp6YXJpJiMzOTtzIFBpenphIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzA4NTE5ZWE5OTBjNGYxZTk1MjE5NTRjODQxNjAxMjQuc2V0Q29udGVudChodG1sX2FkZmU4ZmIwZmFkMjRjOThiOTQ2YWQxMzllYWE3ODA1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81OTlkNmZkODczMzQ0ZGEwODM1OTcxM2YwOGY1YmY3YS5iaW5kUG9wdXAocG9wdXBfNzA4NTE5ZWE5OTBjNGYxZTk1MjE5NTRjODQxNjAxMjQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1MzRmNmQ3Mzk4YjRiMDk4MGFiMjdlNmE2MjY3MWZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI3NDY4MDA4NDg3NjY0LCAtOTYuNjMwOTM0NTUwMjYxODFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGNkYjcwNTI3ODk4NDVmNmIxODUwN2FiZWNjMmE3MzkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzEwZjdhZDBmYjQzYzQyOTU5ZGE5MjQ5OGExMTI2ZmJjID0gJChgPGRpdiBpZD0iaHRtbF8xMGY3YWQwZmI0M2M0Mjk1OWRhOTI0OThhMTEyNmZiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIE1pbmcmIzM5O3MgSG91c2UgKENoaW5lc2UgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZGNkYjcwNTI3ODk4NDVmNmIxODUwN2FiZWNjMmE3Mzkuc2V0Q29udGVudChodG1sXzEwZjdhZDBmYjQzYzQyOTU5ZGE5MjQ5OGExMTI2ZmJjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80NTM0ZjZkNzM5OGI0YjA5ODBhYjI3ZTZhNjI2NzFmYS5iaW5kUG9wdXAocG9wdXBfZGNkYjcwNTI3ODk4NDVmNmIxODUwN2FiZWNjMmE3MzkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzYjgzMTFiMDA3NTQ2ZGFhMzA4Yjc0NGFkYjAyYjE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI1NzIxMTM1MTQ0NjQsIC05Ni42ODI1NjkyNDIwOTM1NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84MGYyYmNlZThiNDI0MWQ4YjkxYjk5YWQzMTkwODMzYiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmJkMTU2YjZkNzg4NDU3ZWE1NWE1ODY5NzM5YWE1M2UgPSAkKGA8ZGl2IGlkPSJodG1sXzJiZDE1NmI2ZDc4ODQ1N2VhNTVhNTg2OTczOWFhNTNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gRCYjMzk7TGVvbnMgKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODBmMmJjZWU4YjQyNDFkOGI5MWI5OWFkMzE5MDgzM2Iuc2V0Q29udGVudChodG1sXzJiZDE1NmI2ZDc4ODQ1N2VhNTVhNTg2OTczOWFhNTNlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9iM2I4MzExYjAwNzU0NmRhYTMwOGI3NDRhZGIwMmIxOC5iaW5kUG9wdXAocG9wdXBfODBmMmJjZWU4YjQyNDFkOGI5MWI5OWFkMzE5MDgzM2IpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlODA1NWJmMjUwODQ1MGY5MjVkOGQ5MDU5ZDI4Y2NlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI3Nzc1MDg0OTkyODcsIC05Ni42NDQ5NzIwNTc3NTk1Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zZDczZDg2ODBhMTI0NzAyOGJjZTA1NjBlMDI5MzBmMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTMzNGVjNDNkMDM0NGI0Zjg0Y2Y2Yjk4NjczZjQ0YWUgPSAkKGA8ZGl2IGlkPSJodG1sXzEzMzRlYzQzZDAzNDRiNGY4NGNmNmI5ODY3M2Y0NGFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gU3VwZXIgVGFjbyAoVGFjbyBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2Q3M2Q4NjgwYTEyNDcwMjhiY2UwNTYwZTAyOTMwZjIuc2V0Q29udGVudChodG1sXzEzMzRlYzQzZDAzNDRiNGY4NGNmNmI5ODY3M2Y0NGFlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83ZTgwNTViZjI1MDg0NTBmOTI1ZDhkOTA1OWQyOGNjZS5iaW5kUG9wdXAocG9wdXBfM2Q3M2Q4NjgwYTEyNDcwMjhiY2UwNTYwZTAyOTMwZjIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzNzZlMWE2MTA0NDQ2ZmZiOGUzMzFkYmRhNzY3NjU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0NzU2MzUzNjI5NzksIC05Ni43MTA2MDU5NjY1MzE0NV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wMzZkYWZjOGUyZjA0MDA4OTdjZmIxOTk2NDBiMmQ1ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZmRlOGRhZjc5ZDYxNGE4MjhmOTdlN2JjOTczMDFiMDQgPSAkKGA8ZGl2IGlkPSJodG1sX2ZkZThkYWY3OWQ2MTRhODI4Zjk3ZTdiYzk3MzAxYjA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gTWNLaW5uZXkmIzM5O3MgSXJpc2ggUHViIChJcmlzaCBQdWIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzAzNmRhZmM4ZTJmMDQwMDg5N2NmYjE5OTY0MGIyZDVmLnNldENvbnRlbnQoaHRtbF9mZGU4ZGFmNzlkNjE0YTgyOGY5N2U3YmM5NzMwMWIwNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMzM3NmUxYTYxMDQ0NDZmZmI4ZTMzMWRiZGE3Njc2NTkuYmluZFBvcHVwKHBvcHVwXzAzNmRhZmM4ZTJmMDQwMDg5N2NmYjE5OTY0MGIyZDVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNzMyMmQzZDU0ZWQ0NWZmOGQyOGU0ZWVjYzI2MDJjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxODQyNiwgLTk2LjY1MTg2NTZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZDRhNTdlNTRkOTIxNDE2NmIxYjJiYjRiNWQ1MjNhZGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRhNmIxYTU4MWI0NjRmMWJhYmFmMzE3Y2JmMDM5NjNhID0gJChgPGRpdiBpZD0iaHRtbF80YTZiMWE1ODFiNDY0ZjFiYWJhZjMxN2NiZjAzOTYzYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIFQuSi4gTWF4eCAoRGVwYXJ0bWVudCBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDRhNTdlNTRkOTIxNDE2NmIxYjJiYjRiNWQ1MjNhZGUuc2V0Q29udGVudChodG1sXzRhNmIxYTU4MWI0NjRmMWJhYmFmMzE3Y2JmMDM5NjNhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNzMyMmQzZDU0ZWQ0NWZmOGQyOGU0ZWVjYzI2MDJjZi5iaW5kUG9wdXAocG9wdXBfZDRhNTdlNTRkOTIxNDE2NmIxYjJiYjRiNWQ1MjNhZGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlNjM1YjM1NTAyMDRiZjBiNTBhZGZiZGQ0NThlYzUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAwMzkyMjAxNjY4MDQsIC05Ni42MjU4NjE0MTE4Njc1Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85NjdlYzIxZGZjZWU0YWNhYjMwZDU0ZjE1ZjQ3ZGRhZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGJlNDZiYTk1NjgxNDJmM2I3OGM0MmUzNWJjNjJmMjMgPSAkKGA8ZGl2IGlkPSJodG1sXzRiZTQ2YmE5NTY4MTQyZjNiNzhjNDJlMzViYzYyZjIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gUHJhaXJpZSBMaWZlIChHeW0pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk2N2VjMjFkZmNlZTRhY2FiMzBkNTRmMTVmNDdkZGFlLnNldENvbnRlbnQoaHRtbF80YmU0NmJhOTU2ODE0MmYzYjc4YzQyZTM1YmM2MmYyMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMWU2MzViMzU1MDIwNGJmMGI1MGFkZmJkZDQ1OGVjNTMuYmluZFBvcHVwKHBvcHVwXzk2N2VjMjFkZmNlZTRhY2FiMzBkNTRmMTVmNDdkZGFlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzVkZGI4Y2Q5ODA0NTcxOTMzYTU0YzQ1OGUxYjQ4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MDQxMzU3NTA4MTE3LCAtOTYuNjc1MjgyMjIzODUxN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lMGFjNTdlNDgyNjk0ZjM0OWU1ZDU2ODU4MGUxZWMwNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzkwZGJkNWFmNmE2NGEwOGE3ZDMyYjU1NjM5MGIxZGUgPSAkKGA8ZGl2IGlkPSJodG1sXzM5MGRiZDVhZjZhNjRhMDhhN2QzMmI1NTYzOTBiMWRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gTGVvbiYjMzk7cyBHb3VybWV0IEdyb2NlciAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTBhYzU3ZTQ4MjY5NGYzNDllNWQ1Njg1ODBlMWVjMDQuc2V0Q29udGVudChodG1sXzM5MGRiZDVhZjZhNjRhMDhhN2QzMmI1NTYzOTBiMWRlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xYzVkZGI4Y2Q5ODA0NTcxOTMzYTU0YzQ1OGUxYjQ4MC5iaW5kUG9wdXAocG9wdXBfZTBhYzU3ZTQ4MjY5NGYzNDllNWQ1Njg1ODBlMWVjMDQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExNDhiNmJmZTJlYzQ1NGZiZjc2ZWNjNDFkN2U4NmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODMzNDU2NTE2MjY1ODcsIC05Ni42NTM0OTg0MTExNzg1OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81ZTY5N2VmZjhlZmU0MDMwODE3ZGM1MTMyMmE2M2VhYyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNDY3OWRjYTQ3N2ZiNGRlNThiODg2NTcxYjg2MmNhY2EgPSAkKGA8ZGl2IGlkPSJodG1sXzQ2NzlkY2E0NzdmYjRkZTU4Yjg4NjU3MWI4NjJjYWNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gRWwgQ2hhcGFycm8gKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNWU2OTdlZmY4ZWZlNDAzMDgxN2RjNTEzMjJhNjNlYWMuc2V0Q29udGVudChodG1sXzQ2NzlkY2E0NzdmYjRkZTU4Yjg4NjU3MWI4NjJjYWNhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hMTQ4YjZiZmUyZWM0NTRmYmY3NmVjYzQxZDdlODZmZC5iaW5kUG9wdXAocG9wdXBfNWU2OTdlZmY4ZWZlNDAzMDgxN2RjNTEzMjJhNjNlYWMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZTYxNTVjMTc4MjQzYWU5ZDhiMDhkNmJmNjc3OGE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEzODk1MDY0OTkzMTU0LCAtOTYuNzA5ODE1NDMyMjE4M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81YzRjYTM5YzBiN2U0N2QwOTEwNzIyYjg4YTkxMTMyYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODI5OTU1OTkwMjJmNDhhYzhjNTM5ZTQxMzM3OGUxMjQgPSAkKGA8ZGl2IGlkPSJodG1sXzgyOTk1NTk5MDIyZjQ4YWM4YzUzOWU0MTMzNzhlMTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gSmFjayYjMzk7cyBCYXIgJmFtcDsgR3JpbGwgKEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNWM0Y2EzOWMwYjdlNDdkMDkxMDcyMmI4OGE5MTEzMmEuc2V0Q29udGVudChodG1sXzgyOTk1NTk5MDIyZjQ4YWM4YzUzOWU0MTMzNzhlMTI0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83ZGU2MTU1YzE3ODI0M2FlOWQ4YjA4ZDZiZjY3NzhhOC5iaW5kUG9wdXAocG9wdXBfNWM0Y2EzOWMwYjdlNDdkMDkxMDcyMmI4OGE5MTEzMmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2OTE2YTMzY2FlNzQ0N2E4NGYzNWE3ODVmYjBjMWQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODEyOTk2MzMyNzQ5NzEsIC05Ni43MDg0OTAzMTk2MzI0Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83YmRlYTdkZDA5OGM0OThkOTUwYjkwMTBkMTIzZTQ3NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzQ2YTkwOGQ2MTE1NDcxZDlkMDBiNTIyZjhlYzE5OWYgPSAkKGA8ZGl2IGlkPSJodG1sXzc0NmE5MDhkNjExNTQ3MWQ5ZDAwYjUyMmY4ZWMxOTlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gVHJhZGUgQSBUYXBlIENvbWljIEJvb2sgQ2VudGVyIChDb21pYyBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83YmRlYTdkZDA5OGM0OThkOTUwYjkwMTBkMTIzZTQ3Ni5zZXRDb250ZW50KGh0bWxfNzQ2YTkwOGQ2MTE1NDcxZDlkMDBiNTIyZjhlYzE5OWYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2U2OTE2YTMzY2FlNzQ0N2E4NGYzNWE3ODVmYjBjMWQwLmJpbmRQb3B1cChwb3B1cF83YmRlYTdkZDA5OGM0OThkOTUwYjkwMTBkMTIzZTQ3NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE4N2VhODZiNjcwNDYyNWJlZDMwNTY1NGYwZjc4NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTUxOTU4NTk4MjQyLCAtOTYuNjI1NjQxMTU2NDg4NThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjhjOWZlNjAzNjcwNGFkNDg2NzA3ZDdkNjU0MDQ5MWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzY1YWViYjFmNDExODQwMjA4OGNlYmViZjI3NTUwZmUwID0gJChgPGRpdiBpZD0iaHRtbF82NWFlYmIxZjQxMTg0MDIwODhjZWJlYmYyNzU1MGZlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIE1hemF0bGFuIChNZXhpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI4YzlmZTYwMzY3MDRhZDQ4NjcwN2Q3ZDY1NDA0OTFlLnNldENvbnRlbnQoaHRtbF82NWFlYmIxZjQxMTg0MDIwODhjZWJlYmYyNzU1MGZlMCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNmE4N2VhODZiNjcwNDYyNWJlZDMwNTY1NGYwZjc4NGMuYmluZFBvcHVwKHBvcHVwXzI4YzlmZTYwMzY3MDRhZDQ4NjcwN2Q3ZDY1NDA0OTFlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTcwNjE2YWJkMTE0MTk1YmE5ZWVhNjk3OWMzODYwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NTIyNTU3NjM3NjIsIC05Ni43MDA2NDUwMjgyNzA3Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hNmM1Mjg1MzRkMjA0YWY4YjE0MDEyMDUxM2UyMDE5ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzUzOWI1MDExMTA4NDkzOGE4N2I2NTI2NTc4NGJlODEgPSAkKGA8ZGl2IGlkPSJodG1sXzc1MzliNTAxMTEwODQ5MzhhODdiNjUyNjU3ODRiZTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gUm9zaWUmIzM5O3MgKEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTZjNTI4NTM0ZDIwNGFmOGIxNDAxMjA1MTNlMjAxOWYuc2V0Q29udGVudChodG1sXzc1MzliNTAxMTEwODQ5MzhhODdiNjUyNjU3ODRiZTgxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82MTcwNjE2YWJkMTE0MTk1YmE5ZWVhNjk3OWMzODYwMi5iaW5kUG9wdXAocG9wdXBfYTZjNTI4NTM0ZDIwNGFmOGIxNDAxMjA1MTNlMjAxOWYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjZGViOWY3YThmMjQwZDFiZGI2NGMyY2NmYTA3MTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1NTQ2MywgLTk2LjcxMDEyMzRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTlhMjEzNDlkOTI5NDQ2YWEzZDZmNDEyY2FiNWUxODYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA2Mzc3ZTQyMTk1ZTRmNWZhNDYxNDA0YzM1MTRlYzljID0gJChgPGRpdiBpZD0iaHRtbF8wNjM3N2U0MjE5NWU0ZjVmYTQ2MTQwNGMzNTE0ZWM5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIEJ1enphcmQgQmlsbHkmIzM5O3MgKENhanVuIC8gQ3Jlb2xlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E5YTIxMzQ5ZDkyOTQ0NmFhM2Q2ZjQxMmNhYjVlMTg2LnNldENvbnRlbnQoaHRtbF8wNjM3N2U0MjE5NWU0ZjVmYTQ2MTQwNGMzNTE0ZWM5Yyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNWNkZWI5ZjdhOGYyNDBkMWJkYjY0YzJjY2ZhMDcxNWMuYmluZFBvcHVwKHBvcHVwX2E5YTIxMzQ5ZDkyOTQ0NmFhM2Q2ZjQxMmNhYjVlMTg2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYmUzOTVhNTY0MzA0MDM4YmFjNGE1Y2M5NTQ3NjllOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNzU3ODYxOTYyNzk2LCAtOTYuNzA0NDI5MDQ1MjU4ODZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM0Mjg1RjQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzQyODVGNCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzZjZGI3NzcxOGMxNDc1YTg0MDNjMTkwMmVjZDhjNDQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2M0MjUyMjQ4ZjBhMzRlOWM4ZWFlMGQ5MWI0YjA1YjlmID0gJChgPGRpdiBpZD0iaHRtbF9jNDI1MjI0OGYwYTM0ZTljOGVhZTBkOTFiNGIwNWI5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzJdIFNoZWxkb24gTXVzZXVtIG9mIEFydCAoQXJ0IE11c2V1bSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMzZjZGI3NzcxOGMxNDc1YTg0MDNjMTkwMmVjZDhjNDQuc2V0Q29udGVudChodG1sX2M0MjUyMjQ4ZjBhMzRlOWM4ZWFlMGQ5MWI0YjA1YjlmKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9kYmUzOTVhNTY0MzA0MDM4YmFjNGE1Y2M5NTQ3NjllOS5iaW5kUG9wdXAocG9wdXBfMzZjZGI3NzcxOGMxNDc1YTg0MDNjMTkwMmVjZDhjNDQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmMTQ4ZmYzNGI4ODQwYmViYmQ0MzQzMGY4YmQ1NDRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODExNjM5NTM5ODg1ODYsIC05Ni43NTExMjEwMzkyMzU4NV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzE3MTcxNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMTcxNzE3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82OWQ2YmEzZjVkYTY0YjM1YmNmYzgyYzZjMzQzZjZjYyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTFkYjM4YWU4MTA0NGE2MmFlYjlmZDRkMmZjMDcyZjMgPSAkKGA8ZGl2IGlkPSJodG1sXzkxZGIzOGFlODEwNDRhNjJhZWI5ZmQ0ZDJmYzA3MmYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNV0gWmlwbGluZSBCcmV3aW5nIENvLiAoQnJld2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjlkNmJhM2Y1ZGE2NGIzNWJjZmM4MmM2YzM0M2Y2Y2Muc2V0Q29udGVudChodG1sXzkxZGIzOGFlODEwNDRhNjJhZWI5ZmQ0ZDJmYzA3MmYzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9mZjE0OGZmMzRiODg0MGJlYmJkNDM0MzBmOGJkNTQ0ZC5iaW5kUG9wdXAocG9wdXBfNjlkNmJhM2Y1ZGE2NGIzNWJjZmM4MmM2YzM0M2Y2Y2MpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhYzg2ZTIxYWFlNDQyZTliMWE4NTc1NjAyYjg5YTk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxOTYzODQxMjY5MDEsIC05Ni43MTIwNTg3ODE0Mzc0Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hNmIwZDM2NGM0M2Y0YTI0OTgzNDg4MzU5NTdkYjJjMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOWE0YTE1NGQwZGFlNDE0ZWE0MDVmMTllOGRhY2NhMDQgPSAkKGA8ZGl2IGlkPSJodG1sXzlhNGExNTRkMGRhZTQxNGVhNDA1ZjE5ZThkYWNjYTA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gVGluYSYjMzk7cyBDYWZlIChCcmVha2Zhc3QgU3BvdCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTZiMGQzNjRjNDNmNGEyNDk4MzQ4ODM1OTU3ZGIyYzEuc2V0Q29udGVudChodG1sXzlhNGExNTRkMGRhZTQxNGVhNDA1ZjE5ZThkYWNjYTA0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yYWM4NmUyMWFhZTQ0MmU5YjFhODU3NTYwMmI4OWE5OC5iaW5kUG9wdXAocG9wdXBfYTZiMGQzNjRjNDNmNGEyNDk4MzQ4ODM1OTU3ZGIyYzEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkOTVhZWUwMTY2NDRkMjdhZmNhZmFiYjY5MmJmODA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0Njc5MDE2NTAyNiwgLTk2LjY2OTk1NTA3NTkxMDY1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2FhZDc0ZDBmMDA2YjQ0NGZhMjk3ZmE4ZWViYmZjZDg1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84MGFmZmU0MzIxNzM0YzYwODYyNzMxNDEyYzViZWEzOSA9ICQoYDxkaXYgaWQ9Imh0bWxfODBhZmZlNDMyMTczNGM2MDg2MjczMTQxMmM1YmVhMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBTaGVuIENhZmUgKENoaW5lc2UgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWFkNzRkMGYwMDZiNDQ0ZmEyOTdmYThlZWJiZmNkODUuc2V0Q29udGVudChodG1sXzgwYWZmZTQzMjE3MzRjNjA4NjI3MzE0MTJjNWJlYTM5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85ZDk1YWVlMDE2NjQ0ZDI3YWZjYWZhYmI2OTJiZjgwNy5iaW5kUG9wdXAocG9wdXBfYWFkNzRkMGYwMDZiNDQ0ZmEyOTdmYThlZWJiZmNkODUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkN2VlMGZjMzNiNzRmOWE5MGE3ZTVhYTIxMmQ1ODY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE4MzkxLCAtOTYuNjUzMTU5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ExY2QwMGZkZjJlOTRlZTZhMGRjNGVhN2RkMWZmMWI5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xYTkwMzdjMjFiNjQ0MTc3YjUwNGZmYTFhMWZhM2RhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWE5MDM3YzIxYjY0NDE3N2I1MDRmZmExYTFmYTNkYWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBNY2FsaXN0ZXLigJlzIERlbGkgKERlbGkgLyBCb2RlZ2EpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ExY2QwMGZkZjJlOTRlZTZhMGRjNGVhN2RkMWZmMWI5LnNldENvbnRlbnQoaHRtbF8xYTkwMzdjMjFiNjQ0MTc3YjUwNGZmYTFhMWZhM2RhZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ3ZWUwZmMzM2I3NGY5YTkwYTdlNWFhMjEyZDU4NjQuYmluZFBvcHVwKHBvcHVwX2ExY2QwMGZkZjJlOTRlZTZhMGRjNGVhN2RkMWZmMWI5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Y2EwYjJkY2ZlODg0ZWQxOWI0NDM3ZmJlNjFkYjVlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyNzEzOTE3NDgzNzIxNCwgLTk2LjY0MzgwNDgzNDAxMDY4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNmODM2ZTczZjExMDQzNmVhNDkxNThiYzIwZTNiMWQ4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82YzZlODRlYmRkZjc0MDlmOTc1YzRlOTc4NTRhZTE0ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmM2ZTg0ZWJkZGY3NDA5Zjk3NWM0ZTk3ODU0YWUxNGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBUYWNvIElubiAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zZjgzNmU3M2YxMTA0MzZlYTQ5MTU4YmMyMGUzYjFkOC5zZXRDb250ZW50KGh0bWxfNmM2ZTg0ZWJkZGY3NDA5Zjk3NWM0ZTk3ODU0YWUxNGUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzhjYTBiMmRjZmU4ODRlZDE5YjQ0MzdmYmU2MWRiNWViLmJpbmRQb3B1cChwb3B1cF8zZjgzNmU3M2YxMTA0MzZlYTQ5MTU4YmMyMGUzYjFkOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNiYmIwNzFjODZmNDU5YmFhZjU0ZGVkYzM3NzgwZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzA3OTQzOTc4MTkzMiwgLTk2LjYyMjkwMDIzNzY3NTc2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY4NTM4YWQ4MWU2NTQ4NjM4YjQxMDhjZjZjZTYzODg1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80NTUxOGQ0MWEzYTE0Mzg3YTliZjMwZjY5YzRjZmJmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDU1MThkNDFhM2ExNDM4N2E5YmYzMGY2OWM0Y2ZiZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBOdVZpYmUgKENvZmZlZSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82ODUzOGFkODFlNjU0ODYzOGI0MTA4Y2Y2Y2U2Mzg4NS5zZXRDb250ZW50KGh0bWxfNDU1MThkNDFhM2ExNDM4N2E5YmYzMGY2OWM0Y2ZiZjEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQzYmJiMDcxYzg2ZjQ1OWJhYWY1NGRlZGMzNzc4MGRkLmJpbmRQb3B1cChwb3B1cF82ODUzOGFkODFlNjU0ODYzOGI0MTA4Y2Y2Y2U2Mzg4NSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDA1M2Q3NzMwOTM1NGM3Mjk0MjM4OWJhMTgxOGQ5ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njk5OTk5MDY0NDYxOSwgLTk2LjY1NDkxMjk4ODU1ODExXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzU1YWMzNDA2N2ViNjRjY2ViZTYyYTAxZTNkNjY3MzEzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81MWQzNmU3ZTU4ODA0YzUxYjE1ZjdhOTVkNjE1M2U1MyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTFkMzZlN2U1ODgwNGM1MWIxNWY3YTk1ZDYxNTNlNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBQZW5lbG9wZSYjMzk7cyBMaWwgQ2Fmw6kgKENhZsOpKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81NWFjMzQwNjdlYjY0Y2NlYmU2MmEwMWUzZDY2NzMxMy5zZXRDb250ZW50KGh0bWxfNTFkMzZlN2U1ODgwNGM1MWIxNWY3YTk1ZDYxNTNlNTMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2QwNTNkNzczMDkzNTRjNzI5NDIzODliYTE4MThkOWY1LmJpbmRQb3B1cChwb3B1cF81NWFjMzQwNjdlYjY0Y2NlYmU2MmEwMWUzZDY2NzMxMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JmNGUyZjBhMWRmNDJiMGIwYzk2NTBhY2ExYWE2NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTIyMTU5NjA4MjgyOCwgLTk2LjcyNzM0NTQzNjc4NDE2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMTcxNzE3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMxNzE3MTciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2VhMzg1NzVkMjFiODQ4YzQ5YWFmNzk4NmI4MjEyNjY1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lYWFkMjczNTE0YmI0MzFjYmQ2OTA1MmVkMjRiMjRmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWFhZDI3MzUxNGJiNDMxY2JkNjkwNTJlZDI0YjI0ZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls1XSBCYWNrc3dpbmcgQnJld2luZyBDby4gKEJyZXdlcnkpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2VhMzg1NzVkMjFiODQ4YzQ5YWFmNzk4NmI4MjEyNjY1LnNldENvbnRlbnQoaHRtbF9lYWFkMjczNTE0YmI0MzFjYmQ2OTA1MmVkMjRiMjRmMSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfY2JmNGUyZjBhMWRmNDJiMGIwYzk2NTBhY2ExYWE2NTEuYmluZFBvcHVwKHBvcHVwX2VhMzg1NzVkMjFiODQ4YzQ5YWFmNzk4NmI4MjEyNjY1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZGFmNjU1ZjM5YTA0YWM4YWY5NTEyOWQ3N2ZhNzBhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1ODgyODk4MTU4OTk5LCAtOTYuNjQwNTU2OTAzMzUzOThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZDcwN2UwMzc3ZmQ1NGMwYTliMjRiZDNjNGFiMTkyMTcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzJmNDZkNTlmNGNlZjQxNjhiNDU1ZTA5ZjY5YjM2MWRiID0gJChgPGRpdiBpZD0iaHRtbF8yZjQ2ZDU5ZjRjZWY0MTY4YjQ1NWUwOWY2OWIzNjFkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIE5haWwgRGVzaWduICZhbXA7IFNwYSAoQ29zbWV0aWNzIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Q3MDdlMDM3N2ZkNTRjMGE5YjI0YmQzYzRhYjE5MjE3LnNldENvbnRlbnQoaHRtbF8yZjQ2ZDU5ZjRjZWY0MTY4YjQ1NWUwOWY2OWIzNjFkYik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNmRhZjY1NWYzOWEwNGFjOGFmOTUxMjlkNzdmYTcwYWIuYmluZFBvcHVwKHBvcHVwX2Q3MDdlMDM3N2ZkNTRjMGE5YjI0YmQzYzRhYjE5MjE3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzJiYzJiODBjZmY0M2ZmODBkMWNhYzRjYmZkMDNkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1ODA1NTEwNzExMzMzLCAtOTYuNjQyNjg0ODk2MjAyNTRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzY1ODk3OWRmZGYzNGZlZmIwMzE3NDllYmVlMzg1MzIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRhYWViYTMxY2ZiNjRkODZiMjEzMmQ3NzE5MTc0MDU2ID0gJChgPGRpdiBpZD0iaHRtbF80YWFlYmEzMWNmYjY0ZDg2YjIxMzJkNzcxOTE3NDA1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIFBhcnRoZW5vbiBUYXZlcm5hIEdyZWVrIEdyaWxsIChHcmVlayBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83NjU4OTc5ZGZkZjM0ZmVmYjAzMTc0OWViZWUzODUzMi5zZXRDb250ZW50KGh0bWxfNGFhZWJhMzFjZmI2NGQ4NmIyMTMyZDc3MTkxNzQwNTYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzgzMmJjMmI4MGNmZjQzZmY4MGQxY2FjNGNiZmQwM2Q3LmJpbmRQb3B1cChwb3B1cF83NjU4OTc5ZGZkZjM0ZmVmYjAzMTc0OWViZWUzODUzMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFmMjg5MzM1ZjVlNDRiNjlkZTY0YmI5MWI1NzRlZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTUyNzk2MzQ5Nzg5NSwgLTk2LjYzMDkyMzY5MTUwNDgzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzdkOWVhODFkZGY1ZDRiMTU4ZDgwYmNlNDVjYjg5OWIxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84ZTEyZWNkNTgwNTA0M2Q1OGI4NjY4M2FmZGMzZmJiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfOGUxMmVjZDU4MDUwNDNkNThiODY2ODNhZmRjM2ZiYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBIdUhvdCBNb25nb2xpYW4gR3JpbGwgKEFzaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzdkOWVhODFkZGY1ZDRiMTU4ZDgwYmNlNDVjYjg5OWIxLnNldENvbnRlbnQoaHRtbF84ZTEyZWNkNTgwNTA0M2Q1OGI4NjY4M2FmZGMzZmJiYik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjFmMjg5MzM1ZjVlNDRiNjlkZTY0YmI5MWI1NzRlZjEuYmluZFBvcHVwKHBvcHVwXzdkOWVhODFkZGY1ZDRiMTU4ZDgwYmNlNDVjYjg5OWIxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MmQ3OTkwMThjODU0Mjk1OWVhY2M3ZTg4OTQyNmRjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgzNjQxNDAyNTkzOTczLCAtOTYuNjU2OTgzNzcyMzMzNzNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzIwODY2ODIzMmMzNDdkYjg5NWUzMzQxZmViNDgzNjkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q3ZmNmMTAxNmQ0MzQ3MjNiMDBmMGQwMWZmZjcxYjM0ID0gJChgPGRpdiBpZD0iaHRtbF9kN2ZjZjEwMTZkNDM0NzIzYjAwZjBkMDFmZmY3MWIzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIFJpc2t5JiMzOTtzIFNwb3J0cyBCYXIgJmFtcDsgR3JpbGwgKFNwb3J0cyBCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzMyMDg2NjgyMzJjMzQ3ZGI4OTVlMzM0MWZlYjQ4MzY5LnNldENvbnRlbnQoaHRtbF9kN2ZjZjEwMTZkNDM0NzIzYjAwZjBkMDFmZmY3MWIzNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNjJkNzk5MDE4Yzg1NDI5NTllYWNjN2U4ODk0MjZkY2MuYmluZFBvcHVwKHBvcHVwXzMyMDg2NjgyMzJjMzQ3ZGI4OTVlMzM0MWZlYjQ4MzY5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNzk1ZjM0YjY4MTY0Mjg3OTkyMmFmMjkyOGUxZWFiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDQyNzk5MTQ0MTk5NSwgLTk2LjYzODQzMTc2Mzk1MTJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjczOWI2MzI1NGIxNGI4N2FlODE0MTg1YWMzMzQzOGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2I3NGYzNWQyNDZiZjRlNGRiZmE1ZTY0N2VhNjFjYjZiID0gJChgPGRpdiBpZD0iaHRtbF9iNzRmMzVkMjQ2YmY0ZTRkYmZhNWU2NDdlYTYxY2I2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIE9saXZlIEdhcmRlbiAoSXRhbGlhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNzM5YjYzMjU0YjE0Yjg3YWU4MTQxODVhYzMzNDM4ZS5zZXRDb250ZW50KGh0bWxfYjc0ZjM1ZDI0NmJmNGU0ZGJmYTVlNjQ3ZWE2MWNiNmIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2E3OTVmMzRiNjgxNjQyODc5OTIyYWYyOTI4ZTFlYWI5LmJpbmRQb3B1cChwb3B1cF9mNzM5YjYzMjU0YjE0Yjg3YWU4MTQxODVhYzMzNDM4ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjhkOTA5NDBjODUwNGQ0OWI0YTQwMGE1Y2I2NjY3ZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM1MDIwOTU2NTkxOCwgLTk2Ljc0MjY0MjYyMjc5NTQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMTcxNzE3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMxNzE3MTciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2IxNzA3Yzg0MjJlMTQ0YWZhOGZjMzA3NTJhYjA5N2UyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82MGI5OTE3NmZkMWE0MmFmODIyZDRjM2ZhYThhYTgzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjBiOTkxNzZmZDFhNDJhZjgyMmQ0YzNmYWE4YWE4M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls1XSBQaGF0IEphY2tzIChCQlEgSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2IxNzA3Yzg0MjJlMTQ0YWZhOGZjMzA3NTJhYjA5N2UyLnNldENvbnRlbnQoaHRtbF82MGI5OTE3NmZkMWE0MmFmODIyZDRjM2ZhYThhYTgzYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYjhkOTA5NDBjODUwNGQ0OWI0YTQwMGE1Y2I2NjY3ZDguYmluZFBvcHVwKHBvcHVwX2IxNzA3Yzg0MjJlMTQ0YWZhOGZjMzA3NTJhYjA5N2UyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZDU5NTgzY2NlMjQ0ZDIxYjk2YTA1MzUyOTYyOTNkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg2MTI3ODYyLCAtOTYuNjc3OTEwNTNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNjZTEyYzAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI2NlMTJjMCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMGQwZmZkYjY0YWY5NDlkODg5YzU1N2FkZmE0MDJkNmQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U0ODEzYmM2YWFlZDRkMGRhNTk4YTBkNmUwOWE4YmQ2ID0gJChgPGRpdiBpZD0iaHRtbF9lNDgxM2JjNmFhZWQ0ZDBkYTU5OGEwZDZlMDlhOGJkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzRdIEh5LVZlZSAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMGQwZmZkYjY0YWY5NDlkODg5YzU1N2FkZmE0MDJkNmQuc2V0Q29udGVudChodG1sX2U0ODEzYmM2YWFlZDRkMGRhNTk4YTBkNmUwOWE4YmQ2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hZDU5NTgzY2NlMjQ0ZDIxYjk2YTA1MzUyOTYyOTNkNi5iaW5kUG9wdXAocG9wdXBfMGQwZmZkYjY0YWY5NDlkODg5YzU1N2FkZmE0MDJkNmQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4MjViZGM2M2U2ZjQ4NmU5YjE1NGM4MDhiOGY4MjI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0ODk0NzAzMDkzNzEsIC05Ni42Njk3NDQyMDgwNzI1M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xNDBiZmUwYWI1Mjg0OTk0ODFmNzM0Njc1NGE4NjA0NCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzc2OGVjNTEzYzhiNGNiMDk2ZTZiMjg0YzAwNmE1ZTAgPSAkKGA8ZGl2IGlkPSJodG1sX2M3NjhlYzUxM2M4YjRjYjA5NmU2YjI4NGMwMDZhNWUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gVGFuZG9vciBJbmRpYW4gQ3Vpc2luZSAoSW5kaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE0MGJmZTBhYjUyODQ5OTQ4MWY3MzQ2NzU0YTg2MDQ0LnNldENvbnRlbnQoaHRtbF9jNzY4ZWM1MTNjOGI0Y2IwOTZlNmIyODRjMDA2YTVlMCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZjgyNWJkYzYzZTZmNDg2ZTliMTU0YzgwOGI4ZjgyMjcuYmluZFBvcHVwKHBvcHVwXzE0MGJmZTBhYjUyODQ5OTQ4MWY3MzQ2NzU0YTg2MDQ0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNWE0NGFkZmRmZjU0OGIyOTQxYzlkYzg2NjcxZTgxYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNDU0MjQwNDMxOTEsIC05Ni42MzQ5NDY4NTQ1NDEyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2VjYzFmMDYwNGRhODQwNzFhOWE1ODM4OGZkODllYjRmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wOWZkNTg2MjEwMTA0MGI5YWZiNTljNzU3NDQyMzM5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDlmZDU4NjIxMDEwNDBiOWFmYjU5Yzc1NzQ0MjMzOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBHcmFuaXRlIENpdHkgKEJyZXdlcnkpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2VjYzFmMDYwNGRhODQwNzFhOWE1ODM4OGZkODllYjRmLnNldENvbnRlbnQoaHRtbF8wOWZkNTg2MjEwMTA0MGI5YWZiNTljNzU3NDQyMzM5Zik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYTVhNDRhZGZkZmY1NDhiMjk0MWM5ZGM4NjY3MWU4MWIuYmluZFBvcHVwKHBvcHVwX2VjYzFmMDYwNGRhODQwNzFhOWE1ODM4OGZkODllYjRmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MDk1MTRiMDNmYTM0MjJjYTdhYjMxNjhhYmVkZjc4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxMjg0NDMwMTIzNjI1LCAtOTYuNjM5MTc1NDkwMjE2MDVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZWY3NDhiYzdjYzhhNDNkMDg4OTViOTdhOTJiODE0N2QgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzUwYzU1OWQ4YTgxMjQzYzJiMDA2MTA5OTA4NWRhNjYyID0gJChgPGRpdiBpZD0iaHRtbF81MGM1NTlkOGE4MTI0M2MyYjAwNjEwOTkwODVkYTY2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIFdob2xlIEZvb2RzIE1hcmtldCAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWY3NDhiYzdjYzhhNDNkMDg4OTViOTdhOTJiODE0N2Quc2V0Q29udGVudChodG1sXzUwYzU1OWQ4YTgxMjQzYzJiMDA2MTA5OTA4NWRhNjYyKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82MDk1MTRiMDNmYTM0MjJjYTdhYjMxNjhhYmVkZjc4MC5iaW5kUG9wdXAocG9wdXBfZWY3NDhiYzdjYzhhNDNkMDg4OTViOTdhOTJiODE0N2QpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1ODU3MzdmYTdlYTQ2NTBiZGFkY2Q3MDEzNmU1ZDdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0NzM2MjExNTg1MDU1LCAtOTYuNjU1MTU1MDQ4MjE3ODRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNGE2ZTBhOTAyNGRhNGQ3MmIzZWUwNWMyNWNiZmY0MzYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2YzMzRkY2QwNzVlYzQwZjFiMGIxZTJjYTNjYTBhMDAxID0gJChgPGRpdiBpZD0iaHRtbF9mMzM0ZGNkMDc1ZWM0MGYxYjBiMWUyY2EzY2EwYTAwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIEJhZ2VscyAmYW1wOyBKb2UgKEJhZ2VsIFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzRhNmUwYTkwMjRkYTRkNzJiM2VlMDVjMjVjYmZmNDM2LnNldENvbnRlbnQoaHRtbF9mMzM0ZGNkMDc1ZWM0MGYxYjBiMWUyY2EzY2EwYTAwMSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMTU4NTczN2ZhN2VhNDY1MGJkYWRjZDcwMTM2ZTVkN2UuYmluZFBvcHVwKHBvcHVwXzRhNmUwYTkwMjRkYTRkNzJiM2VlMDVjMjVjYmZmNDM2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjBiODQ1Yzc5MjI0MDg4OTgzMTBjNDVjOTliNWFkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzgzNDYyMTA4NzcyNCwgLTk2LjY1MzM0MzQyNjM4MzQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNmMWJiNDMyZmE3MjQwMDI4ZjdjNjkyYThkZmMxMDc0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jOGM1ZmZlZWVhYWI0OWU0ODJlNDM1MWZlMzJkNTUyNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzhjNWZmZWVlYWFiNDllNDgyZTQzNTFmZTMyZDU1MjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBHcmV0YSYjMzk7cyBHb3VybWV0IENhdGVyaW5nIChEZWxpIC8gQm9kZWdhKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zZjFiYjQzMmZhNzI0MDAyOGY3YzY5MmE4ZGZjMTA3NC5zZXRDb250ZW50KGh0bWxfYzhjNWZmZWVlYWFiNDllNDgyZTQzNTFmZTMyZDU1MjcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2RiMGI4NDVjNzkyMjQwODg5ODMxMGM0NWM5OWI1YWQ3LmJpbmRQb3B1cChwb3B1cF8zZjFiYjQzMmZhNzI0MDAyOGY3YzY5MmE4ZGZjMTA3NCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NjYmRmZmEyZTA5NDBjY2E1MzM2YWZhNDhkNTBmMmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjA2NzIwNTMxOTczMjUsIC05Ni42NTMzNjk2ODgzODYzNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zY2RkMjAzMjMzZTg0YTQxYmQ1OWViMzYyMmU5YTBmNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjUwZjliYzI4YTdjNGRiMmJlNGZlODBlYjczYTAxMTUgPSAkKGA8ZGl2IGlkPSJodG1sXzI1MGY5YmMyOGE3YzRkYjJiZTRmZTgwZWI3M2EwMTE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gVmFsZW50aW5vJiMzOTtzIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2NkZDIwMzIzM2U4NGE0MWJkNTllYjM2MjJlOWEwZjUuc2V0Q29udGVudChodG1sXzI1MGY5YmMyOGE3YzRkYjJiZTRmZTgwZWI3M2EwMTE1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jY2NiZGZmYTJlMDk0MGNjYTUzMzZhZmE0OGQ1MGYyZS5iaW5kUG9wdXAocG9wdXBfM2NkZDIwMzIzM2U4NGE0MWJkNTllYjM2MjJlOWEwZjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3NTUyZjNkMDAyZTQwYzU4Zjc4Njc2OGRmYThjOWMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcyMDQ4NzAwNDIyNTgsIC05Ni42NTQ3MDMzMzU2NTA3XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ExZjE5NzZkMjJkYTQ5YWI4OWZjYjI0MTg1NDY0ZDVlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85ODI3NWEwOGFjOWM0ODg0YTdkYjIzZjVlODYwYTU1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTgyNzVhMDhhYzljNDg4NGE3ZGIyM2Y1ZTg2MGE1NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBUYWNvIElubiAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hMWYxOTc2ZDIyZGE0OWFiODlmY2IyNDE4NTQ2NGQ1ZS5zZXRDb250ZW50KGh0bWxfOTgyNzVhMDhhYzljNDg4NGE3ZGIyM2Y1ZTg2MGE1NTQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzY3NTUyZjNkMDAyZTQwYzU4Zjc4Njc2OGRmYThjOWMxLmJpbmRQb3B1cChwb3B1cF9hMWYxOTc2ZDIyZGE0OWFiODlmY2IyNDE4NTQ2NGQ1ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODkxMzU2NDIxM2E1NDZhZDkyMTNhOTBjNzNjZDc4NDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDEyMDI4LCAtOTYuNjgxODA0N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kN2U1YmZkYmRjNzA0Y2E5YTJkZGU1ODI1MGZjYzIwMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjk4ZDUzYmQ1YjMyNGJkYzk5ZTA2ZWY5ZjM2MTk1YTMgPSAkKGA8ZGl2IGlkPSJodG1sXzY5OGQ1M2JkNWIzMjRiZGM5OWUwNmVmOWYzNjE5NWEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gQ2hpY2stZmlsLUEgKEZhc3QgRm9vZCBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kN2U1YmZkYmRjNzA0Y2E5YTJkZGU1ODI1MGZjYzIwMy5zZXRDb250ZW50KGh0bWxfNjk4ZDUzYmQ1YjMyNGJkYzk5ZTA2ZWY5ZjM2MTk1YTMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzg5MTM1NjQyMTNhNTQ2YWQ5MjEzYTkwYzczY2Q3ODQxLmJpbmRQb3B1cChwb3B1cF9kN2U1YmZkYmRjNzA0Y2E5YTJkZGU1ODI1MGZjYzIwMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzVkZTk1MjVjNmUzNDQyMGI5NzNjOWJkNTM2OWRmOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDIyMzU2NDU4NTcyMzUsIC05Ni42NzQ5NzMzMTMyNTIyNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lZGY3MmM1ZDBjNDY0N2JmOGY1MjNkZjAzMTBkZjNmZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjk3MWE0NmYwYjVhNDk1ZTkwOWExZDgzZTZiNTcwOGQgPSAkKGA8ZGl2IGlkPSJodG1sXzI5NzFhNDZmMGI1YTQ5NWU5MDlhMWQ4M2U2YjU3MDhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gVHJhZGVyIEpvZSYjMzk7cyAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWRmNzJjNWQwYzQ2NDdiZjhmNTIzZGYwMzEwZGYzZmYuc2V0Q29udGVudChodG1sXzI5NzFhNDZmMGI1YTQ5NWU5MDlhMWQ4M2U2YjU3MDhkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83NWRlOTUyNWM2ZTM0NDIwYjk3M2M5YmQ1MzY5ZGY4Zi5iaW5kUG9wdXAocG9wdXBfZWRmNzJjNWQwYzQ2NDdiZjhmNTIzZGYwMzEwZGYzZmYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjOTRmZjBjNTcxMTRlM2E4N2E3YTZiY2I3MDM4MWMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0MzA2NzE4MzM2MzksIC05Ni42MjU2Njg4OTYyMDQzOV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hZmQ2ZGVmZDRmY2E0NWFiYmRiYWUyMzU5ZWE5MWEzYyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2QwZTc3OWI5ZDUzNDMyNGJmMTdiOTExN2YyY2ZlMTMgPSAkKGA8ZGl2IGlkPSJodG1sX2NkMGU3NzliOWQ1MzQzMjRiZjE3YjkxMTdmMmNmZTEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gTGUgUXVhcnRpZXIgKENhZsOpKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hZmQ2ZGVmZDRmY2E0NWFiYmRiYWUyMzU5ZWE5MWEzYy5zZXRDb250ZW50KGh0bWxfY2QwZTc3OWI5ZDUzNDMyNGJmMTdiOTExN2YyY2ZlMTMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2VjOTRmZjBjNTcxMTRlM2E4N2E3YTZiY2I3MDM4MWMwLmJpbmRQb3B1cChwb3B1cF9hZmQ2ZGVmZDRmY2E0NWFiYmRiYWUyMzU5ZWE5MWEzYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzY3MmQxNmI2NTM0NDBiNzg1YTc1ZGJhNzlmNWYzZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDYzNzAwMjQyNDE3OSwgLTk2LjY4Nzk0Mjg1NTc0OTYzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2VjNDAzZjJmNzIzNDQzNDFhZGYyODBkZjk5Y2ViZGUwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84NjVmOTE2ZjM3Yjg0MmE2YWQxZTUwMGQ4N2FhZjg1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfODY1ZjkxNmYzN2I4NDJhNmFkMWU1MDBkODdhYWY4NTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBTcGlrZXMgQmVhY2ggQmFyIGFuZCBHcmlsbCAoU3BvcnRzIEJhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWM0MDNmMmY3MjM0NDM0MWFkZjI4MGRmOTljZWJkZTAuc2V0Q29udGVudChodG1sXzg2NWY5MTZmMzdiODQyYTZhZDFlNTAwZDg3YWFmODU5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jNjcyZDE2YjY1MzQ0MGI3ODVhNzVkYmE3OWY1ZjNlMC5iaW5kUG9wdXAocG9wdXBfZWM0MDNmMmY3MjM0NDM0MWFkZjI4MGRmOTljZWJkZTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1Njc0Yjc2MDg4NDQyMTM5MGRkYjNlZmI0OWM5MTBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIwMjYwMjY3MzA5NjU2LCAtOTYuNzM0NTUyODMwNjEyMzldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMxNzE3MTciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzE3MTcxNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzVmZTkxMjhiM2QzNDUwNWEyNzE5MTE0Zjk2ZjAzYTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y5NzQyMmUyNTk4MTRiOTBiZTY5NzQ2MDVmOWYwZDlkID0gJChgPGRpdiBpZD0iaHRtbF9mOTc0MjJlMjU5ODE0YjkwYmU2OTc0NjA1ZjlmMGQ5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzVdIENhcGl0b2wgQmVhY2ggU2FsdCBMYWtlIChCZWFjaCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMzVmZTkxMjhiM2QzNDUwNWEyNzE5MTE0Zjk2ZjAzYTIuc2V0Q29udGVudChodG1sX2Y5NzQyMmUyNTk4MTRiOTBiZTY5NzQ2MDVmOWYwZDlkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jNTY3NGI3NjA4ODQ0MjEzOTBkZGIzZWZiNDljOTEwZC5iaW5kUG9wdXAocG9wdXBfMzVmZTkxMjhiM2QzNDUwNWEyNzE5MTE0Zjk2ZjAzYTIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1YjhiYTYzZTMxNDRlM2Y4ZjdiMGNlYjM3YzcwZjczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1OTEwOTkyMzM5NDcsIC05Ni43MDAyNzk5NTExOTc0OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lZjJjYTNhZTYwOTA0ZDcyYmQ0NDljY2NmZDBkN2E3MiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjAwNzU0ZWJjNmNkNGViZjg2NTJiM2Y1OWJhYWIwOWMgPSAkKGA8ZGl2IGlkPSJodG1sXzYwMDc1NGViYzZjZDRlYmY4NjUyYjNmNTliYWFiMDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gQ3VsdmVyJiMzOTtzIChGYXN0IEZvb2QgUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWYyY2EzYWU2MDkwNGQ3MmJkNDQ5Y2NjZmQwZDdhNzIuc2V0Q29udGVudChodG1sXzYwMDc1NGViYzZjZDRlYmY4NjUyYjNmNTliYWFiMDljKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9iNWI4YmE2M2UzMTQ0ZTNmOGY3YjBjZWIzN2M3MGY3My5iaW5kUG9wdXAocG9wdXBfZWYyY2EzYWU2MDkwNGQ3MmJkNDQ5Y2NjZmQwZDdhNzIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyNTA4ZjQ5MmJkMzRmMDA5MTBkZjcyMjRmMGE2MmYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1NTgzNzMyMTc3MDYsIC05Ni42Mzk1Mjc4ODU5NjY0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MyOTVhMjJmOTVlNDQ1NjE4Zjc1MTNkZjlhMjA2OTlkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xYzk3ZGRlNWFkNTE0ODU3ODNjZWQ0ODA1MTFkMGI1NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWM5N2RkZTVhZDUxNDg1NzgzY2VkNDgwNTExZDBiNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBMYXpsbyYjMzk7cyBCcmV3ZXJ5ICZhbXA7IEdyaWxsIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jMjk1YTIyZjk1ZTQ0NTYxOGY3NTEzZGY5YTIwNjk5ZC5zZXRDb250ZW50KGh0bWxfMWM5N2RkZTVhZDUxNDg1NzgzY2VkNDgwNTExZDBiNTcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2QyNTA4ZjQ5MmJkMzRmMDA5MTBkZjcyMjRmMGE2MmYxLmJpbmRQb3B1cChwb3B1cF9jMjk1YTIyZjk1ZTQ0NTYxOGY3NTEzZGY5YTIwNjk5ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGY4YzZkYmMxNDZiNDQ2YWEzNTRhY2UyZmU2NzhkOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTczNywgLTk2LjYzNDk2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhjNmZiYWFhMGQyZDQ5ZjZiM2YxM2E1MjM3N2VhNGJlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85ZWFlYzQ2MjJhMWM0MGQwOTgzNTdhYmRiZjM0MzQyMyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWVhZWM0NjIyYTFjNDBkMDk4MzU3YWJkYmYzNDM0MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBJc2xlcyBQdWIgJmFtcDsgUGl6emEgKFBpenphIFBsYWNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84YzZmYmFhYTBkMmQ0OWY2YjNmMTNhNTIzNzdlYTRiZS5zZXRDb250ZW50KGh0bWxfOWVhZWM0NjIyYTFjNDBkMDk4MzU3YWJkYmYzNDM0MjMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzhmOGM2ZGJjMTQ2YjQ0NmFhMzU0YWNlMmZlNjc4ZDk5LmJpbmRQb3B1cChwb3B1cF84YzZmYmFhYTBkMmQ0OWY2YjNmMTNhNTIzNzdlYTRiZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAyZjYwNWU3ZTNmNDM0NjhkZWQ5NDcyNmFhYWRhNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTg0MzE4MDg4MTAyODUsIC05Ni42MjYyOTY0MTU2MjgyM10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yMTc3YjhlNmEyMGY0ZjMzYWQzNjI1OTY2YjQ2MzFlMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZGZhMjYxYjdmMGEyNDRmOWI0NDA5N2Y1ZmViNWRhY2UgPSAkKGA8ZGl2IGlkPSJodG1sX2RmYTI2MWI3ZjBhMjQ0ZjliNDQwOTdmNWZlYjVkYWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gQ2hvcHN0aWNrcyAoQ2hpbmVzZSBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yMTc3YjhlNmEyMGY0ZjMzYWQzNjI1OTY2YjQ2MzFlMS5zZXRDb250ZW50KGh0bWxfZGZhMjYxYjdmMGEyNDRmOWI0NDA5N2Y1ZmViNWRhY2UpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQwMmY2MDVlN2UzZjQzNDY4ZGVkOTQ3MjZhYWFkYTcyLmJpbmRQb3B1cChwb3B1cF8yMTc3YjhlNmEyMGY0ZjMzYWQzNjI1OTY2YjQ2MzFlMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQ4NmU5NjgzNmZiNDUwN2IwYWY1ZjI3ZjZhZjM1NjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzA5MTkwMDAxMDk4NSwgLTk2LjYyMzUzNjg1MDM2NjU4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JlNDQzOTgyZDY3MzQ2NGFiNTFkZWFlYTJjZDA3YzQ5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NzFjMTM4NjljYzQ0YWQ2OTcxYWFlMjQ2N2EyYTQyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzcxYzEzODY5Y2M0NGFkNjk3MWFhZTI0NjdhMmE0MmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBWZW51ZSBSZXN0YXVyYW50ICZhbXA7IExvdW5nZSAoQW1lcmljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmU0NDM5ODJkNjczNDY0YWI1MWRlYWVhMmNkMDdjNDkuc2V0Q29udGVudChodG1sXzc3MWMxMzg2OWNjNDRhZDY5NzFhYWUyNDY3YTJhNDJjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZDg2ZTk2ODM2ZmI0NTA3YjBhZjVmMjdmNmFmMzU2MC5iaW5kUG9wdXAocG9wdXBfYmU0NDM5ODJkNjczNDY0YWI1MWRlYWVhMmNkMDdjNDkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyMGZhYWZmZDE2ZjQ3ZjY5OTNhZWZlNTVkZDZkMjBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU3MDI4NTA5MDM4MDcsIC05Ni42NTMzMzQ3OTE3NDE5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U4ZWI1MGZjNGYyZDRiNjM5Nzc3Yjk0Y2M4NTNmZDdkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wYTY0ODQ0YzVmNWQ0MTc0YWZiNWVmZDhjNmEyZWQ5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMGE2NDg0NGM1ZjVkNDE3NGFmYjVlZmQ4YzZhMmVkOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBTdGF1ZmZlciYjMzk7cyBDYWZlICZhbXA7IFBpZSBTaG9wcGUgKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2U4ZWI1MGZjNGYyZDRiNjM5Nzc3Yjk0Y2M4NTNmZDdkLnNldENvbnRlbnQoaHRtbF8wYTY0ODQ0YzVmNWQ0MTc0YWZiNWVmZDhjNmEyZWQ5MCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTIwZmFhZmZkMTZmNDdmNjk5M2FlZmU1NWRkNmQyMGMuYmluZFBvcHVwKHBvcHVwX2U4ZWI1MGZjNGYyZDRiNjM5Nzc3Yjk0Y2M4NTNmZDdkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzBlMGE5Mzg3NTk0YTQzYjczMmZiN2JiYzFjODc5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0NDIyMiwgLTk2LjY4MTY0MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80NWU3MTNjOWM4NWE0YmE0YTcyYWE5MjVmMGVkZDhmMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTg3NGY3ZTZjNzdlNGQ4ZWFjNTVhMDIzYzc5MTkwYjIgPSAkKGA8ZGl2IGlkPSJodG1sX2E4NzRmN2U2Yzc3ZTRkOGVhYzU1YTAyM2M3OTE5MGIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gRnJlZGR54oCZcyAoQnVyZ2VyIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NWU3MTNjOWM4NWE0YmE0YTcyYWE5MjVmMGVkZDhmMy5zZXRDb250ZW50KGh0bWxfYTg3NGY3ZTZjNzdlNGQ4ZWFjNTVhMDIzYzc5MTkwYjIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzM3MGUwYTkzODc1OTRhNDNiNzMyZmI3YmJjMWM4Nzk4LmJpbmRQb3B1cChwb3B1cF80NWU3MTNjOWM4NWE0YmE0YTcyYWE5MjVmMGVkZDhmMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjAxMDVkYzNhZWEzNDlkMGFmNmQzNDA0MGNmNzY3MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTQ4MjgyNzAyMjg2NDQsIC05Ni42ODE3MDI3NTIxOTU2Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lYzE5NDI5MWVhODE0OTI4OGY4YjNhZDUxZjNhOTY0YyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzk4NWY5ZGJiNTMyNGY4MGIwYzcwODQwYzYzOWFmMWIgPSAkKGA8ZGl2IGlkPSJodG1sXzc5ODVmOWRiYjUzMjRmODBiMGM3MDg0MGM2MzlhZjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gTWF6YXRsYW4gSUkgKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWMxOTQyOTFlYTgxNDkyODhmOGIzYWQ1MWYzYTk2NGMuc2V0Q29udGVudChodG1sXzc5ODVmOWRiYjUzMjRmODBiMGM3MDg0MGM2MzlhZjFiKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yMDEwNWRjM2FlYTM0OWQwYWY2ZDM0MDQwY2Y3NjcxNS5iaW5kUG9wdXAocG9wdXBfZWMxOTQyOTFlYTgxNDkyODhmOGIzYWQ1MWYzYTk2NGMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiMDI0YWNlZjk5OTQyMzJiYmUzN2Q3NmViNTIyYmI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg1ODcwNjYwMzE3NDYsIC05Ni42MjU3Nzc2NDM1NDM0N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mYzk2OWVhM2ZlZGM0NTdmOTQ0NmNhZjk1YzMxYjdlNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjIyNWY5NzhmODk3NGZkNGExNTBmZmEzOGJmYTVhZTkgPSAkKGA8ZGl2IGlkPSJodG1sXzIyMjVmOTc4Zjg5NzRmZDRhMTUwZmZhMzhiZmE1YWU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gVmFsZW50aW5vJiMzOTtzIFRvIEdvIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZmM5NjllYTNmZWRjNDU3Zjk0NDZjYWY5NWMzMWI3ZTUuc2V0Q29udGVudChodG1sXzIyMjVmOTc4Zjg5NzRmZDRhMTUwZmZhMzhiZmE1YWU5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83YjAyNGFjZWY5OTk0MjMyYmJlMzdkNzZlYjUyMmJiOS5iaW5kUG9wdXAocG9wdXBfZmM5NjllYTNmZWRjNDU3Zjk0NDZjYWY5NWMzMWI3ZTUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwODhkNGU2OGQzMzQzZjZhODkxMDMxMTlkMWU4M2E4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU2MTgwMzc3MDIzMjcsIC05Ni43MDExMDM5NjU4OTI4N10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNWU3MjViZDkxYzc0YWE2ODRmMzk1MzEzYjkzZmI3ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjYwYmMyYzJmOTg1NGUyNGE2MWYzOTU0Yjk4NTMwMzEgPSAkKGA8ZGl2IGlkPSJodG1sX2I2MGJjMmMyZjk4NTRlMjRhNjFmMzk1NGI5ODUzMDMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gR29vZGNlbnRzIERlbGkgRnJlc2ggU3VicyAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M1ZTcyNWJkOTFjNzRhYTY4NGYzOTUzMTNiOTNmYjdmLnNldENvbnRlbnQoaHRtbF9iNjBiYzJjMmY5ODU0ZTI0YTYxZjM5NTRiOTg1MzAzMSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOTA4OGQ0ZTY4ZDMzNDNmNmE4OTEwMzExOWQxZTgzYTguYmluZFBvcHVwKHBvcHVwX2M1ZTcyNWJkOTFjNzRhYTY4NGYzOTUzMTNiOTNmYjdmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MjdlZTY1Y2M1Mzc0ZjJjODRlNDllZmViNjA1MjkyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MzQ2OTQ3NTA5NzMzLCAtOTYuNjMxMDU0Nzc2NDMzMDZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNGRmZmYxYTA1NTg5NDNkNGFkNDFlZTk3NDdjZGZjMTYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2IzYjlhZGM5M2E0ZDRiZjZiNjY0ZmJiOGVmZGFlNjJmID0gJChgPGRpdiBpZD0iaHRtbF9iM2I5YWRjOTNhNGQ0YmY2YjY2NGZiYjhlZmRhZTYyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIEhvbG1lcyBMYWtlIFBhcmsgKFBhcmspPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzRkZmZmMWEwNTU4OTQzZDRhZDQxZWU5NzQ3Y2RmYzE2LnNldENvbnRlbnQoaHRtbF9iM2I5YWRjOTNhNGQ0YmY2YjY2NGZiYjhlZmRhZTYyZik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNDI3ZWU2NWNjNTM3NGYyYzg0ZTQ5ZWZlYjYwNTI5MjUuYmluZFBvcHVwKHBvcHVwXzRkZmZmMWEwNTU4OTQzZDRhZDQxZWU5NzQ3Y2RmYzE2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YTM4NTExOGQ5ZDM0ZWNmYTRhZjNhMzFhMjBkMzhkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2OTEzLCAtOTYuNjI3MTk2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2M0OTYwMzk4OTU2ODQzNWJiZGQ1NDFiMDFkNDNkYTViID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wMGI4NDY0OTBlZWU0NjVjYmU2MjhiNjc0OGYxZjg3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDBiODQ2NDkwZWVlNDY1Y2JlNjI4YjY3NDhmMWY4N2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBHb29kY2VudHMgRGVsaSBGcmVzaCBTdWJzIChTYW5kd2ljaCBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzQ5NjAzOTg5NTY4NDM1YmJkZDU0MWIwMWQ0M2RhNWIuc2V0Q29udGVudChodG1sXzAwYjg0NjQ5MGVlZTQ2NWNiZTYyOGI2NzQ4ZjFmODdjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl84YTM4NTExOGQ5ZDM0ZWNmYTRhZjNhMzFhMjBkMzhkOC5iaW5kUG9wdXAocG9wdXBfYzQ5NjAzOTg5NTY4NDM1YmJkZDU0MWIwMWQ0M2RhNWIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3ZGNhZDFkNzdjYjRjNTE5YzZjOTA3MTYyZjIzMzk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE0MDk2MjA4MzczNDUsIC05Ni43NTEzNTMwOTE4MjcyMV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzE3MTcxNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMTcxNzE3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MDEwOGM3MGQwNjA0MzE2OGI0Y2EwZWE5NDE0MGY5ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWE4YTVhNGFlZGE5NDg0MmEwNzEzMDJjMWNhMWQyNzkgPSAkKGA8ZGl2IGlkPSJodG1sX2FhOGE1YTRhZWRhOTQ4NDJhMDcxMzAyYzFjYTFkMjc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNV0gRCYjMzk7TGVvbiYjMzk7cyBNZXhpY2FuIEZvb2QgKEJ1cnJpdG8gUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQwMTA4YzcwZDA2MDQzMTY4YjRjYTBlYTk0MTQwZjlmLnNldENvbnRlbnQoaHRtbF9hYThhNWE0YWVkYTk0ODQyYTA3MTMwMmMxY2ExZDI3OSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTdkY2FkMWQ3N2NiNGM1MTljNmM5MDcxNjJmMjMzOTguYmluZFBvcHVwKHBvcHVwXzQwMTA4YzcwZDA2MDQzMTY4YjRjYTBlYTk0MTQwZjlmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTQ0MTFjYmEzMmQ0OTgyOGVhNGVlOWFiNGQwMzEwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2OTIwNDIwMjM0NTMsIC05Ni42MTQ2MjQ3NTI2MTAxN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zNjY5MjYwY2FhMjI0MWQ4YTdkNTBkNTY5ZjQzYzU3YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzgxZGI5ODAyZTM0NGMwODhhY2QwMDAyZTI3YzIwNzcgPSAkKGA8ZGl2IGlkPSJodG1sX2M4MWRiOTgwMmUzNDRjMDg4YWNkMDAwMmUyN2MyMDc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gTW9NbyBQaXp6ZXJpYSAmYW1wOyBSaXN0b3JhbnRlIChJdGFsaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzM2NjkyNjBjYWEyMjQxZDhhN2Q1MGQ1NjlmNDNjNTdiLnNldENvbnRlbnQoaHRtbF9jODFkYjk4MDJlMzQ0YzA4OGFjZDAwMDJlMjdjMjA3Nyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMjE0NDExY2JhMzJkNDk4MjhlYTRlZTlhYjRkMDMxMDcuYmluZFBvcHVwKHBvcHVwXzM2NjkyNjBjYWEyMjQxZDhhN2Q1MGQ1NjlmNDNjNTdiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YTFlMDA3N2NlOWY0YWFmOWY1MGYxYWE0YmQzOGM3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1NDAzMTY2NzI3OTM1LCAtOTYuNjgxNzA5NTUxNzk5MDddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNjZTEyYzAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI2NlMTJjMCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzUwYjFiY2Q2ZWI0NDhkZWI3MGM4YzY5YTM5YmM3NWEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2RjZDQwZGY0NzEwZTRlOTk4YjVlYzVhYTExNDY3ZjVlID0gJChgPGRpdiBpZD0iaHRtbF9kY2Q0MGRmNDcxMGU0ZTk5OGI1ZWM1YWExMTQ2N2Y1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzRdIFNjb290ZXImIzM5O3MgQ29mZmVlaG91c2UgKENvZmZlZSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNTBiMWJjZDZlYjQ0OGRlYjcwYzhjNjlhMzliYzc1YS5zZXRDb250ZW50KGh0bWxfZGNkNDBkZjQ3MTBlNGU5OThiNWVjNWFhMTE0NjdmNWUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzlhMWUwMDc3Y2U5ZjRhYWY5ZjUwZjFhYTRiZDM4Yzc0LmJpbmRQb3B1cChwb3B1cF9jNTBiMWJjZDZlYjQ0OGRlYjcwYzhjNjlhMzliYzc1YSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2MzMjdkMGY4M2Q1NDFhMGE4NzFjOGQxMmUzYTVlZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTUxOTM0ODY5NTM5OSwgLTk2LjY4MTA1MDE1MTI0ODM0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y3MWQwNGRhODFhYjRjOTZhN2UxMDU5MjZhOTk2MTBiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NTEzOTA4NDhjMTI0MTQ2OGM2NDM0NDVjNzlkNzIzNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzUxMzkwODQ4YzEyNDE0NjhjNjQzNDQ1Yzc5ZDcyMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBKdWljZSBTdG9wIChKdWljZSBCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y3MWQwNGRhODFhYjRjOTZhN2UxMDU5MjZhOTk2MTBiLnNldENvbnRlbnQoaHRtbF83NTEzOTA4NDhjMTI0MTQ2OGM2NDM0NDVjNzlkNzIzNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfY2MzMjdkMGY4M2Q1NDFhMGE4NzFjOGQxMmUzYTVlZTguYmluZFBvcHVwKHBvcHVwX2Y3MWQwNGRhODFhYjRjOTZhN2UxMDU5MjZhOTk2MTBiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NzNjZDUzNDQzZGY0YWU1OWMyNDI3ZDYyNDFhZGFjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyOTM2MDg1LCAtOTYuNjA4MzA3NzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOWVhNGE0NTMzNGU3NDNlZDhiNGRiMWViNDVkNmI3ZDcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JmNTE2MDI2MjIzNTQzZmFhNjk1OGZjZDNhZDJhODIwID0gJChgPGRpdiBpZD0iaHRtbF9iZjUxNjAyNjIyMzU0M2ZhYTY5NThmY2QzYWQyYTgyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIEh5LVZlZSAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOWVhNGE0NTMzNGU3NDNlZDhiNGRiMWViNDVkNmI3ZDcuc2V0Q29udGVudChodG1sX2JmNTE2MDI2MjIzNTQzZmFhNjk1OGZjZDNhZDJhODIwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80NzNjZDUzNDQzZGY0YWU1OWMyNDI3ZDYyNDFhZGFjYy5iaW5kUG9wdXAocG9wdXBfOWVhNGE0NTMzNGU3NDNlZDhiNGRiMWViNDVkNmI3ZDcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhZGVhNWIzMTg3NTQ1NWRiMWUwYWI5YWYyM2I2NmRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjY3LCAtOTYuNjQyNDYxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2UwYjI5N2EwNjU0YjRlOTU4NWMyMjY3YWU4OTVhYzVhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81ODAzNWY2ZjU0MzE0YTE5YmExNmUyZDdlNDY5OTNhMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTgwMzVmNmY1NDMxNGExOWJhMTZlMmQ3ZTQ2OTkzYTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBEYWZmb2RpbCBNZWRpdGVycmFuZWFuIEN1aXNpbmUgYW5kIENhdGVyaW5nIChNZWRpdGVycmFuZWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2UwYjI5N2EwNjU0YjRlOTU4NWMyMjY3YWU4OTVhYzVhLnNldENvbnRlbnQoaHRtbF81ODAzNWY2ZjU0MzE0YTE5YmExNmUyZDdlNDY5OTNhMSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZmFkZWE1YjMxODc1NDU1ZGIxZTBhYjlhZjIzYjY2ZGYuYmluZFBvcHVwKHBvcHVwX2UwYjI5N2EwNjU0YjRlOTU4NWMyMjY3YWU4OTVhYzVhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGRjYWNmYzljNWY0MTEwYjFmMTJmZDIyNTA1ODQ0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjY1NCwgLTk2LjY1MzE0NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yM2E1MTlhNDViODQ0NGMwYTI5NWU3YzBiYTVmN2IxMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTc2YWFlYjYxNjZhNDJiOGI5OGIxOWRmODUzMzgzZjIgPSAkKGA8ZGl2IGlkPSJodG1sXzU3NmFhZWI2MTY2YTQyYjhiOThiMTlkZjg1MzM4M2YyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gVGhlIERvdWdobnV0IEhvbGUgKERvbnV0IFNob3ApPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzIzYTUxOWE0NWI4NDQ0YzBhMjk1ZTdjMGJhNWY3YjEwLnNldENvbnRlbnQoaHRtbF81NzZhYWViNjE2NmE0MmI4Yjk4YjE5ZGY4NTMzODNmMik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYmRkY2FjZmM5YzVmNDExMGIxZjEyZmQyMjUwNTg0NDMuYmluZFBvcHVwKHBvcHVwXzIzYTUxOWE0NWI4NDQ0YzBhMjk1ZTdjMGJhNWY3YjEwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGYxMzYwYTI0OGU0NjIzODgwMzE0YzcxZTU3YjQyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MDA3NzQ3NTIzMDY1LCAtOTYuNjUzODk2MzU0NTU0MThdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNGMyODRiOWNlODU0NDIzZjg3Nzg2MDFiMjRjYmFhOTcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZhZmVhNDIwODNmZDQ1NGE5Yjg3ODcxZDlkOGM2ZTViID0gJChgPGRpdiBpZD0iaHRtbF82YWZlYTQyMDgzZmQ0NTRhOWI4Nzg3MWQ5ZDhjNmU1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIExhTWFyJiMzOTtzIERvbnV0cyBhbmQgQ29mZmVlIChEb251dCBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80YzI4NGI5Y2U4NTQ0MjNmODc3ODYwMWIyNGNiYWE5Ny5zZXRDb250ZW50KGh0bWxfNmFmZWE0MjA4M2ZkNDU0YTliODc4NzFkOWQ4YzZlNWIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2IwZjEzNjBhMjQ4ZTQ2MjM4ODAzMTRjNzFlNTdiNDJjLmJpbmRQb3B1cChwb3B1cF80YzI4NGI5Y2U4NTQ0MjNmODc3ODYwMWIyNGNiYWE5NykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJkN2Y3MmRiZjI3NDViN2FiMmU3NDkxZjYwMTYyOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTI0MDgsIC05Ni42NjY3MDddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2ZkNzU3NDcxYmU1NDBkYWI4NmVhYmNhZDQ4NTBhNTAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzJjZDNmYWZiNjIyNTQwM2JiZTZkMTZkNTc5NzdkNmRjID0gJChgPGRpdiBpZD0iaHRtbF8yY2QzZmFmYjYyMjU0MDNiYmU2ZDE2ZDU3OTc3ZDZkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIEh5LVZlZSAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2ZkNzU3NDcxYmU1NDBkYWI4NmVhYmNhZDQ4NTBhNTAuc2V0Q29udGVudChodG1sXzJjZDNmYWZiNjIyNTQwM2JiZTZkMTZkNTc5NzdkNmRjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMmQ3ZjcyZGJmMjc0NWI3YWIyZTc0OTFmNjAxNjI4Yy5iaW5kUG9wdXAocG9wdXBfN2ZkNzU3NDcxYmU1NDBkYWI4NmVhYmNhZDQ4NTBhNTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhM2VhNjkzNGU2ZjRlYmI5MjI5ZTdlZDI0Yjc4NzI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI2NzM3MDIwNzM0NiwgLTk2LjYwNjUyNTQ1OTgyNDg0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZlYWY1YzhhZjY2YTQwNmQ5NWJlNTA4Yzk4ODAzMzNmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wNDcyZjk4OTRhNGM0ZDgxYTVkYjJlYzVjODgxOTZhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDQ3MmY5ODk0YTRjNGQ4MWE1ZGIyZWM1Yzg4MTk2YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBSdW56YSAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZlYWY1YzhhZjY2YTQwNmQ5NWJlNTA4Yzk4ODAzMzNmLnNldENvbnRlbnQoaHRtbF8wNDcyZjk4OTRhNGM0ZDgxYTVkYjJlYzVjODgxOTZhOCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNGEzZWE2OTM0ZTZmNGViYjkyMjllN2VkMjRiNzg3MjQuYmluZFBvcHVwKHBvcHVwX2ZlYWY1YzhhZjY2YTQwNmQ5NWJlNTA4Yzk4ODAzMzNmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZTU0ZGQ5OWQ3MGY0YzEyYjgyZDg2MGE0MTVjOTNjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTkzNTU3NjA2NDIzLCAtOTYuNzA2NTI2NTAxNDk0OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzQyODVGNCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjNDI4NUY0IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82ZjlmZTk0MzI5NDA0ODI0ODRjODE1NGMwOGM0OWY1MiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZWYxZjFmNTcyNmVjNGQ1YjlmOThkMWZmODRhMWJlNzYgPSAkKGA8ZGl2IGlkPSJodG1sX2VmMWYxZjU3MjZlYzRkNWI5Zjk4ZDFmZjg0YTFiZTc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMl0gU2hvZ3VuIChTdXNoaSBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82ZjlmZTk0MzI5NDA0ODI0ODRjODE1NGMwOGM0OWY1Mi5zZXRDb250ZW50KGh0bWxfZWYxZjFmNTcyNmVjNGQ1YjlmOThkMWZmODRhMWJlNzYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzVlNTRkZDk5ZDcwZjRjMTJiODJkODYwYTQxNWM5M2M4LmJpbmRQb3B1cChwb3B1cF82ZjlmZTk0MzI5NDA0ODI0ODRjODE1NGMwOGM0OWY1MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjFkMzRjYjcxYWJkNGNjYmE3YjY1ZTU5YmIyYjNkMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDMzMTI2ODQyOTkwNTYsIC05Ni42Nzk1NjY2NzM4ODNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMDNmMzUyYTM1NzA2NDI1MTlmOWYwZTljYWUyNGVjZGEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2I0NWExOTU2NTk1ZjRkZTc4YThlN2Y0YjI2NmI0MDM1ID0gJChgPGRpdiBpZD0iaHRtbF9iNDVhMTk1NjU5NWY0ZGU3OGE4ZTdmNGIyNjZiNDAzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIE9sZCBDaGljYWdvIChQaXp6YSBQbGFjZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDNmMzUyYTM1NzA2NDI1MTlmOWYwZTljYWUyNGVjZGEuc2V0Q29udGVudChodG1sX2I0NWExOTU2NTk1ZjRkZTc4YThlN2Y0YjI2NmI0MDM1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yMWQzNGNiNzFhYmQ0Y2NiYTdiNjVlNTliYjJiM2QyOS5iaW5kUG9wdXAocG9wdXBfMDNmMzUyYTM1NzA2NDI1MTlmOWYwZTljYWUyNGVjZGEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmOTYzZGZlNjNiMjQ0OWQ5NTA0YzY3MzJiNTg0OGI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQxMzgsIC05Ni42NzQzNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85YmY3NmFiZjkxMmQ0NGJlODQ0Yzk4ZWE0NDRlOTVjYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzM5M2VjYjFiNDNhNDRjODk0Mzc0OTMzNmM2MzNmMTAgPSAkKGA8ZGl2IGlkPSJodG1sXzMzOTNlY2IxYjQzYTQ0Yzg5NDM3NDkzMzZjNjMzZjEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gSGFjaWVuZGEgUmVhbCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85YmY3NmFiZjkxMmQ0NGJlODQ0Yzk4ZWE0NDRlOTVjYS5zZXRDb250ZW50KGh0bWxfMzM5M2VjYjFiNDNhNDRjODk0Mzc0OTMzNmM2MzNmMTApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzJmOTYzZGZlNjNiMjQ0OWQ5NTA0YzY3MzJiNTg0OGI1LmJpbmRQb3B1cChwb3B1cF85YmY3NmFiZjkxMmQ0NGJlODQ0Yzk4ZWE0NDRlOTVjYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2U2OTc0NTU0MTE5NDdmNTg5ZDI0YjAwYzRhYjgwZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzMwMzI0MzQ1NDQyNTUsIC05Ni42NTQzMDM3MzU0NDg2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2YzMmNlMGI1YjQ0OTQyM2Q5ZGI3MDY4ZDhmODI4Y2U5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hNWYwZjEwOTRkYzI0ZTc5ODA3YWU4OTc4NzdkM2YzNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTVmMGYxMDk0ZGMyNGU3OTgwN2FlODk3ODc3ZDNmMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBHb2xkZW5yb2QgUGFzdHJpZXMgKEJha2VyeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjMyY2UwYjViNDQ5NDIzZDlkYjcwNjhkOGY4MjhjZTkuc2V0Q29udGVudChodG1sX2E1ZjBmMTA5NGRjMjRlNzk4MDdhZTg5Nzg3N2QzZjM0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zZTY5NzQ1NTQxMTk0N2Y1ODlkMjRiMDBjNGFiODBmZi5iaW5kUG9wdXAocG9wdXBfZjMyY2UwYjViNDQ5NDIzZDlkYjcwNjhkOGY4MjhjZTkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2YWY5YjM2MDk3OTRlYmNhYzBhNGY1Y2I2NGFhNzY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1OTc2NDI2NDYwNTM1LCAtOTYuNjk4NjA2MTk4MDgyNjNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzU1NjM4MWVlNDYxNDgzOTgwN2MxZmIzOWIzYTk0MGMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2IwOTY4YjZjMzM2MTQ0Nzc4OGY5ZGQ1N2Y0NTA3NDA0ID0gJChgPGRpdiBpZD0iaHRtbF9iMDk2OGI2YzMzNjE0NDc3ODhmOWRkNTdmNDUwNzQwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIENoZWVzZXN0ZWFrIEdyaWxsZSAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M1NTYzODFlZTQ2MTQ4Mzk4MDdjMWZiMzliM2E5NDBjLnNldENvbnRlbnQoaHRtbF9iMDk2OGI2YzMzNjE0NDc3ODhmOWRkNTdmNDUwNzQwNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMjZhZjliMzYwOTc5NGViY2FjMGE0ZjVjYjY0YWE3NjQuYmluZFBvcHVwKHBvcHVwX2M1NTYzODFlZTQ2MTQ4Mzk4MDdjMWZiMzliM2E5NDBjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTJkYzNiMzljYTk0MDk1YjU0ODQxYjI4ZmNjOTQ2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MTU0ODUxLCAtOTYuNzAyMTcwOTNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODZlNmE4MmNkMzYxNDk4MmE0MTVhZTE0NmViNWY1YmEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzMzN2ViNDAxZmI1NDRhMDJiNmFlNDczN2FhNGQyNGMzID0gJChgPGRpdiBpZD0iaHRtbF8zMzdlYjQwMWZiNTQ0YTAyYjZhZTQ3MzdhYTRkMjRjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIENvb3BlciBZTUNBIChHeW0gLyBGaXRuZXNzIENlbnRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODZlNmE4MmNkMzYxNDk4MmE0MTVhZTE0NmViNWY1YmEuc2V0Q29udGVudChodG1sXzMzN2ViNDAxZmI1NDRhMDJiNmFlNDczN2FhNGQyNGMzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85ZTJkYzNiMzljYTk0MDk1YjU0ODQxYjI4ZmNjOTQ2Mi5iaW5kUG9wdXAocG9wdXBfODZlNmE4MmNkMzYxNDk4MmE0MTVhZTE0NmViNWY1YmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0ZDg2MDVhNTAzNjRjYjQ4NmQ2MTc5ZTEwYjU2ZTk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU2NjU0LCAtOTYuNjUzMTQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE2OTk3ZWM0N2Y0MTRkMDg5YTE0N2MxMjcxMTE0ZWM4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kZDhlYzgyOGU0OTc0MGExODJlNmUxY2VmYWFkYWU4YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGQ4ZWM4MjhlNDk3NDBhMTgyZTZlMWNlZmFhZGFlOGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBIaWdoIFNvY2lldHkgQ2hlZXNlY2FrZSAmYW1wOyBCaXN0cm8gKE5ldyBBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNjk5N2VjNDdmNDE0ZDA4OWExNDdjMTI3MTExNGVjOC5zZXRDb250ZW50KGh0bWxfZGQ4ZWM4MjhlNDk3NDBhMTgyZTZlMWNlZmFhZGFlOGIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2Q0ZDg2MDVhNTAzNjRjYjQ4NmQ2MTc5ZTEwYjU2ZTk2LmJpbmRQb3B1cChwb3B1cF8xNjk5N2VjNDdmNDE0ZDA4OWExNDdjMTI3MTExNGVjOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTI4ZGEzYzYzZjljNDI5NjkxOWQ2ZDViZTgzZDRlZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzY4MzkwMDk4NzY2NDYsIC05Ni43NjA3NDYxMDkwMTg4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMTcxNzE3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMxNzE3MTciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2NkYmIwMTkzMzRiNzRkMmVhMDI3YzM0YmEwOWFiZTZmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81M2U0ZmRhMjYwNzM0ZTkzOTkwNGZlYWI0NWIzZGRmMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTNlNGZkYTI2MDczNGU5Mzk5MDRmZWFiNDViM2RkZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls1XSBQaW5ld29vZCBCb3dsIChQZXJmb3JtaW5nIEFydHMgVmVudWUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NkYmIwMTkzMzRiNzRkMmVhMDI3YzM0YmEwOWFiZTZmLnNldENvbnRlbnQoaHRtbF81M2U0ZmRhMjYwNzM0ZTkzOTkwNGZlYWI0NWIzZGRmMCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMTI4ZGEzYzYzZjljNDI5NjkxOWQ2ZDViZTgzZDRlZjguYmluZFBvcHVwKHBvcHVwX2NkYmIwMTkzMzRiNzRkMmVhMDI3YzM0YmEwOWFiZTZmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWEwN2ZjM2ZkN2I0Y2E5OGI5Y2Q5ODljZmZkN2Y2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDg3MjU4MDU1ODY5LCAtOTYuNjY4NjA5OTc2NzY4NV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jYTIwNTZlMDBjMzY0NThiOTUyZDQzNjQ5M2JmNDE1ZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzZlMzMyOTY5N2UwNDFhODhmZDVjMjU1M2U0NDVjNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzc2ZTMzMjk2OTdlMDQxYTg4ZmQ1YzI1NTNlNDQ1YzU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gV2FsZ3JlZW5zIChQaGFybWFjeSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfY2EyMDU2ZTAwYzM2NDU4Yjk1MmQ0MzY0OTNiZjQxNWQuc2V0Q29udGVudChodG1sXzc2ZTMzMjk2OTdlMDQxYTg4ZmQ1YzI1NTNlNDQ1YzU0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yNWEwN2ZjM2ZkN2I0Y2E5OGI5Y2Q5ODljZmZkN2Y2OS5iaW5kUG9wdXAocG9wdXBfY2EyMDU2ZTAwYzM2NDU4Yjk1MmQ0MzY0OTNiZjQxNWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlMDk3NGYxNTFiOTQ3NDk4NzYxZTYzZGEwMmU5MTExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyNjY0MTI2NDA2OTcsIC05Ni42NzcxMDQ3NDMwODgzNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MmUwNDYzMTg0MTE0OGQyYTRiNGQ1NDJjYTE2NDIzNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2RlMThkOGU5YzNiNDAxNGI3NTdjOTZhNGM2MDA2MDQgPSAkKGA8ZGl2IGlkPSJodG1sX2NkZTE4ZDhlOWMzYjQwMTRiNzU3Yzk2YTRjNjAwNjA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gU2NoZWVscyAoU3BvcnRpbmcgR29vZHMgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDJlMDQ2MzE4NDExNDhkMmE0YjRkNTQyY2ExNjQyMzQuc2V0Q29udGVudChodG1sX2NkZTE4ZDhlOWMzYjQwMTRiNzU3Yzk2YTRjNjAwNjA0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wZTA5NzRmMTUxYjk0NzQ5ODc2MWU2M2RhMDJlOTExMS5iaW5kUG9wdXAocG9wdXBfNDJlMDQ2MzE4NDExNDhkMmE0YjRkNTQyY2ExNjQyMzQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzYzg1YzQzODJiNjQ3YTNiNGVlZTgzOWFlODZlZWU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcxNjA3MDA5ODE2NTYsIC05Ni42MjMwMDg1MzM5MjA1M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lYWIxMGMwYjBkNmQ0NmUxYTBkMzhiNzFlN2EzZDk2YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzdhYzg0MWM5OWQwNGM5MWEyYjQzYzJkNDhhNTZmZDcgPSAkKGA8ZGl2IGlkPSJodG1sXzc3YWM4NDFjOTlkMDRjOTFhMmI0M2MyZDQ4YTU2ZmQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gVGhlIE92ZW4gRWFzdCAoSW5kaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2VhYjEwYzBiMGQ2ZDQ2ZTFhMGQzOGI3MWU3YTNkOTZiLnNldENvbnRlbnQoaHRtbF83N2FjODQxYzk5ZDA0YzkxYTJiNDNjMmQ0OGE1NmZkNyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNjNjODVjNDM4MmI2NDdhM2I0ZWVlODM5YWU4NmVlZTYuYmluZFBvcHVwKHBvcHVwX2VhYjEwYzBiMGQ2ZDQ2ZTFhMGQzOGI3MWU3YTNkOTZiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMWFhOTJjYTE0Zjg0MDFhYWI0OWQwZTEyZWQ0NGVmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3MjM4OTk5MjI3MjcxNiwgLTk2LjY3NTQ0OTAyMzg4ODY5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y3MTY5ODRlMDA3MzRmMzhiZmRjMzA5Yjk5ZmIxMmIyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lZjk4MjFmNDdlOGU0YzM1ODZhZmE2N2VjM2RmZmNhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWY5ODIxZjQ3ZThlNGMzNTg2YWZhNjdlYzNkZmZjYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBQbGFuZXQgRml0bmVzcyAoR3ltIC8gRml0bmVzcyBDZW50ZXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y3MTY5ODRlMDA3MzRmMzhiZmRjMzA5Yjk5ZmIxMmIyLnNldENvbnRlbnQoaHRtbF9lZjk4MjFmNDdlOGU0YzM1ODZhZmE2N2VjM2RmZmNhMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMTFhYTkyY2ExNGY4NDAxYWFiNDlkMGUxMmVkNDRlZjkuYmluZFBvcHVwKHBvcHVwX2Y3MTY5ODRlMDA3MzRmMzhiZmRjMzA5Yjk5ZmIxMmIyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OWQ4NjU1ZjliYmE0ODkyYjM4Yjg1Y2M4ZjgxNTdiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3NzUyODg3MjI1NTM1NCwgLTk2LjcyNzMxNDQzMjc0ODA2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2QzYjBiOTBlMjU5MTRlZDNhMTE1YTU3NmM1YmYxZTY3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNWFkMDg0YzE4MmI0MjNkOGZmNDNjYjQzY2M0N2VjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjVhZDA4NGMxODJiNDIzZDhmZjQzY2I0M2NjNDdlYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBUb2FzdCAoRGVsaSAvIEJvZGVnYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDNiMGI5MGUyNTkxNGVkM2ExMTVhNTc2YzViZjFlNjcuc2V0Q29udGVudChodG1sX2I1YWQwODRjMTgyYjQyM2Q4ZmY0M2NiNDNjYzQ3ZWMwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl84OWQ4NjU1ZjliYmE0ODkyYjM4Yjg1Y2M4ZjgxNTdiOC5iaW5kUG9wdXAocG9wdXBfZDNiMGI5MGUyNTkxNGVkM2ExMTVhNTc2YzViZjFlNjcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiMmZhMTNmZDk2MTRjMjA5YmQzNzBjNmEwNTQyMjdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA4MzYzNTM4ODE0NzUsIC05Ni42MDYwNzczMjg4MzQ0M10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jODY4YmI2NGRkODM0MGFmODVkMDQ2MzVjYmUzNzBhZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2IwMmJlNDZkZTliNDQ1Y2JiNzUwMGUwNTY1NGUzZjAgPSAkKGA8ZGl2IGlkPSJodG1sX2NiMDJiZTQ2ZGU5YjQ0NWNiYjc1MDBlMDU2NTRlM2YwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gTW9QYWMgVHJhaWwgKFRyYWlsKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jODY4YmI2NGRkODM0MGFmODVkMDQ2MzVjYmUzNzBhZi5zZXRDb250ZW50KGh0bWxfY2IwMmJlNDZkZTliNDQ1Y2JiNzUwMGUwNTY1NGUzZjApOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2ZiMmZhMTNmZDk2MTRjMjA5YmQzNzBjNmEwNTQyMjdhLmJpbmRQb3B1cChwb3B1cF9jODY4YmI2NGRkODM0MGFmODVkMDQ2MzVjYmUzNzBhZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGRhMThiODY4ZDVmNDI2Y2IzYTZlODBkMGVmMzcyNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTc5ODAzNDY2Nzk2OSwgLTk2LjY1Mzg5MjUxNzA4OTg0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhiYmY5YjYyOTRiYTQzYTRiZjM2MDMzYTJjNmQyNjIzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85NmQ5ZTk1YzE5Y2E0YzRlYmE5MTY0ODk2NTZkOTAwMSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTZkOWU5NWMxOWNhNGM0ZWJhOTE2NDg5NjU2ZDkwMDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBIaWNrb3J5IFJvYWQgQkJRICZhbXA7IENhdGVyaW5nIENvLiAoQkJRIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84YmJmOWI2Mjk0YmE0M2E0YmYzNjAzM2EyYzZkMjYyMy5zZXRDb250ZW50KGh0bWxfOTZkOWU5NWMxOWNhNGM0ZWJhOTE2NDg5NjU2ZDkwMDEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzRkYTE4Yjg2OGQ1ZjQyNmNiM2E2ZTgwZDBlZjM3MjRlLmJpbmRQb3B1cChwb3B1cF84YmJmOWI2Mjk0YmE0M2E0YmYzNjAzM2EyYzZkMjYyMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjY4YjM3YjZkOTM0NDYzOWIxMjNmM2I4OThiYzEyZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTc5NTM5MDYxMzI3MDUsIC05Ni42MjU5NDQwNDc3NzgxOV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mNzY5NjYwYWFmMTg0OTcxODhhYWNkMjc4OGRiNjY5YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODhlMjY5NzE2N2ZiNGRjNjk1MDgyYmVlNmZmMzhmMmQgPSAkKGA8ZGl2IGlkPSJodG1sXzg4ZTI2OTcxNjdmYjRkYzY5NTA4MmJlZTZmZjM4ZjJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gR3JhdGEgQmFyICZhbXA7IExvdW5nZSAoQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNzY5NjYwYWFmMTg0OTcxODhhYWNkMjc4OGRiNjY5YS5zZXRDb250ZW50KGh0bWxfODhlMjY5NzE2N2ZiNGRjNjk1MDgyYmVlNmZmMzhmMmQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2I2OGIzN2I2ZDkzNDQ2MzliMTIzZjNiODk4YmMxMmY4LmJpbmRQb3B1cChwb3B1cF9mNzY5NjYwYWFmMTg0OTcxODhhYWNkMjc4OGRiNjY5YSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWVlMzRjNDhhOGI4NGI0Yjg0ZjMxZDE0MGNjYmE5N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTM3NDQyNzA2NDk5NiwgLTk2LjYyNjk3OTQxMDY0ODM1XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMEY5RDU4IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMwRjlENTgiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzZiMjViOTg3YWQyODQwMjU4ZDY1YWI1MzEwODljYTg5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hYjUyZDdhMTExZmU0OWU5ODljYWE5ZjA4Y2U2YmNiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYWI1MmQ3YTExMWZlNDllOTg5Y2FhOWYwOGNlNmJjYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlswXSBCdWZmYWxvIFdpbmdzICZhbXA7IFJpbmdzIChSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82YjI1Yjk4N2FkMjg0MDI1OGQ2NWFiNTMxMDg5Y2E4OS5zZXRDb250ZW50KGh0bWxfYWI1MmQ3YTExMWZlNDllOTg5Y2FhOWYwOGNlNmJjYjcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzFlZTM0YzQ4YThiODRiNGI4NGYzMWQxNDBjY2JhOTdhLmJpbmRQb3B1cChwb3B1cF82YjI1Yjk4N2FkMjg0MDI1OGQ2NWFiNTMxMDg5Y2E4OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmM4NjNiZjc3MzY5NDdjMmEzMjYyM2UyMDZlNzcxNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzQyNjkxMDUzODU3NCwgLTk2LjY4NDMwNTg5MTg4NTM5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y0ZDY3NGE2ZWNjNzQyNDY5YzNhMjBlOTg4NTE3NTg2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yYmM1Y2JlZTNjMDA0NmQwYTAyOTFmODI0NWM4YzgyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmJjNWNiZWUzYzAwNDZkMGEwMjkxZjgyNDVjOGM4MjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBCcnlhbiBMaWZlcG9pbnRlIC0gRml0bmVzcyAoR3ltKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mNGQ2NzRhNmVjYzc0MjQ2OWMzYTIwZTk4ODUxNzU4Ni5zZXRDb250ZW50KGh0bWxfMmJjNWNiZWUzYzAwNDZkMGEwMjkxZjgyNDVjOGM4MjUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzZjODYzYmY3NzM2OTQ3YzJhMzI2MjNlMjA2ZTc3MTRlLmJpbmRQb3B1cChwb3B1cF9mNGQ2NzRhNmVjYzc0MjQ2OWMzYTIwZTk4ODUxNzU4NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ1Zjc2OGE4NmQwNDUwNzkwN2M0NjdlNTczMTEyMmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzQ1MzgwMzExMjIzMywgLTk2Ljc3NTQwODE2NzQzODE5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMTcxNzE3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMxNzE3MTciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MzOGRlYWYzYTFhNTQ1MGFiYjk2ZDI2YTNiNWVmZmRjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kN2I0MGZhZWY0NDk0NWFkODhkMGQwNDhjYzZmMjU3NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDdiNDBmYWVmNDQ5NDVhZDg4ZDBkMDQ4Y2M2ZjI1NzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls1XSBQaW9uZWVycyBQYXJrIChQYXJrKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jMzhkZWFmM2ExYTU0NTBhYmI5NmQyNmEzYjVlZmZkYy5zZXRDb250ZW50KGh0bWxfZDdiNDBmYWVmNDQ5NDVhZDg4ZDBkMDQ4Y2M2ZjI1NzcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQ0NWY3NjhhODZkMDQ1MDc5MDdjNDY3ZTU3MzExMjJlLmJpbmRQb3B1cChwb3B1cF9jMzhkZWFmM2ExYTU0NTBhYmI5NmQyNmEzYjVlZmZkYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmYzOTk3YzYyZjk0NDU4N2IzMTVlN2IzZDdjZjJkMmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njc2NjksIC05Ni42MjI1MjNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNDE3MDQ4OTg3YWVhNDQxY2I3Y2FkMDBkNzU1OTI5MTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JmYmUyNWE1NjJlMjRjNzk5NWE2M2I2MmNkN2RkNDZlID0gJChgPGRpdiBpZD0iaHRtbF9iZmJlMjVhNTYyZTI0Yzc5OTVhNjNiNjJjZDdkZDQ2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIEh5LVZlZSAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDE3MDQ4OTg3YWVhNDQxY2I3Y2FkMDBkNzU1OTI5MTEuc2V0Q29udGVudChodG1sX2JmYmUyNWE1NjJlMjRjNzk5NWE2M2I2MmNkN2RkNDZlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl82ZjM5OTdjNjJmOTQ0NTg3YjMxNWU3YjNkN2NmMmQyYy5iaW5kUG9wdXAocG9wdXBfNDE3MDQ4OTg3YWVhNDQxY2I3Y2FkMDBkNzU1OTI5MTEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4YjQyY2RiZmNhMjQ2M2E5N2IxOTU0MTk4ZDg3MGU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0ODM0NTAyOTk0MTMsIC05Ni42NTQ4OTU5MTk4NzEyN10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84ZjRhMDQxMDlhN2E0OThmOGRmNGZiODY5YTEyNmM5YyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjc0NzJjOWFkM2M1NGExM2E3Y2FhOWVlNjYxN2U4YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzY3NDcyYzlhZDNjNTRhMTNhN2NhYTllZTY2MTdlOGMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gTGF6emFyaSYjMzk7cyBQaXp6YSAoUGl6emEgUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzhmNGEwNDEwOWE3YTQ5OGY4ZGY0ZmI4NjlhMTI2YzljLnNldENvbnRlbnQoaHRtbF82NzQ3MmM5YWQzYzU0YTEzYTdjYWE5ZWU2NjE3ZThjMyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYjhiNDJjZGJmY2EyNDYzYTk3YjE5NTQxOThkODcwZTUuYmluZFBvcHVwKHBvcHVwXzhmNGEwNDEwOWE3YTQ5OGY4ZGY0ZmI4NjlhMTI2YzljKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDVhMGI2YTlkYWY0ZDIwOTFhOGM4YWU0MjkxOWYyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDQ0MDcyNDQwNTQ5LCAtOTYuNjAzNDAzMjIyOTAzNzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWNlZmJlNmNmMDhlNGI5M2FlMmM1ZmY4ZjE1MmU0NTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzc0OTQxOTYyMzNhZDRmZDZiZjNiMGM5YmFhNjhhMDI2ID0gJChgPGRpdiBpZD0iaHRtbF83NDk0MTk2MjMzYWQ0ZmQ2YmYzYjBjOWJhYTY4YTAyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIEZpcmV3b3JrcyBXb29kIEZpcmVkIEdyaWxsIChOZXcgQW1lcmljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWNlZmJlNmNmMDhlNGI5M2FlMmM1ZmY4ZjE1MmU0NTQuc2V0Q29udGVudChodG1sXzc0OTQxOTYyMzNhZDRmZDZiZjNiMGM5YmFhNjhhMDI2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hNDVhMGI2YTlkYWY0ZDIwOTFhOGM4YWU0MjkxOWYyNS5iaW5kUG9wdXAocG9wdXBfYWNlZmJlNmNmMDhlNGI5M2FlMmM1ZmY4ZjE1MmU0NTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4YzBiNjdkYjEzZTRkMjg5NDA5NmUzZWE5ODI4NTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUwMjA2LCAtOTYuNjM3MTQ0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2E2MjgyMTMzZDQ3YTRjNTY4M2ViYWJjODUyMTgwMjI2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85NmMzYzg2MGQwMTg0NjFhYTE3NDVkNmNlMTNhZDJmNSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTZjM2M4NjBkMDE4NDYxYWExNzQ1ZDZjZTEzYWQyZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBUZXhhcyBSb2FkaG91c2UgKFN0ZWFraG91c2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E2MjgyMTMzZDQ3YTRjNTY4M2ViYWJjODUyMTgwMjI2LnNldENvbnRlbnQoaHRtbF85NmMzYzg2MGQwMTg0NjFhYTE3NDVkNmNlMTNhZDJmNSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYzhjMGI2N2RiMTNlNGQyODk0MDk2ZTNlYTk4Mjg1M2IuYmluZFBvcHVwKHBvcHVwX2E2MjgyMTMzZDQ3YTRjNTY4M2ViYWJjODUyMTgwMjI2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NjdiODBkYzEzMDk0MTU2YjI2ZWM4MTUwNWEyMTdiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0MzE1MzQ3OTY2NTUyNCwgLTk2LjYxMzczOTU4OTY4OTddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzIxY2RhNzQ0N2VmNDBmN2JkZTM0ZmEwZjkyNmFlMjkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI0YjM5YWM0OGJlNTQzODlhY2U5ZTRmNzhjYzA4YjZhID0gJChgPGRpdiBpZD0iaHRtbF8yNGIzOWFjNDhiZTU0Mzg5YWNlOWU0Zjc4Y2MwOGI2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIE1haG9uZXkgR29sZiBDb3Vyc2UgKEdvbGYgQ291cnNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zMjFjZGE3NDQ3ZWY0MGY3YmRlMzRmYTBmOTI2YWUyOS5zZXRDb250ZW50KGh0bWxfMjRiMzlhYzQ4YmU1NDM4OWFjZTllNGY3OGNjMDhiNmEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQ2N2I4MGRjMTMwOTQxNTZiMjZlYzgxNTA1YTIxN2I3LmJpbmRQb3B1cChwb3B1cF8zMjFjZGE3NDQ3ZWY0MGY3YmRlMzRmYTBmOTI2YWUyOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjAzOTBmMmVlNGIxNGUzZTg3MTFjZmJhMTFlNDEwZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDI4NjE0NjcxOTU5LCAtOTYuNjgwMDIzMjU0Mjc5MzVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGIzZWI3NzZhZWE0NDczN2E0ODQwZWQwMTRkNjhhY2YgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U4MjgyOWZjN2MzNTRjZGY5YTJlZmM1ODRkODhmMjRlID0gJChgPGRpdiBpZD0iaHRtbF9lODI4MjlmYzdjMzU0Y2RmOWEyZWZjNTg0ZDg4ZjI0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIEJhcm5lcyAmYW1wOyBOb2JsZSAoQm9va3N0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kYjNlYjc3NmFlYTQ0NzM3YTQ4NDBlZDAxNGQ2OGFjZi5zZXRDb250ZW50KGh0bWxfZTgyODI5ZmM3YzM1NGNkZjlhMmVmYzU4NGQ4OGYyNGUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2IwMzkwZjJlZTRiMTRlM2U4NzExY2ZiYTExZTQxMGU0LmJpbmRQb3B1cChwb3B1cF9kYjNlYjc3NmFlYTQ0NzM3YTQ4NDBlZDAxNGQ2OGFjZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2FlZTBiODk5ZWJhNDI0YTk0ZDgzOTQzYzYwY2EwODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDMxMjM4MTg5MTA5OSwgLTk2LjYyNDgyMTIxOTY2NDgyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzkxN2Q3YjA2ZjgyMjRkMWNhMDc3MzJkZDc5YjU3ODBhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85NWU3OTc4YjRjMzM0ZDlhYmE0Zjc0MzQ3ZGQ0MGNkMCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTVlNzk3OGI0YzMzNGQ5YWJhNGY3NDM0N2RkNDBjZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBUaGUgU3RpbGwgKExpcXVvciBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTE3ZDdiMDZmODIyNGQxY2EwNzczMmRkNzliNTc4MGEuc2V0Q29udGVudChodG1sXzk1ZTc5NzhiNGMzMzRkOWFiYTRmNzQzNDdkZDQwY2QwKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zYWVlMGI4OTllYmE0MjRhOTRkODM5NDNjNjBjYTA4MC5iaW5kUG9wdXAocG9wdXBfOTE3ZDdiMDZmODIyNGQxY2EwNzczMmRkNzliNTc4MGEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3MzEzNTM3OTMzODRhMmRiZmRiZWM3MDRlY2NmMWMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1MDQ5ODM5NjEzODQsIC05Ni42NDMzMzIwNzc4NTEyNF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85NzhmYjI1MDY3MTM0ZjZjYjQwOTI5MjBlYTlhY2ZjYiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjgwN2EwZGY2ZmVmNGNiNzgxYTZlZTNmNTlmMDYyMTUgPSAkKGA8ZGl2IGlkPSJodG1sX2I4MDdhMGRmNmZlZjRjYjc4MWE2ZWUzZjU5ZjA2MjE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gSnVpY2UgU3RvcCAoSnVpY2UgQmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85NzhmYjI1MDY3MTM0ZjZjYjQwOTI5MjBlYTlhY2ZjYi5zZXRDb250ZW50KGh0bWxfYjgwN2EwZGY2ZmVmNGNiNzgxYTZlZTNmNTlmMDYyMTUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQ3MzEzNTM3OTMzODRhMmRiZmRiZWM3MDRlY2NmMWMxLmJpbmRQb3B1cChwb3B1cF85NzhmYjI1MDY3MTM0ZjZjYjQwOTI5MjBlYTlhY2ZjYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzY3MjE5Mjc4ODk0NGQ1MWJiZTkxOTVkNWRlODU2N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzk2NzM4MjIzMzU1MDQsIC05Ni42OTcxODQ4OTY4OTgxOF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85ZDczMGJiYTg0NzE0YjE2OWFkYjViMTA1ZWEwYWQ1NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzE2MzFlOTgwZDZiNDVlMDgyZDkyYzczOWU2MmY3YzQgPSAkKGA8ZGl2IGlkPSJodG1sXzMxNjMxZTk4MGQ2YjQ1ZTA4MmQ5MmM3MzllNjJmN2M0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gQ29zdGNvIChXYXJlaG91c2UgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzlkNzMwYmJhODQ3MTRiMTY5YWRiNWIxMDVlYTBhZDU3LnNldENvbnRlbnQoaHRtbF8zMTYzMWU5ODBkNmI0NWUwODJkOTJjNzM5ZTYyZjdjNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYzY3MjE5Mjc4ODk0NGQ1MWJiZTkxOTVkNWRlODU2N2IuYmluZFBvcHVwKHBvcHVwXzlkNzMwYmJhODQ3MTRiMTY5YWRiNWIxMDVlYTBhZDU3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDM1ZTM2ZjkzNmE0NDU4YjQyNDRlZDEyYTMxZTE0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzA0NjgwOTEzNDYzNiwgLTk2LjcwMTIwNTAzNTU5MTcxXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2YwYjVjMzMzY2FjNTRmYWI5M2U3NWE5NDA0MmI2Nzc1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iMzhmM2VhNzg0ZmM0MjhhOTdkYmQ3NjZkMmFhMjU2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjM4ZjNlYTc4NGZjNDI4YTk3ZGJkNzY2ZDJhYTI1NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBTY29vdGVyJiMzOTtzIENvZmZlZWhvdXNlIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjBiNWMzMzNjYWM1NGZhYjkzZTc1YTk0MDQyYjY3NzUuc2V0Q29udGVudChodG1sX2IzOGYzZWE3ODRmYzQyOGE5N2RiZDc2NmQyYWEyNTZlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yZDM1ZTM2ZjkzNmE0NDU4YjQyNDRlZDEyYTMxZTE0MS5iaW5kUG9wdXAocG9wdXBfZjBiNWMzMzNjYWM1NGZhYjkzZTc1YTk0MDQyYjY3NzUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U5OWFhNTMyNjMxNjRiYzk5NmZiOGJmYmM0N2RkYmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4MjQ5MSwgLTk2LjY0MDIwOTA5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JjODUzNmNjMjRkOTRlMzY4ZDczZjM4NjFlYWY3ZTc5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80M2UwZjlmMjkzZjE0OGJmYjMxOTFjYmE0NzkyODYxMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDNlMGY5ZjI5M2YxNDhiZmIzMTkxY2JhNDc5Mjg2MTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBTdXBlciBTYXZlciAoR3JvY2VyeSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmM4NTM2Y2MyNGQ5NGUzNjhkNzNmMzg2MWVhZjdlNzkuc2V0Q29udGVudChodG1sXzQzZTBmOWYyOTNmMTQ4YmZiMzE5MWNiYTQ3OTI4NjEzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lOTlhYTUzMjYzMTY0YmM5OTZmYjhiZmJjNDdkZGJmZC5iaW5kUG9wdXAocG9wdXBfYmM4NTM2Y2MyNGQ5NGUzNjhkNzNmMzg2MWVhZjdlNzkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1ZTljNWZlYTFlYjRjYmNhY2U0MTZjZDZlNWFiMmUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODU3NTUxMzc0NjQ0OTg0LCAtOTYuNjgxNTM1NTQyMDExMjZdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNjZTEyYzAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI2NlMTJjMCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjc0YWYxNjRiNjM1NDY4MmE4OTU0OTUxYzg1YjRhMzcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzNjM2YzMDg2NGMxYzQ1OWNiNTYwNzYzMWRjMWYzZDVlID0gJChgPGRpdiBpZD0iaHRtbF8zYzNmMzA4NjRjMWM0NTljYjU2MDc2MzFkYzFmM2Q1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzRdIFdlbGxzIEZhcmdvIEJhbmsgKEJhbmspPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzY3NGFmMTY0YjYzNTQ2ODJhODk1NDk1MWM4NWI0YTM3LnNldENvbnRlbnQoaHRtbF8zYzNmMzA4NjRjMWM0NTljYjU2MDc2MzFkYzFmM2Q1ZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTVlOWM1ZmVhMWViNGNiY2FjZTQxNmNkNmU1YWIyZTAuYmluZFBvcHVwKHBvcHVwXzY3NGFmMTY0YjYzNTQ2ODJhODk1NDk1MWM4NWI0YTM3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODQ5MGZmYmJkZDc0ZDA0OThhMzI0YmU4ZjQ2YjQ1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDMwMTMyOTU0MzA3LCAtOTYuNjQ3OTUxMTQ4Njc4OTRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZGM2NWZjM2I4NTc5NDQwOGFiZWRkYTNhZGM2NGNmNjkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA3YTMwZmM3MTUzODRjYjU4OGQyYmRjMWFkYThmYTJlID0gJChgPGRpdiBpZD0iaHRtbF8wN2EzMGZjNzE1Mzg0Y2I1ODhkMmJkYzFhZGE4ZmEyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIE1hZG9ubmEgUHJvQWN0aXZlIEhlYWx0aCAmYW1wOyBGaXRuZXNzIChHeW0pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2RjNjVmYzNiODU3OTQ0MDhhYmVkZGEzYWRjNjRjZjY5LnNldENvbnRlbnQoaHRtbF8wN2EzMGZjNzE1Mzg0Y2I1ODhkMmJkYzFhZGE4ZmEyZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTg0OTBmZmJiZGQ3NGQwNDk4YTMyNGJlOGY0NmI0NTIuYmluZFBvcHVwKHBvcHVwX2RjNjVmYzNiODU3OTQ0MDhhYmVkZGEzYWRjNjRjZjY5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZDM4OTg1YWNjOWU0YzliYWVhMzMzYjExYjJiYmNhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTY5NDY4NjEyNTA2LCAtOTYuNjMyMTYwOTM3MjcxNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MzQ2MTM0ODQyZGY0ZjBhYWFhNjQ3Mjg1MTY3MTE1OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNWYwMTg5OWJmYWUwNGI4MzkwYzM0NjhkMmQ0NWE1YjIgPSAkKGA8ZGl2IGlkPSJodG1sXzVmMDE4OTliZmFlMDRiODM5MGMzNDY4ZDJkNDVhNWIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gSG9sbWVzIExha2UgR29sZiBDb3Vyc2UgKEdvbGYgQ291cnNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80MzQ2MTM0ODQyZGY0ZjBhYWFhNjQ3Mjg1MTY3MTE1OS5zZXRDb250ZW50KGh0bWxfNWYwMTg5OWJmYWUwNGI4MzkwYzM0NjhkMmQ0NWE1YjIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2ZkMzg5ODVhY2M5ZTRjOWJhZWEzMzNiMTFiMmJiY2E5LmJpbmRQb3B1cChwb3B1cF80MzQ2MTM0ODQyZGY0ZjBhYWFhNjQ3Mjg1MTY3MTE1OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTM1NWRmYjdhOWIxNGMzMGI3YTcyZjVhYjkxZTcxMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzg2NjMsIC05Ni42ODAyMDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZWU5OGEyNzhiZjg4NDFiN2E4Y2I0ZjdlZjkyZWJiNTkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QwZTQ3MWNhYTczOTQxMzlhYzQ1MmE3YWY5N2Y1YjBlID0gJChgPGRpdiBpZD0iaHRtbF9kMGU0NzFjYWE3Mzk0MTM5YWM0NTJhN2FmOTdmNWIwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIFBldFNtYXJ0IChQZXQgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2VlOThhMjc4YmY4ODQxYjdhOGNiNGY3ZWY5MmViYjU5LnNldENvbnRlbnQoaHRtbF9kMGU0NzFjYWE3Mzk0MTM5YWM0NTJhN2FmOTdmNWIwZSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZTM1NWRmYjdhOWIxNGMzMGI3YTcyZjVhYjkxZTcxMzcuYmluZFBvcHVwKHBvcHVwX2VlOThhMjc4YmY4ODQxYjdhOGNiNGY3ZWY5MmViYjU5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTc5YTIyZjE4Mzk0YmFkOGM2ODI1NTNkZTZhN2ZmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MjU0NywgLTk2LjY3NDc2NzddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjlhNGRhMTlmMWFhNDRhN2FkMTNlNjExOWYzNDA4MDggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzFlODVhOGQzNmY3OTQ0ZjE4OWI4MDIzMWNjZTdkYzE0ID0gJChgPGRpdiBpZD0iaHRtbF8xZTg1YThkMzZmNzk0NGYxODliODAyMzFjY2U3ZGMxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIFVsdGEgQmVhdXR5IChDb3NtZXRpY3MgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMjlhNGRhMTlmMWFhNDRhN2FkMTNlNjExOWYzNDA4MDguc2V0Q29udGVudChodG1sXzFlODVhOGQzNmY3OTQ0ZjE4OWI4MDIzMWNjZTdkYzE0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9jNTc5YTIyZjE4Mzk0YmFkOGM2ODI1NTNkZTZhN2ZmZC5iaW5kUG9wdXAocG9wdXBfMjlhNGRhMTlmMWFhNDRhN2FkMTNlNjExOWYzNDA4MDgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5NWIzZTNjZDk0MTRhN2ZhZmYxMzQ2NDc4NjgwNmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODYzNjc5LCAtOTYuNjc5MTk5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNmNWNkMzliOTZhZjRiYzU5ODQ0ZDI1NTI2ZjZhMGRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83ZWI3MzllMDUxMWI0MWYxYWY1N2YxOWIyMmUyMzFkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2ViNzM5ZTA1MTFiNDFmMWFmNTdmMTliMjJlMjMxZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBQZXRTbWFydCAoUGV0IFN0b3JlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zZjVjZDM5Yjk2YWY0YmM1OTg0NGQyNTUyNmY2YTBkZS5zZXRDb250ZW50KGh0bWxfN2ViNzM5ZTA1MTFiNDFmMWFmNTdmMTliMjJlMjMxZDgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzM5NWIzZTNjZDk0MTRhN2ZhZmYxMzQ2NDc4NjgwNmM5LmJpbmRQb3B1cChwb3B1cF8zZjVjZDM5Yjk2YWY0YmM1OTg0NGQyNTUyNmY2YTBkZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2JjNDcyMmQwMTFlNDVlMGI2MDQ3NjViYzhkMzBiMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTY1ODU4NjU1MDcyNywgLTk2LjY2NDIxMDg2Mjg4NzhdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjFmNTEyYmZhYzBjNDM1YTg0Y2ZkYmU0Y2ExYTU1MGYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QwMDM0YjM0NzIwNjQxODNiNWYzOTViNjU5OWY2MmUwID0gJChgPGRpdiBpZD0iaHRtbF9kMDAzNGIzNDcyMDY0MTgzYjVmMzk1YjY1OTlmNjJlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIENoaW5hIEhvdXNlIChDaGluZXNlIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2YxZjUxMmJmYWMwYzQzNWE4NGNmZGJlNGNhMWE1NTBmLnNldENvbnRlbnQoaHRtbF9kMDAzNGIzNDcyMDY0MTgzYjVmMzk1YjY1OTlmNjJlMCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfM2JjNDcyMmQwMTFlNDVlMGI2MDQ3NjViYzhkMzBiMDAuYmluZFBvcHVwKHBvcHVwX2YxZjUxMmJmYWMwYzQzNWE4NGNmZGJlNGNhMWE1NTBmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzk4NmQwNzg2MjI0ZTkxODM2MWJiZGE5YTdkMTQ5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0NDMyMTE3ODE0MDIzNCwgLTk2LjczNjI5MjgzOTA1MDNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMxNzE3MTciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzE3MTcxNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzg2NzBiYTNhMzY3NGJiNGIxOTY2ODE4MDUzMDYyNzQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzk2OTZkYzliOTA2MDQzNThhZjUwMDUyYjJhNDEyYTA2ID0gJChgPGRpdiBpZD0iaHRtbF85Njk2ZGM5YjkwNjA0MzU4YWY1MDA1MmIyYTQxMmEwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzVdIEhhbXB0b24gSW5uIGJ5IEhpbHRvbiAoSG90ZWwpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M4NjcwYmEzYTM2NzRiYjRiMTk2NjgxODA1MzA2Mjc0LnNldENvbnRlbnQoaHRtbF85Njk2ZGM5YjkwNjA0MzU4YWY1MDA1MmIyYTQxMmEwNik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMzM5ODZkMDc4NjIyNGU5MTgzNjFiYmRhOWE3ZDE0OTcuYmluZFBvcHVwKHBvcHVwX2M4NjcwYmEzYTM2NzRiYjRiMTk2NjgxODA1MzA2Mjc0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZmMyOTViNGZhYzk0N2RlOTIwOTYyZjgyOGE3MWMwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MzExNDYzOTA5ODIxNCwgLTk2LjY0MTQ2NTQ5MzA1NjU2XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzYxNTVlOTIzNDQzMTRmOGRiYWRkOGFlZjU5NmM2NDM5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wMjYwYTJkMzYwZGI0MGRjODg2ZDFjYzE3NWFiM2VhYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDI2MGEyZDM2MGRiNDBkYzg4NmQxY2MxNzVhYjNlYWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBSYWlzaW5nIENhbmUmIzM5O3MgQ2hpY2tlbiBGaW5nZXJzIChGcmllZCBDaGlja2VuIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82MTU1ZTkyMzQ0MzE0ZjhkYmFkZDhhZWY1OTZjNjQzOS5zZXRDb250ZW50KGh0bWxfMDI2MGEyZDM2MGRiNDBkYzg4NmQxY2MxNzVhYjNlYWEpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2NmYzI5NWI0ZmFjOTQ3ZGU5MjA5NjJmODI4YTcxYzAzLmJpbmRQb3B1cChwb3B1cF82MTU1ZTkyMzQ0MzE0ZjhkYmFkZDhhZWY1OTZjNjQzOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGM3YmI0Y2ExZDA3NDhmYjkxNjYzNjY2ZTU3M2M1YjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjYyMTY0Nzk1ODU2OCwgLTk2LjY3NjcwNzU5MDg0NDY5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc3ZmI5MmMxZjFmMzQ0MjNhYTZkN2I4NTQyZmU1OWE4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zN2FkZTk2ODU1ZDI0NTI2ODczZWEzOTM3NzZlY2RjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzdhZGU5Njg1NWQyNDUyNjg3M2VhMzkzNzc2ZWNkYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBGcmVkZHkmIzM5O3MgU3RlYWtidXJnZXJzIChCdXJnZXIgSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc3ZmI5MmMxZjFmMzQ0MjNhYTZkN2I4NTQyZmU1OWE4LnNldENvbnRlbnQoaHRtbF8zN2FkZTk2ODU1ZDI0NTI2ODczZWEzOTM3NzZlY2RjNyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNGM3YmI0Y2ExZDA3NDhmYjkxNjYzNjY2ZTU3M2M1YjMuYmluZFBvcHVwKHBvcHVwXzc3ZmI5MmMxZjFmMzQ0MjNhYTZkN2I4NTQyZmU1OWE4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMGNlNzdkNzFlN2Q0OGY5OTA5NjUxZTFiOTYxMjJjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDkxMDQ2NDI3NDIyLCAtOTYuNjQyOTE0MzY2MTM2MzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjkwNmYzMjlhN2NkNDQxZTljYWI5M2I0OGQwNDAyNmQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI0ZDQ5ZWExNmY5YjQ2YTQ4YTk0N2Q5ODU2NWE1NDQ1ID0gJChgPGRpdiBpZD0iaHRtbF8yNGQ0OWVhMTZmOWI0NmE0OGE5NDdkOTg1NjVhNTQ0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIEN1cGNha2VzICZhbXA7IE1vcmXigKYgKEN1cGNha2UgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjkwNmYzMjlhN2NkNDQxZTljYWI5M2I0OGQwNDAyNmQuc2V0Q29udGVudChodG1sXzI0ZDQ5ZWExNmY5YjQ2YTQ4YTk0N2Q5ODU2NWE1NDQ1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8wMGNlNzdkNzFlN2Q0OGY5OTA5NjUxZTFiOTYxMjJjYy5iaW5kUG9wdXAocG9wdXBfNjkwNmYzMjlhN2NkNDQxZTljYWI5M2I0OGQwNDAyNmQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0MmE5NDlkZGY0YTQ5MWQ4M2NmNzVjYTFjODgyNGViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0NTEwMjAzNzIyMTQ1LCAtOTYuNzAyNjg4MTMwMTU0NTddLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjQwN2FlZDBkNzAzNDU5ZmI1M2ZlMWYxOTVlMDk0YTkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzM3YTdkNzQ0MjkwZTQyMTY5N2UwMzUyMDM4NjhmNWM4ID0gJChgPGRpdiBpZD0iaHRtbF8zN2E3ZDc0NDI5MGU0MjE2OTdlMDM1MjAzODY4ZjVjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIEZldGlzaCBOYWlscyAoU3BhKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82NDA3YWVkMGQ3MDM0NTlmYjUzZmUxZjE5NWUwOTRhOS5zZXRDb250ZW50KGh0bWxfMzdhN2Q3NDQyOTBlNDIxNjk3ZTAzNTIwMzg2OGY1YzgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2M0MmE5NDlkZGY0YTQ5MWQ4M2NmNzVjYTFjODgyNGViLmJpbmRQb3B1cChwb3B1cF82NDA3YWVkMGQ3MDM0NTlmYjUzZmUxZjE5NWUwOTRhOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGUxODI2Y2Y4ZTk4NDJlNzhlZDYwYWE2N2Q2ODBhODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NjAzNjIyMjI1NDM1NiwgLTk2LjY4MTE5OTQ0MjY3OTk0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U5MzFiODJlYWNmMTQzZmE5YzA3MTQxNzhhZTc5ZjU4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kNGUzNTNkMTA5Njc0ZTg2YTVlNWQyNmY2ZjBiMTAyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDRlMzUzZDEwOTY3NGU4NmE1ZTVkMjZmNmYwYjEwMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBDdWx2ZXImIzM5O3MgKEZhc3QgRm9vZCBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lOTMxYjgyZWFjZjE0M2ZhOWMwNzE0MTc4YWU3OWY1OC5zZXRDb250ZW50KGh0bWxfZDRlMzUzZDEwOTY3NGU4NmE1ZTVkMjZmNmYwYjEwMjUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2RlMTgyNmNmOGU5ODQyZTc4ZWQ2MGFhNjdkNjgwYTg5LmJpbmRQb3B1cChwb3B1cF9lOTMxYjgyZWFjZjE0M2ZhOWMwNzE0MTc4YWU3OWY1OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjU1MWEwODU4ZjMyNDc1NDhkYjI1ZTExYWIwMDA1OGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjAzODA2MTIxMjQ4ODQsIC05Ni42NDM4MDMwODY3MTU3NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85ZTA5YzFlZTZjZjc0ZGEwYmFkNDJhZDZmYjgwY2Q2NSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjQ1ZjkyYWEzMzIwNDQxY2FkODNhNDczMDQyOGM4NDggPSAkKGA8ZGl2IGlkPSJodG1sXzY0NWY5MmFhMzMyMDQ0MWNhZDgzYTQ3MzA0MjhjODQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gRG9uICZhbXA7IE1pbGxpZSYjMzk7cyAoQnVyZ2VyIEpvaW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85ZTA5YzFlZTZjZjc0ZGEwYmFkNDJhZDZmYjgwY2Q2NS5zZXRDb250ZW50KGh0bWxfNjQ1ZjkyYWEzMzIwNDQxY2FkODNhNDczMDQyOGM4NDgpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2I1NTFhMDg1OGYzMjQ3NTQ4ZGIyNWUxMWFiMDAwNThmLmJpbmRQb3B1cChwb3B1cF85ZTA5YzFlZTZjZjc0ZGEwYmFkNDJhZDZmYjgwY2Q2NSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWFiNTU3NTI2ZDVjNGZlMjlhNDE0M2U2NzY0NjA4YzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjE5OTcsIC05Ni42OTMxNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wYWI3ZWQ0ZGVmZDU0YTY1OGExZjI1ODVjYzkyYjdlOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzhmNDQ3YmUzMzE2NDg4M2E1YWNmMzFkMTE3YjY4OWIgPSAkKGA8ZGl2IGlkPSJodG1sXzc4ZjQ0N2JlMzMxNjQ4ODNhNWFjZjMxZDExN2I2ODliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gV2lsZGVybmVzcyBSaWRnZSAtIExvZGdlIFJlc3RhdXJhbnQgKEFtZXJpY2FuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzBhYjdlZDRkZWZkNTRhNjU4YTFmMjU4NWNjOTJiN2U5LnNldENvbnRlbnQoaHRtbF83OGY0NDdiZTMzMTY0ODgzYTVhY2YzMWQxMTdiNjg5Yik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNWFiNTU3NTI2ZDVjNGZlMjlhNDE0M2U2NzY0NjA4YzAuYmluZFBvcHVwKHBvcHVwXzBhYjdlZDRkZWZkNTRhNjU4YTFmMjU4NWNjOTJiN2U5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzcwYTc5MzRkZDM0NjNjOTlkMTQwYThjYmI3NWIzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1NzE5NTI3NjEwNjc1LCAtOTYuNjM3NzIxMzQyNzM1NjNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMwRjlENTgiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzBGOUQ1OCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmZkYWI1MDliMTM4NDdmNDk4ZWUyYTA4ZDY0OGQ4MTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MzNzc2YjEyY2ZkODRkNDdiYTZhNDMxZTU5MDUzNzdjID0gJChgPGRpdiBpZD0iaHRtbF9jMzc3NmIxMmNmZDg0ZDQ3YmE2YTQzMWU1OTA1Mzc3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzBdIEVuZ2luZSBIb3VzZSBDYWZlIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mZmRhYjUwOWIxMzg0N2Y0OThlZTJhMDhkNjQ4ZDgxMi5zZXRDb250ZW50KGh0bWxfYzM3NzZiMTJjZmQ4NGQ0N2JhNmE0MzFlNTkwNTM3N2MpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzdjNzBhNzkzNGRkMzQ2M2M5OWQxNDBhOGNiYjc1YjNkLmJpbmRQb3B1cChwb3B1cF9mZmRhYjUwOWIxMzg0N2Y0OThlZTJhMDhkNjQ4ZDgxMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzcyOGM3MWFhZGU4NDk3ZTliODMxOTJmZDU3NmI0YmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjAxOSwgLTk2LjY0MjQ5OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81MGQ4NWY3NmFiMDc0NTg1OTEwMWZlNmNiYjkyM2QxMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNWU2ZGQ5MmEzZWUyNGNlN2JlYmVlN2FlMzExZDgxZTMgPSAkKGA8ZGl2IGlkPSJodG1sXzVlNmRkOTJhM2VlMjRjZTdiZWJlZTdhZTMxMWQ4MWUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gTWFyY3VzIEVkZ2V3b29kIENpbmVtYSAoTW92aWUgVGhlYXRlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTBkODVmNzZhYjA3NDU4NTkxMDFmZTZjYmI5MjNkMTMuc2V0Q29udGVudChodG1sXzVlNmRkOTJhM2VlMjRjZTdiZWJlZTdhZTMxMWQ4MWUzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8zNzI4YzcxYWFkZTg0OTdlOWI4MzE5MmZkNTc2YjRiYy5iaW5kUG9wdXAocG9wdXBfNTBkODVmNzZhYjA3NDU4NTkxMDFmZTZjYmI5MjNkMTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5MGQzNzNhMGM2OTRhY2E5YThhN2ZhOTNhYmJmNTRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyMDg2NzM5Mjk1NzYsIC05Ni42NzkzOTQ3MzY4MTA1MV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80ZmRkYjQ1YWYxZmE0NzRhOGE2ZGY2NTk4MDA5YzQxYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzJjYmZmMjg3MjE2NDQxOTlmMjZlNzZjZGE3YmEzY2EgPSAkKGA8ZGl2IGlkPSJodG1sXzMyY2JmZjI4NzIxNjQ0MTk5ZjI2ZTc2Y2RhN2JhM2NhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gVmljdG9yaWEmIzM5O3MgU2VjcmV0IChMaW5nZXJpZSBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNGZkZGI0NWFmMWZhNDc0YThhNmRmNjU5ODAwOWM0MWEuc2V0Q29udGVudChodG1sXzMyY2JmZjI4NzIxNjQ0MTk5ZjI2ZTc2Y2RhN2JhM2NhKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hOTBkMzczYTBjNjk0YWNhOWE4YTdmYTkzYWJiZjU0Zi5iaW5kUG9wdXAocG9wdXBfNGZkZGI0NWFmMWZhNDc0YThhNmRmNjU5ODAwOWM0MWEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljZWMzYzgwZTUxNDQ5MjdhOTY1YWQ4M2M5OTFkZDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODYwNzE4MzY2NzY2MTMsIC05Ni42NDA3MTA2MzY3ODUxNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzBGOUQ1OCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjMEY5RDU4IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MzJkMWZmYzQ3YmQ0NGE3YjUyNGRlNGZlN2QzNmI3YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjhmOTgwMmViMzI2NDA3OWE2Y2ZmZjY5NjIyNzk5MjkgPSAkKGA8ZGl2IGlkPSJodG1sXzY4Zjk4MDJlYjMyNjQwNzlhNmNmZmY2OTYyMjc5OTI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMF0gUGFuY2hvIFZpbGxhIE1leGljYW4gR3JpbGwgKE1leGljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDMyZDFmZmM0N2JkNDRhN2I1MjRkZTRmZTdkMzZiN2Euc2V0Q29udGVudChodG1sXzY4Zjk4MDJlYjMyNjQwNzlhNmNmZmY2OTYyMjc5OTI5KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl85Y2VjM2M4MGU1MTQ0OTI3YTk2NWFkODNjOTkxZGQ2ZC5iaW5kUG9wdXAocG9wdXBfNDMyZDFmZmM0N2JkNDRhN2I1MjRkZTRmZTdkMzZiN2EpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwN2Q3OWQ2N2Y0MDQxYjk4MWQ0YjNiNDUyMjdiMDU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4NTgxMjExNjk3MzksIC05Ni42MjQ0NjE1MDM4NTM2NV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yMzFlOTc3NjRjM2E0NDI2OTFkM2U0YzQwODdmZTc1ZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTY1YTUwN2I4MDhhNGM0ZTgzZDMxYzUwMmVjMWJjZjMgPSAkKGA8ZGl2IGlkPSJodG1sXzk2NWE1MDdiODA4YTRjNGU4M2QzMWM1MDJlYzFiY2YzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gUG9wZXllcyBMb3Vpc2lhbmEgS2l0Y2hlbiAoRnJpZWQgQ2hpY2tlbiBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMjMxZTk3NzY0YzNhNDQyNjkxZDNlNGM0MDg3ZmU3NWUuc2V0Q29udGVudChodG1sXzk2NWE1MDdiODA4YTRjNGU4M2QzMWM1MDJlYzFiY2YzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9iMDdkNzlkNjdmNDA0MWI5ODFkNGIzYjQ1MjI3YjA1Ny5iaW5kUG9wdXAocG9wdXBfMjMxZTk3NzY0YzNhNDQyNjkxZDNlNGM0MDg3ZmU3NWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmN2NlNDEyZGQ4YjQ0ZGE5ZjAyNDUxYmEwNjBlZWQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQwMTY3MjA2MTEwNDE0LCAtOTYuNjgxMzc2OTk3MjMwMjNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjZkNjhkMDU3OWRhNGRlM2E1OGE4YzMzODQ1NzhjZDQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzU5ZDM0ZTk5YWYyZDQwMzY5YzY3NmQ4ZmExZDY5ZTBhID0gJChgPGRpdiBpZD0iaHRtbF81OWQzNGU5OWFmMmQ0MDM2OWM2NzZkOGZhMWQ2OWUwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIEZhbW91cyBEYXZlJiMzOTtzIChCQlEgSm9pbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2I2ZDY4ZDA1NzlkYTRkZTNhNThhOGMzMzg0NTc4Y2Q0LnNldENvbnRlbnQoaHRtbF81OWQzNGU5OWFmMmQ0MDM2OWM2NzZkOGZhMWQ2OWUwYSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfZWY3Y2U0MTJkZDhiNDRkYTlmMDI0NTFiYTA2MGVlZDguYmluZFBvcHVwKHBvcHVwX2I2ZDY4ZDA1NzlkYTRkZTNhNThhOGMzMzg0NTc4Y2Q0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZmE2NjdmYWU5MDQ0MjkxYjMwNGVmM2NjNGQ4ODkxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MjA2NjQxNDM3NzE5LCAtOTYuNjA2ODMzODA3NTE5MzRdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOGViY2Y1NDg3OGFhNDRiMjgwYTk2MzE2NzU5NTVhNDggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2YyOWRhNDcxZmU2ZTRkODk5NjQyYWY2ZGEwOGFlNzdhID0gJChgPGRpdiBpZD0iaHRtbF9mMjlkYTQ3MWZlNmU0ZDg5OTY0MmFmNmRhMDhhZTc3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIFNjb290ZXImIzM5O3MgQ29mZmVlaG91c2UgJmFtcDsgQnJvd24gQmFnZ2VycyAoU2FuZHdpY2ggUGxhY2UpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzhlYmNmNTQ4NzhhYTQ0YjI4MGE5NjMxNjc1OTU1YTQ4LnNldENvbnRlbnQoaHRtbF9mMjlkYTQ3MWZlNmU0ZDg5OTY0MmFmNmRhMDhhZTc3YSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNWZhNjY3ZmFlOTA0NDI5MWIzMDRlZjNjYzRkODg5MWYuYmluZFBvcHVwKHBvcHVwXzhlYmNmNTQ4NzhhYTQ0YjI4MGE5NjMxNjc1OTU1YTQ4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTg0OGRmZDJhN2U0NTRiODAzOGFkZDYyMjAzMWI0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczODQwMTQ5OTk5OTk5LCAtOTYuNjg0OTM1NF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84OGQ1OWUwMjgwMDQ0MTU4ODUxM2MyYjU3NDRkZjRlMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODg0NGE1MTc0ZGJjNDI3M2FmNjJlYzNlZTVlYWMyOWMgPSAkKGA8ZGl2IGlkPSJodG1sXzg4NDRhNTE3NGRiYzQyNzNhZjYyZWMzZWU1ZWFjMjljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gSHVIb3QgTW9uZ29saWFuIEdyaWxsIChNb25nb2xpYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODhkNTllMDI4MDA0NDE1ODg1MTNjMmI1NzQ0ZGY0ZTMuc2V0Q29udGVudChodG1sXzg4NDRhNTE3NGRiYzQyNzNhZjYyZWMzZWU1ZWFjMjljKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9lMTg0OGRmZDJhN2U0NTRiODAzOGFkZDYyMjAzMWI0NC5iaW5kUG9wdXAocG9wdXBfODhkNTllMDI4MDA0NDE1ODg1MTNjMmI1NzQ0ZGY0ZTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4Y2UzZTliMDMyNjQzOTU5MzY3MGY2ZmQxNWI1MDk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM4ODkwMTUsIC05Ni42ODE3ODU3Nl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jZTdmYWMyOGRmOTk0ZjUzYTRjOGE3ZjMyMzVjYjkxMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDdkN2Y5YTgxZjFjNGM2ZDg5NWMzYzlhYTQyOTExMzMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3ZDdmOWE4MWYxYzRjNmQ4OTVjM2M5YWE0MjkxMTMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gUmVkIFJvYmluIEdvdXJtZXQgQnVyZ2VycyBhbmQgQnJld3MgKEJ1cmdlciBKb2ludCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfY2U3ZmFjMjhkZjk5NGY1M2E0YzhhN2YzMjM1Y2I5MTEuc2V0Q29udGVudChodG1sX2Q3ZDdmOWE4MWYxYzRjNmQ4OTVjM2M5YWE0MjkxMTMzKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83OGNlM2U5YjAzMjY0Mzk1OTM2NzBmNmZkMTViNTA5OS5iaW5kUG9wdXAocG9wdXBfY2U3ZmFjMjhkZjk5NGY1M2E0YzhhN2YzMjM1Y2I5MTEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0ZDExNDkzZTY3ZTRiZTg5NzMwMzViZjYyZDNlMTMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5OTMzMjA0MDQ3MjMsIC05Ni42NDEyNzI4NzQwNzAwNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzgwMDA4MCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjODAwMDgwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jZDM5MDc5MzliZjI0OTExOTM4YjU3ZDA1ZjE4NDg3ZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNDJiYTNlMGRlZjA2NDcwOTg5ZjQ2N2RkMmU2Mzg3NTIgPSAkKGA8ZGl2IGlkPSJodG1sXzQyYmEzZTBkZWYwNjQ3MDk4OWY0NjdkZDJlNjM4NzUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bM10gU2Nvb3RlcnMgKENvZmZlZSBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jZDM5MDc5MzliZjI0OTExOTM4YjU3ZDA1ZjE4NDg3ZS5zZXRDb250ZW50KGh0bWxfNDJiYTNlMGRlZjA2NDcwOTg5ZjQ2N2RkMmU2Mzg3NTIpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2M0ZDExNDkzZTY3ZTRiZTg5NzMwMzViZjYyZDNlMTMxLmJpbmRQb3B1cChwb3B1cF9jZDM5MDc5MzliZjI0OTExOTM4YjU3ZDA1ZjE4NDg3ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2IzZWRmOTk5YjNjNDZmNmIwNDY4MzZmNDNkZDA1NGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44ODI0MTk5LCAtOTYuNzMwMzI4OF0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xZTdkMWJiMjdkYmI0MTZlYjZmZTIxZGI4ODdjZWI3NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNDE3OWQ5Y2EzNWY4NDUxY2FlODk3MDY4ZjQ4NjNhNDcgPSAkKGA8ZGl2IGlkPSJodG1sXzQxNzlkOWNhMzVmODQ1MWNhZTg5NzA2OGY0ODYzYTQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gRmFsbGJyb29rIFlNQ0EgKEd5bSAvIEZpdG5lc3MgQ2VudGVyKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xZTdkMWJiMjdkYmI0MTZlYjZmZTIxZGI4ODdjZWI3Ni5zZXRDb250ZW50KGh0bWxfNDE3OWQ5Y2EzNWY4NDUxY2FlODk3MDY4ZjQ4NjNhNDcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2NiM2VkZjk5OWIzYzQ2ZjZiMDQ2ODM2ZjQzZGQwNTRlLmJpbmRQb3B1cChwb3B1cF8xZTdkMWJiMjdkYmI0MTZlYjZmZTIxZGI4ODdjZWI3NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTJhZDdjNmFjMDcwNDMzYmE0YjE2YWQzNzJiNzE4ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjc3ODU3MDAzMTM4MiwgLTk2LjY2NTQ3MzA4Mzk1ODFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZWZlYTQ3ZWM5NWU1NDFjODhmM2VhZjNlMjM1ZGJhNjIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzEyY2IxMmM3OWZiMzQ1MWY4MWNkOGQ4ZjQ2MTBhMjhkID0gJChgPGRpdiBpZD0iaHRtbF8xMmNiMTJjNzlmYjM0NTFmODFjZDhkOGY0NjEwYTI4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIFRhcmdldCAoQmlnIEJveCBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZWZlYTQ3ZWM5NWU1NDFjODhmM2VhZjNlMjM1ZGJhNjIuc2V0Q29udGVudChodG1sXzEyY2IxMmM3OWZiMzQ1MWY4MWNkOGQ4ZjQ2MTBhMjhkKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hMmFkN2M2YWMwNzA0MzNiYTRiMTZhZDM3MmI3MThkYy5iaW5kUG9wdXAocG9wdXBfZWZlYTQ3ZWM5NWU1NDFjODhmM2VhZjNlMjM1ZGJhNjIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1YzRiZGM1YmJmZDQwMDc4ZmRiNTBkMzg0YWJhMTFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5Mjc1LCAtOTYuNjQzNTM5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjODAwMDgwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiM4MDAwODAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y3MzgwNGNjMGJhZTRlNzA4NGI1ZGZmMjEwNDA0NTNkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80MjE0NDk0YTA0N2M0MDM0OTg3OGMzMTMzMWIxMzI1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDIxNDQ5NGEwNDdjNDAzNDk4NzhjMzEzMzFiMTMyNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlszXSBMb2NhbCBCZWVyLCBQYXRpbywgYW5kIEtpdGNoZW4gKFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y3MzgwNGNjMGJhZTRlNzA4NGI1ZGZmMjEwNDA0NTNkLnNldENvbnRlbnQoaHRtbF80MjE0NDk0YTA0N2M0MDM0OTg3OGMzMTMzMWIxMzI1OSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNTVjNGJkYzViYmZkNDAwNzhmZGI1MGQzODRhYmExMWUuYmluZFBvcHVwKHBvcHVwX2Y3MzgwNGNjMGJhZTRlNzA4NGI1ZGZmMjEwNDA0NTNkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80M2NmOGIyNjUxZmY0NzEzYTM4MWRlZTU5ZTJhNTQ5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTU0OTU4NDc1MDc0LCAtOTYuNjc5MzAxOTU4NTMyNDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODMwZDQ3MzFlMTYwNDVmNmJkMTU2ZDIyYWIzODNjMTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzBhZTliYTg0MDlkZDQ2ZDI4MjcxYjU1NDdhN2JlYzE1ID0gJChgPGRpdiBpZD0iaHRtbF8wYWU5YmE4NDA5ZGQ0NmQyODI3MWI1NTQ3YTdiZWMxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIENoZXJyeSBPbiBUb3AgKEZyb3plbiBZb2d1cnQgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODMwZDQ3MzFlMTYwNDVmNmJkMTU2ZDIyYWIzODNjMTEuc2V0Q29udGVudChodG1sXzBhZTliYTg0MDlkZDQ2ZDI4MjcxYjU1NDdhN2JlYzE1KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80M2NmOGIyNjUxZmY0NzEzYTM4MWRlZTU5ZTJhNTQ5ZS5iaW5kUG9wdXAocG9wdXBfODMwZDQ3MzFlMTYwNDVmNmJkMTU2ZDIyYWIzODNjMTEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5NTY0YmMwODQ4MjQ4ZDdhNjgxZmY3ZGY0ODJlNTM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5NTExMDcsIC05Ni42NzkxOTk0OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84NjY0NDAzZTBmNDU0ZjVkYWZiMjQwM2I3MmRkYjE3NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjA1NGU1NDgwMDg1NDQ2OWJhYTdmZTI0MTc3Mjk1ZTEgPSAkKGA8ZGl2IGlkPSJodG1sX2IwNTRlNTQ4MDA4NTQ0NjliYWE3ZmUyNDE3NzI5NWUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gU3RhcmJ1Y2tzIChDb2ZmZWUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODY2NDQwM2UwZjQ1NGY1ZGFmYjI0MDNiNzJkZGIxNzYuc2V0Q29udGVudChodG1sX2IwNTRlNTQ4MDA4NTQ0NjliYWE3ZmUyNDE3NzI5NWUxKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl80OTU2NGJjMDg0ODI0OGQ3YTY4MWZmN2RmNDgyZTUzOS5iaW5kUG9wdXAocG9wdXBfODY2NDQwM2UwZjQ1NGY1ZGFmYjI0MDNiNzJkZGIxNzYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0NzUzMGVkMTA5NDRkMWQ4NDMxZmEzZjQwZmQ4Mjg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5MTQ2OSwgLTk2LjcwMDc4ODNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTYzOGE4NmJmZTVlNDc2OGJjMGYxNGY2OTlhMWU5ZTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkwMGU5ODk3M2MwNjRmZWI5OTU5OWY0NjllMThjODU3ID0gJChgPGRpdiBpZD0iaHRtbF85MDBlOTg5NzNjMDY0ZmViOTk1OTlmNDY5ZTE4Yzg1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIFBhbmVyYSBCcmVhZCAoQmFrZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85NjM4YTg2YmZlNWU0NzY4YmMwZjE0ZjY5OWExZTllMy5zZXRDb250ZW50KGh0bWxfOTAwZTk4OTczYzA2NGZlYjk5NTk5ZjQ2OWUxOGM4NTcpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzQ0NzUzMGVkMTA5NDRkMWQ4NDMxZmEzZjQwZmQ4Mjg2LmJpbmRQb3B1cChwb3B1cF85NjM4YTg2YmZlNWU0NzY4YmMwZjE0ZjY5OWExZTllMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjIxMWM4ZjJmMzEyNDU0ZGI5NWUwMDAyZjg4MzEyMmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Nzg1OSwgLTk2LjY4Njg5Ml0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85NjYzYTZkNjlkYzE0NmIyOWE5YmE1MzUzYjAwNWZiMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZmE5OWZiZGZkNTMzNGVjNmFlMTM5YWZlYWExODQ5NzYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhOTlmYmRmZDUzMzRlYzZhZTEzOWFmZWFhMTg0OTc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gQmVzdCBXZXN0ZXJuIFBsdXMgTGluY29sbiBJbm4gJmFtcDsgU3VpdGVzIChIb3RlbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTY2M2E2ZDY5ZGMxNDZiMjlhOWJhNTM1M2IwMDVmYjAuc2V0Q29udGVudChodG1sX2ZhOTlmYmRmZDUzMzRlYzZhZTEzOWFmZWFhMTg0OTc2KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yMjExYzhmMmYzMTI0NTRkYjk1ZTAwMDJmODgzMTIyYS5iaW5kUG9wdXAocG9wdXBfOTY2M2E2ZDY5ZGMxNDZiMjlhOWJhNTM1M2IwMDVmYjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwOTNlN2ZkM2ZiMzRlMjY5NWUyMTllYjIxNmEzNWY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM4MTk3LCAtOTYuNjk4NDI0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzgxNTRmNWU5MzljMzQ5Y2U5MmVjNjJhZWE4YjVkOThkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ZTdmNTVlODg4OGE0M2EzYTY0ZmIxNGQxOTcwMmQ1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGU3ZjU1ZTg4ODhhNDNhM2E2NGZiMTRkMTk3MDJkNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBTbGltIENoaWNrZW5zIChSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84MTU0ZjVlOTM5YzM0OWNlOTJlYzYyYWVhOGI1ZDk4ZC5zZXRDb250ZW50KGh0bWxfNGU3ZjU1ZTg4ODhhNDNhM2E2NGZiMTRkMTk3MDJkNWUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2QwOTNlN2ZkM2ZiMzRlMjY5NWUyMTllYjIxNmEzNWY0LmJpbmRQb3B1cChwb3B1cF84MTU0ZjVlOTM5YzM0OWNlOTJlYzYyYWVhOGI1ZDk4ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2JkNGJjMDY3NzBkNGI5M2JkMTNhMzQ2ZmRkYzE4ODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzg2NzMsIC05Ni42ODA4OTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfM2YxOTczMDE5ZTA2NDc4ZWE2YzlhNzNhNzc5MWE2NjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI0NjU4OGM5OTk0MDQ5ZmM5N2M2OGM5MjE0MGM1NThjID0gJChgPGRpdiBpZD0iaHRtbF8yNDY1ODhjOTk5NDA0OWZjOTdjNjhjOTIxNDBjNTU4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIEplcnNleSBNaWtlJiMzOTtzIFN1YnMgKFNhbmR3aWNoIFBsYWNlKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zZjE5NzMwMTllMDY0NzhlYTZjOWE3M2E3NzkxYTY2MS5zZXRDb250ZW50KGh0bWxfMjQ2NTg4Yzk5OTQwNDlmYzk3YzY4YzkyMTQwYzU1OGMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzdiZDRiYzA2NzcwZDRiOTNiZDEzYTM0NmZkZGMxODgxLmJpbmRQb3B1cChwb3B1cF8zZjE5NzMwMTllMDY0NzhlYTZjOWE3M2E3NzkxYTY2MSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM5YWI1MTE3YTk0NDRiOWI5YjdhN2MwMGE4NDdlODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDAzNzIwODM4OTkzNDUsIC05Ni42ODMyNzA5MzEyNDM5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQzMDQ1MDJhZjMwMzQyNDFiYzcwNmU0YTk1Mjc0ZTczID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMzY0MDM5OTc2MjM0YTMwYTAwOGQwYTk4MWEwZTU3YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjM2NDAzOTk3NjIzNGEzMGEwMDhkMGE5ODFhMGU1N2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBXYWxncmVlbnMgKFBoYXJtYWN5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80MzA0NTAyYWYzMDM0MjQxYmM3MDZlNGE5NTI3NGU3My5zZXRDb250ZW50KGh0bWxfZjM2NDAzOTk3NjIzNGEzMGEwMDhkMGE5ODFhMGU1N2IpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzczOWFiNTExN2E5NDQ0YjliOWI3YTdjMDBhODQ3ZTg1LmJpbmRQb3B1cChwb3B1cF80MzA0NTAyYWYzMDM0MjQxYmM3MDZlNGE5NTI3NGU3MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmE2NjJhNDQzNzhiNGYxYjkyMWM3MTgxOTE2YTBmYjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzkyNTkzOTYxNDIyNjYsIC05Ni42Nzk0NDQyMTI4MzMxMl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83NzFjNTI4MDdiYTk0ZTg4YThkYTQ1YmYwOTc4Zjc0OCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjI1ZGJmZjBhOGE0NDdiYThmNTBkNGJiZmJjMmNiNGQgPSAkKGA8ZGl2IGlkPSJodG1sX2IyNWRiZmYwYThhNDQ3YmE4ZjUwZDRiYmZiYzJjYjRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gQ2hpcG90bGUgTWV4aWNhbiBHcmlsbCAoTWV4aWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83NzFjNTI4MDdiYTk0ZTg4YThkYTQ1YmYwOTc4Zjc0OC5zZXRDb250ZW50KGh0bWxfYjI1ZGJmZjBhOGE0NDdiYThmNTBkNGJiZmJjMmNiNGQpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2ZhNjYyYTQ0Mzc4YjRmMWI5MjFjNzE4MTkxNmEwZmIyLmJpbmRQb3B1cChwb3B1cF83NzFjNTI4MDdiYTk0ZTg4YThkYTQ1YmYwOTc4Zjc0OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmIzMTgyMjUxNjc0NGQ1ZjgyYWE5NDc4ZTAxNzkyMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzg2MTIsIC05Ni42ODMwNzldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2ZlOTczMzYwZDRhNDYxNGIyOWE5MzI5NTNhY2RlM2QgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U5ODQ3MWFjZjQ5YjRlMGQ5MDFlMTU3MTMwMzU2MGNlID0gJChgPGRpdiBpZD0iaHRtbF9lOTg0NzFhY2Y0OWI0ZTBkOTAxZTE1NzEzMDM1NjBjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIFZpbGxhZ2UgSW5uIChCcmVha2Zhc3QgU3BvdCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2ZlOTczMzYwZDRhNDYxNGIyOWE5MzI5NTNhY2RlM2Quc2V0Q29udGVudChodG1sX2U5ODQ3MWFjZjQ5YjRlMGQ5MDFlMTU3MTMwMzU2MGNlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9mYjMxODIyNTE2NzQ0ZDVmODJhYTk0NzhlMDE3OTIwYy5iaW5kUG9wdXAocG9wdXBfN2ZlOTczMzYwZDRhNDYxNGIyOWE5MzI5NTNhY2RlM2QpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhZWYxZjcwMmExZTQ1YWZhNjI5NTgxN2NlMDk4YTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5MDMwOTM2NjkzNCwgLTk2LjY3OTY3ODI0NDE1MTk0XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzZhYjBhYzU0Y2E5MDQ4NzRhMjczMGZmMmU0MGQxY2MwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wNzIyZTYxZTg4ZmE0NDgzYTE2YjgwZjgzZjAzYTQ1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDcyMmU2MWU4OGZhNDQ4M2ExNmI4MGY4M2YwM2E0NWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBBc2lhbiBGdXNpb24gKEFzaWFuIFJlc3RhdXJhbnQpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZhYjBhYzU0Y2E5MDQ4NzRhMjczMGZmMmU0MGQxY2MwLnNldENvbnRlbnQoaHRtbF8wNzIyZTYxZTg4ZmE0NDgzYTE2YjgwZjgzZjAzYTQ1Zik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfOGFlZjFmNzAyYTFlNDVhZmE2Mjk1ODE3Y2UwOThhN2MuYmluZFBvcHVwKHBvcHVwXzZhYjBhYzU0Y2E5MDQ4NzRhMjczMGZmMmU0MGQxY2MwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmM5NTQ2YWFkOGI0NmNhOTczODg0MDBkZGU5ZjlmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMzgyMSwgLTk2LjY4MDUxM10sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85OWRkN2ZiNmI1MzI0NTc2OWY5NmExOGFiNDFhOWVhZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTUxNDIxZTA2ZjgwNGI3YjlmOGZjNmQ4MWQzZTQyOGUgPSAkKGA8ZGl2IGlkPSJodG1sXzE1MTQyMWUwNmY4MDRiN2I5ZjhmYzZkODFkM2U0MjhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gS29obCYjMzk7cyAoRGVwYXJ0bWVudCBTdG9yZSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTlkZDdmYjZiNTMyNDU3NjlmOTZhMThhYjQxYTllYWUuc2V0Q29udGVudChodG1sXzE1MTQyMWUwNmY4MDRiN2I5ZjhmYzZkODFkM2U0MjhlKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl8yZmM5NTQ2YWFkOGI0NmNhOTczODg0MDBkZGU5ZjlmOS5iaW5kUG9wdXAocG9wdXBfOTlkZDdmYjZiNTMyNDU3NjlmOTZhMThhYjQxYTllYWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkZmU5ZjllYTliYjRhNDE4NjJiNjVmMTY2NDgyNzc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUzMDM5ODQ1Njc2NTUsIC05Ni42MDU1MDUxODgxMDldLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODU3Mzg1ZTExNmY1NDE0MjliYTliMWFhNGNjYWZkOTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NlYzEyODdkOTFmOTQ0ZjU4ZmI2MGNkZGEyNGM1MzE2ID0gJChgPGRpdiBpZD0iaHRtbF9jZWMxMjg3ZDkxZjk0NGY1OGZiNjBjZGRhMjRjNTMxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIER1bmtpbiYjMzk7IChEb251dCBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NTczODVlMTE2ZjU0MTQyOWJhOWIxYWE0Y2NhZmQ5Mi5zZXRDb250ZW50KGh0bWxfY2VjMTI4N2Q5MWY5NDRmNThmYjYwY2RkYTI0YzUzMTYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2FkZmU5ZjllYTliYjRhNDE4NjJiNjVmMTY2NDgyNzc3LmJpbmRQb3B1cChwb3B1cF84NTczODVlMTE2ZjU0MTQyOWJhOWIxYWE0Y2NhZmQ5MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzYxODAxMzk5N2FiNDgxNmIxYTI0ODIyNWEzODkxNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE5NDMyNTI5MjgzMiwgLTk2LjcyNTQyNTkzNjA0MDM4XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjREI0NDM3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNEQjQ0MzciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzBiYzg5Nzc1NDE5NTRhZjNiMjQ0ZDc3ZjBjNTU0MTQwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83MDhjNjdmZTE2NTQ0MGVlOTA4OTUyZTViODEwOWEzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzA4YzY3ZmUxNjU0NDBlZTkwODk1MmU1YjgxMDlhM2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlsxXSBMaW5jb2xuIFJhY2UgQ291cnNlIChSYWNldHJhY2spPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzBiYzg5Nzc1NDE5NTRhZjNiMjQ0ZDc3ZjBjNTU0MTQwLnNldENvbnRlbnQoaHRtbF83MDhjNjdmZTE2NTQ0MGVlOTA4OTUyZTViODEwOWEzYyk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNzYxODAxMzk5N2FiNDgxNmIxYTI0ODIyNWEzODkxNDcuYmluZFBvcHVwKHBvcHVwXzBiYzg5Nzc1NDE5NTRhZjNiMjQ0ZDc3ZjBjNTU0MTQwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OGUxMTg0NjJmMWQ0MWVjYWMzZDQyM2JjYjJjYzI4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3OTI3MjQ4MTUxNDgyNSwgLTk2LjY4MTQxNjA0Njg0NzgzXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzdmZmQ1ZDIxNGJkZDQ0Mjc4Yzc4NWIwYjE3MTExOWJiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hMTY5NjhlYzM3ZWY0MWFjYjBlNjBhNzk3NDdjYmFmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTE2OTY4ZWMzN2VmNDFhY2IwZTYwYTc5NzQ3Y2JhZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBDcmFja2VyIEJhcnJlbCBPbGQgQ291bnRyeSBTdG9yZSAoQW1lcmljYW4gUmVzdGF1cmFudCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2ZmZDVkMjE0YmRkNDQyNzhjNzg1YjBiMTcxMTE5YmIuc2V0Q29udGVudChodG1sX2ExNjk2OGVjMzdlZjQxYWNiMGU2MGE3OTc0N2NiYWYyKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl83OGUxMTg0NjJmMWQ0MWVjYWMzZDQyM2JjYjJjYzI4MC5iaW5kUG9wdXAocG9wdXBfN2ZmZDVkMjE0YmRkNDQyNzhjNzg1YjBiMTcxMTE5YmIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4NjcxNTIwZjI0OTQ4YTk5MTY5YmFkN2VjNDI4MDE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODcwMDMyODI3MDIwODE1LCAtOTYuNzIzMTk4MzkyODE1OV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81NDY3Yzk3MWMzOGU0ZDUzOWZmY2JiNTc3MTNiZmQ4NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNmFiYzU3MmMzYzJiNDRiNmJkYzg5YzcwNzJjOTZiYWIgPSAkKGA8ZGl2IGlkPSJodG1sXzZhYmM1NzJjM2MyYjQ0YjZiZGM4OWM3MDcyYzk2YmFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gSHlsYW5kZXIgQmFyICZhbXA7IEdyaWxsIChCYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU0NjdjOTcxYzM4ZTRkNTM5ZmZjYmI1NzcxM2JmZDg3LnNldENvbnRlbnQoaHRtbF82YWJjNTcyYzNjMmI0NGI2YmRjODljNzA3MmM5NmJhYik7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYzg2NzE1MjBmMjQ5NDhhOTkxNjliYWQ3ZWM0MjgwMTUuYmluZFBvcHVwKHBvcHVwXzU0NjdjOTcxYzM4ZTRkNTM5ZmZjYmI1NzcxM2JmZDg3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YzcwNDAyMzU0ZjY0YjUwOTgyYzBmOTM5NmY5YzI5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3NzE5MTYxMzY3NTQ5LCAtOTYuNzI2OTgxODE1Mzc0NTNdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNjZTEyYzAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI2NlMTJjMCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzMzMzE2YWJiNmQ5NDBlNDk3MTMwYTliN2ZhZTg1ODUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VlOTI5MjlmNjgzYTRiMjlhZmVjMWJiOTlhZThmMGQxID0gJChgPGRpdiBpZD0iaHRtbF9lZTkyOTI5ZjY4M2E0YjI5YWZlYzFiYjk5YWU4ZjBkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzRdIFNjaGlsbGluZ0JyaWRnZSBDb3JrICZhbXA7IFRhcCBIb3VzZSAoQmVlciBHYXJkZW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzczMzMxNmFiYjZkOTQwZTQ5NzEzMGE5YjdmYWU4NTg1LnNldENvbnRlbnQoaHRtbF9lZTkyOTI5ZjY4M2E0YjI5YWZlYzFiYjk5YWU4ZjBkMSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfNGM3MDQwMjM1NGY2NGI1MDk4MmMwZjkzOTZmOWMyOWEuYmluZFBvcHVwKHBvcHVwXzczMzMxNmFiYjZkOTQwZTQ5NzEzMGE5YjdmYWU4NTg1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzlkYWI3OWI4YWM0ZjgxYTAxM2MxZjBjNTVhZTQ3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTM3MjY4NDkwNDkxLCAtOTYuNjQzMDI0MzE3NjIxNzJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4MDAwODAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzgwMDA4MCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzFiNjEwNDZmOTYxNGIwM2ExYWMzY2I1YTA0YmU0N2EgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZkNDE2YThiOGQ5MzRkYmI5MTM5ZGJhOGJlN2M2MDk2ID0gJChgPGRpdiBpZD0iaHRtbF82ZDQxNmE4YjhkOTM0ZGJiOTEzOWRiYThiZTdjNjA5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzNdIFppcGxpbmUgQmVlciBIYWxsIChCcmV3ZXJ5KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zMWI2MTA0NmY5NjE0YjAzYTFhYzNjYjVhMDRiZTQ3YS5zZXRDb250ZW50KGh0bWxfNmQ0MTZhOGI4ZDkzNGRiYjkxMzlkYmE4YmU3YzYwOTYpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzkzOWRhYjc5YjhhYzRmODFhMDEzYzFmMGM1NWFlNDc0LmJpbmRQb3B1cChwb3B1cF8zMWI2MTA0NmY5NjE0YjAzYTFhYzNjYjVhMDRiZTQ3YSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTkyMTI2OThhNzU0NDA1ZDlkNGRmMDI3YTI3ZjM1ODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Nzg0ODk2OTA0NTc0MiwgLTk2LjY4MTI0NzAzMTQ1MzQyXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjY2UxMmMwIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiNjZTEyYzAiLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2QzZWUwZjdkNzBjMDQ0OWY4MmYyMDIzOGVmNjQ1ZWQwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mYzRhNmI4ZTA2NzQ0ZGJjYWM5N2MwOGY3N2IwZTUwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmM0YTZiOGUwNjc0NGRiY2FjOTdjMDhmNzdiMGU1MDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls0XSBTdGFyIENpdHkgTW90b3IgU3BvcnRzIChNb3RvcnNwb3J0cyBTaG9wKTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kM2VlMGY3ZDcwYzA0NDlmODJmMjAyMzhlZjY0NWVkMC5zZXRDb250ZW50KGh0bWxfZmM0YTZiOGUwNjc0NGRiY2FjOTdjMDhmNzdiMGU1MDUpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyXzk5MjEyNjk4YTc1NDQwNWQ5ZDRkZjAyN2EyN2YzNTgwLmJpbmRQb3B1cChwb3B1cF9kM2VlMGY3ZDcwYzA0NDlmODJmMjAyMzhlZjY0NWVkMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTMwYjViNWUxMzAwNDU0ZWIyYWI5NDBkNTRiMThlZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTQ5OTY2OTk5OTk5OSwgLTk2Ljc3OTI5MzA5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjMTcxNzE3IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiB0cnVlLCAiZmlsbENvbG9yIjogIiMxNzE3MTciLCAiZmlsbE9wYWNpdHkiOiAwLjcsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAib3BhY2l0eSI6IDEuMCwgInJhZGl1cyI6IDUsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDYwNGU2YTUxZjViNDY5YWJiMGYxNDFkMWRhMGVkZjUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhlYzQ5NDhiN2NmNjQyZmM5OGRiMDAzNzYwZGZiOGYxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xMTk0YmQzMTA5MWE0ZmIwYTJmZjJkNjQ4NzcyOGYxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTE5NGJkMzEwOTFhNGZiMGEyZmYyZDY0ODc3MjhmMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPls1XSBGcm9udGllciBIYXJsZXktRGF2aWRzb24gKE1vdG9yY3ljbGUgU2hvcCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOGVjNDk0OGI3Y2Y2NDJmYzk4ZGIwMDM3NjBkZmI4ZjEuc2V0Q29udGVudChodG1sXzExOTRiZDMxMDkxYTRmYjBhMmZmMmQ2NDg3NzI4ZjE3KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hMzBiNWI1ZTEzMDA0NTRlYjJhYjk0MGQ1NGIxOGVlOC5iaW5kUG9wdXAocG9wdXBfOGVjNDk0OGI3Y2Y2NDJmYzk4ZGIwMDM3NjBkZmI4ZjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkNzA4NGI4NDVkMzRlYWQ5NjE0MGI4N2E0Y2JiNWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM4ODEsIC05Ni42ODAxNV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI0RCNDQzNyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjREI0NDM3IiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yZDk2ZmNmZjY3OWM0YjRlOWE5ZmJjYWUwODI2MzI3NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZWU0ZGY1NDNiNDJmNDRjOWJmODBkOTYxZTg5OGU0YTMgPSAkKGA8ZGl2IGlkPSJodG1sX2VlNGRmNTQzYjQyZjQ0YzliZjgwZDk2MWU4OThlNGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bMV0gUGVwcGVySmF4IEdyaWxsIChBbWVyaWNhbiBSZXN0YXVyYW50KTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yZDk2ZmNmZjY3OWM0YjRlOWE5ZmJjYWUwODI2MzI3Ni5zZXRDb250ZW50KGh0bWxfZWU0ZGY1NDNiNDJmNDRjOWJmODBkOTYxZTg5OGU0YTMpOwogICAgICAgIAoKICAgICAgICBjaXJjbGVfbWFya2VyX2JkNzA4NGI4NDVkMzRlYWQ5NjE0MGI4N2E0Y2JiNWIzLmJpbmRQb3B1cChwb3B1cF8yZDk2ZmNmZjY3OWM0YjRlOWE5ZmJjYWUwODI2MzI3NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzliZjI1MjkzZTFjNDZiNmJmNDQ0NjA1NGQ3NTRmMTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjM5NzM5MzYyNjQzMywgLTk2LjY4MTcwNDUyMTE3OTJdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNEQjQ0MzciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI0RCNDQzNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzg1MzUxZWFjMmQ3NDI2MmExNDM3YTA5M2Y0MmQ0NGIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZkOGQ3ZTVlODZkNzRkMzZhYWI1NGMxMGQ0YjFlZDQ1ID0gJChgPGRpdiBpZD0iaHRtbF82ZDhkN2U1ZTg2ZDc0ZDM2YWFiNTRjMTBkNGIxZWQ0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzFdIEFMREkgKEdyb2NlcnkgU3RvcmUpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M4NTM1MWVhYzJkNzQyNjJhMTQzN2EwOTNmNDJkNDRiLnNldENvbnRlbnQoaHRtbF82ZDhkN2U1ZTg2ZDc0ZDM2YWFiNTRjMTBkNGIxZWQ0NSk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfYzliZjI1MjkzZTFjNDZiNmJmNDQ0NjA1NGQ3NTRmMTUuYmluZFBvcHVwKHBvcHVwX2M4NTM1MWVhYzJkNzQyNjJhMTQzN2EwOTNmNDJkNDRiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMGE2ZWExNjk4ZmY0MmQ1YmNiM2IyZTA3NGRmNTE4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNjEwODEzNzIwMTg3LCAtOTYuNzk1MTMxMjIyNzgxOTVdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiMxNzE3MTciLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiIzE3MTcxNyIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzAyMzk0ODBmYTI1NDUxNzg3YjI0MTFhOTE3ZDMwMjggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2M4YWJhNmU3ODU2YjRmMGU4YzMwNDliN2FiMTAyMGE0ID0gJChgPGRpdiBpZD0iaHRtbF9jOGFiYTZlNzg1NmI0ZjBlOGMzMDQ5YjdhYjEwMjBhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzVdIENyZXRlIENhcnJpZXIvU2hhZmZlciBUcnVja2luZyAoQnVpbGRpbmcpPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzcwMjM5NDgwZmEyNTQ1MTc4N2IyNDExYTkxN2QzMDI4LnNldENvbnRlbnQoaHRtbF9jOGFiYTZlNzg1NmI0ZjBlOGMzMDQ5YjdhYjEwMjBhNCk7CiAgICAgICAgCgogICAgICAgIGNpcmNsZV9tYXJrZXJfMzBhNmVhMTY5OGZmNDJkNWJjYjNiMmUwNzRkZjUxODUuYmluZFBvcHVwKHBvcHVwXzcwMjM5NDgwZmEyNTQ1MTc4N2IyNDExYTkxN2QzMDI4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWQ4MDM1MjRmNDA0NTdkOWJjNTRlOTQ2Yzk0YWNiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4NzM0NzY3NzU0NTksIC05Ni42Nzg2MTcyOTg2MDMwNl0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2NlMTJjMCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogdHJ1ZSwgImZpbGxDb2xvciI6ICIjY2UxMmMwIiwgImZpbGxPcGFjaXR5IjogMC43LCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm9wYWNpdHkiOiAxLjAsICJyYWRpdXMiOiA1LCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Q2MDRlNmE1MWY1YjQ2OWFiYjBmMTQxZDFkYTBlZGY1KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81NjExMTllNTUwYzE0OGJkYTlmYjMyNWM5YWMyYzhmMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzgzM2I3MzkzNGExNDkxZTgzZDE2OThlY2Q0YzA4N2MgPSAkKGA8ZGl2IGlkPSJodG1sXzc4MzNiNzM5MzRhMTQ5MWU4M2QxNjk4ZWNkNGMwODdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5bNF0gSGFtcHRvbiBJbm4gJmFtcDsgU3VpdGVzIChIb3RlbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTYxMTE5ZTU1MGMxNDhiZGE5ZmIzMjVjOWFjMmM4ZjEuc2V0Q29udGVudChodG1sXzc4MzNiNzM5MzRhMTQ5MWU4M2QxNjk4ZWNkNGMwODdjKTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl81OWQ4MDM1MjRmNDA0NTdkOWJjNTRlOTQ2Yzk0YWNiOC5iaW5kUG9wdXAocG9wdXBfNTYxMTE5ZTU1MGMxNDhiZGE5ZmIzMjVjOWFjMmM4ZjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyMWZkMTk0NDdlZTQ5NTU5N2I2NzIwZWIxMGFlZWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc4MTQzNywgLTk2LjczNTEyMTFdLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNjZTEyYzAiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IHRydWUsICJmaWxsQ29sb3IiOiAiI2NlMTJjMCIsICJmaWxsT3BhY2l0eSI6IDAuNywgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJvcGFjaXR5IjogMS4wLCAicmFkaXVzIjogNSwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKG1hcF9kNjA0ZTZhNTFmNWI0NjlhYmIwZjE0MWQxZGEwZWRmNSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzZmMGVmOGExYjc5NDM3ODhmNjBkMjIyNjBhYTRlNzUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2E2YjQ2NjgzNjAyZTQ3NzNiNWNjMjFjNDQ1ODJlZGE0ID0gJChgPGRpdiBpZD0iaHRtbF9hNmI0NjY4MzYwMmU0NzczYjVjYzIxYzQ0NTgyZWRhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WzRdIFN1cGVyIFNhdmVyIChTdXBlcm1hcmtldCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzZmMGVmOGExYjc5NDM3ODhmNjBkMjIyNjBhYTRlNzUuc2V0Q29udGVudChodG1sX2E2YjQ2NjgzNjAyZTQ3NzNiNWNjMjFjNDQ1ODJlZGE0KTsKICAgICAgICAKCiAgICAgICAgY2lyY2xlX21hcmtlcl9hMjFmZDE5NDQ3ZWU0OTU1OTdiNjcyMGViMTBhZWVlMy5iaW5kUG9wdXAocG9wdXBfNzZmMGVmOGExYjc5NDM3ODhmNjBkMjIyNjBhYTRlNzUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x22da25e3208>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# create map with clusters\n",
    "map_clusters = folium.Map(location=[latitude, longitude], zoom_start=12)\n",
    "colors = ['#0F9D58', '#DB4437', '#4285F4', '#800080', '#ce12c0', '#171717']\n",
    "\n",
    "# add markers to the map\n",
    "for lat, lng, name, categories, cluster in zip(nearby_venues['lat'], nearby_venues['lng'], nearby_venues['name'], nearby_venues['categories'], nearby_venues['Cluster Labels']):\n",
    "    label = '[{}] {} ({})'.format(cluster, name, categories)\n",
    "    label = folium.Popup(label, parse_html=True)\n",
    "    folium.CircleMarker(\n",
    "        [lat, lng],\n",
    "        radius=5,\n",
    "        popup=label,\n",
    "        color=colors[int(cluster)],\n",
    "        fill=True,\n",
    "        fill_color=colors[int(cluster)],\n",
    "        fill_opacity=0.7).add_to(map_clusters)\n",
    "\n",
    "map_clusters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Color of Cluster 0 : Dark Green\n",
      "Venues found in Cluster 0 : 42\n",
      "---\n",
      "Color of Cluster 1 : Red\n",
      "Venues found in Cluster 1 : 42\n",
      "---\n",
      "Color of Cluster 2 : Blue\n",
      "Venues found in Cluster 2 : 67\n",
      "---\n",
      "Color of Cluster 3 : Purple\n",
      "Venues found in Cluster 3 : 48\n",
      "---\n",
      "Color of Cluster 4 : Pink\n",
      "Venues found in Cluster 4 : 21\n",
      "---\n",
      "Color of Cluster 5 : Black\n",
      "Venues found in Cluster 5 : 12\n",
      "---\n"
     ]
    }
   ],
   "source": [
    "# Show how many venues are in each cluster\n",
    "color_names = ['Dark Green', 'Red', 'Blue', 'Purple', 'Pink', 'Black']\n",
    "for x in range(0,6):\n",
    "    print(\"Color of Cluster\", x, \":\", color_names[x])\n",
    "    print(\"Venues found in Cluster\", x, \":\", nearby_venues.loc[nearby_venues['Cluster Labels'] == x, nearby_venues.columns[:]].shape[0])\n",
    "    print(\"---\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Cluster Labels</th>\n",
       "      <th>name</th>\n",
       "      <th>categories</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>Sunken Gardens</td>\n",
       "      <td>Garden</td>\n",
       "      <td>40.802319</td>\n",
       "      <td>-96.683149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>Lincoln Children's Zoo</td>\n",
       "      <td>Zoo</td>\n",
       "      <td>40.800463</td>\n",
       "      <td>-96.680036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>Honest Abe's Burgers &amp; Freedom</td>\n",
       "      <td>Burger Joint</td>\n",
       "      <td>40.814234</td>\n",
       "      <td>-96.701008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>Yia Yia's</td>\n",
       "      <td>Pizza Place</td>\n",
       "      <td>40.813599</td>\n",
       "      <td>-96.700540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>Antelope Park</td>\n",
       "      <td>Park</td>\n",
       "      <td>40.796821</td>\n",
       "      <td>-96.674826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227</th>\n",
       "      <td>1</td>\n",
       "      <td>PepperJax Grill</td>\n",
       "      <td>American Restaurant</td>\n",
       "      <td>40.738810</td>\n",
       "      <td>-96.680150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>228</th>\n",
       "      <td>1</td>\n",
       "      <td>ALDI</td>\n",
       "      <td>Grocery Store</td>\n",
       "      <td>40.723974</td>\n",
       "      <td>-96.681705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229</th>\n",
       "      <td>5</td>\n",
       "      <td>Crete Carrier/Shaffer Trucking</td>\n",
       "      <td>Building</td>\n",
       "      <td>40.816108</td>\n",
       "      <td>-96.795131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>230</th>\n",
       "      <td>4</td>\n",
       "      <td>Hampton Inn &amp; Suites</td>\n",
       "      <td>Hotel</td>\n",
       "      <td>40.887348</td>\n",
       "      <td>-96.678617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>4</td>\n",
       "      <td>Super Saver</td>\n",
       "      <td>Supermarket</td>\n",
       "      <td>40.878144</td>\n",
       "      <td>-96.735121</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>232 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Cluster Labels                            name           categories  \\\n",
       "0                 2                  Sunken Gardens               Garden   \n",
       "1                 2          Lincoln Children's Zoo                  Zoo   \n",
       "2                 2  Honest Abe's Burgers & Freedom         Burger Joint   \n",
       "3                 2                       Yia Yia's          Pizza Place   \n",
       "4                 2                   Antelope Park                 Park   \n",
       "..              ...                             ...                  ...   \n",
       "227               1                 PepperJax Grill  American Restaurant   \n",
       "228               1                            ALDI        Grocery Store   \n",
       "229               5  Crete Carrier/Shaffer Trucking             Building   \n",
       "230               4            Hampton Inn & Suites                Hotel   \n",
       "231               4                     Super Saver          Supermarket   \n",
       "\n",
       "           lat        lng  \n",
       "0    40.802319 -96.683149  \n",
       "1    40.800463 -96.680036  \n",
       "2    40.814234 -96.701008  \n",
       "3    40.813599 -96.700540  \n",
       "4    40.796821 -96.674826  \n",
       "..         ...        ...  \n",
       "227  40.738810 -96.680150  \n",
       "228  40.723974 -96.681705  \n",
       "229  40.816108 -96.795131  \n",
       "230  40.887348 -96.678617  \n",
       "231  40.878144 -96.735121  \n",
       "\n",
       "[232 rows x 5 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Reminder of what the dataframe looks like\n",
    "nearby_venues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      " Cluster 0: \n",
      "                      Cluster Labels\n",
      "categories                         \n",
      "Mexican Restaurant                6\n",
      "Chinese Restaurant                4\n",
      "Grocery Store                     4\n",
      "American Restaurant               2\n",
      "Bakery                            2\n",
      "Taco Place                        2\n",
      "\n",
      "\n",
      " Cluster 1: \n",
      "                       Cluster Labels\n",
      "categories                          \n",
      "Grocery Store                      3\n",
      "Sandwich Place                     3\n",
      "Burger Joint                       2\n",
      "Pharmacy                           2\n",
      "Mexican Restaurant                 2\n",
      "Fast Food Restaurant               2\n",
      "Coffee Shop                        2\n",
      "Chinese Restaurant                 2\n",
      "American Restaurant                2\n",
      "\n",
      "\n",
      " Cluster 2: \n",
      "                     Cluster Labels\n",
      "categories                        \n",
      "Coffee Shop                      5\n",
      "Brewery                          4\n",
      "Bar                              3\n",
      "Park                             3\n",
      "Italian Restaurant               2\n",
      "Café                             2\n",
      "Pizza Place                      2\n",
      "Sushi Restaurant                 2\n",
      "Hotel                            2\n",
      "Mexican Restaurant               2\n",
      "Beer Garden                      2\n",
      "\n",
      "\n",
      " Cluster 3: \n",
      "                          Cluster Labels\n",
      "categories                             \n",
      "Pizza Place                           4\n",
      "American Restaurant                   3\n",
      "Donut Shop                            3\n",
      "Coffee Shop                           3\n",
      "Grocery Store                         2\n",
      "Fried Chicken Joint                   2\n",
      "New American Restaurant               2\n",
      "Burger Joint                          2\n",
      "Sandwich Place                        2\n",
      "\n",
      "\n",
      " Cluster 4: \n",
      "                       Cluster Labels\n",
      "categories                          \n",
      "Hotel                              2\n",
      "Gym / Fitness Center               2\n",
      "\n",
      "\n",
      " Cluster 5: \n",
      "             Cluster Labels\n",
      "categories                \n",
      "Brewery                  2\n"
     ]
    }
   ],
   "source": [
    "# Calculate how many venues there are in each category\n",
    "# Sort from largest to smallest\n",
    "temp_df = nearby_venues.drop(columns=['name', 'lat', 'lng'])\n",
    "\n",
    "cluster0_grouped = temp_df.loc[temp_df['Cluster Labels'] == 0].groupby(['categories']).count().sort_values(by='Cluster Labels', ascending=False)\n",
    "cluster1_grouped = temp_df.loc[temp_df['Cluster Labels'] == 1].groupby(['categories']).count().sort_values(by='Cluster Labels', ascending=False)\n",
    "cluster2_grouped = temp_df.loc[temp_df['Cluster Labels'] == 2].groupby(['categories']).count().sort_values(by='Cluster Labels', ascending=False)\n",
    "cluster3_grouped = temp_df.loc[temp_df['Cluster Labels'] == 3].groupby(['categories']).count().sort_values(by='Cluster Labels', ascending=False)\n",
    "cluster4_grouped = temp_df.loc[temp_df['Cluster Labels'] == 4].groupby(['categories']).count().sort_values(by='Cluster Labels', ascending=False)\n",
    "cluster5_grouped = temp_df.loc[temp_df['Cluster Labels'] == 5].groupby(['categories']).count().sort_values(by='Cluster Labels', ascending=False)\n",
    "\n",
    "# show how many venues there are in each cluster (> 1)\n",
    "with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n",
    "    print(\"\\n\\n\", \"Cluster 0:\", \"\\n\", cluster0_grouped.loc[cluster0_grouped['Cluster Labels'] > 1])\n",
    "    print(\"\\n\\n\", \"Cluster 1:\", \"\\n\", cluster1_grouped.loc[cluster1_grouped['Cluster Labels'] > 1])\n",
    "    print(\"\\n\\n\", \"Cluster 2:\", \"\\n\", cluster2_grouped.loc[cluster2_grouped['Cluster Labels'] > 1])\n",
    "    print(\"\\n\\n\", \"Cluster 3:\", \"\\n\", cluster3_grouped.loc[cluster3_grouped['Cluster Labels'] > 1])\n",
    "    print(\"\\n\\n\", \"Cluster 4:\", \"\\n\", cluster4_grouped.loc[cluster4_grouped['Cluster Labels'] > 1])\n",
    "    print(\"\\n\\n\", \"Cluster 5:\", \"\\n\", cluster5_grouped.loc[cluster5_grouped['Cluster Labels'] > 1])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}