forked from FormerLurker/ArcWelderPlugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathversioneer.py
2005 lines (1983 loc) · 117 KB
/
versioneer.py
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
#!/usr/bin/env python
import sys, base64
from typing import NoReturn
VERSIONEER_b64 = """
CiMgVmVyc2lvbjogMC4yOQoKIiIiVGhlIFZlcnNpb25lZXIgLSBsaWtlIGEg
cm9ja2V0ZWVyLCBidXQgZm9yIHZlcnNpb25zLgoKVGhlIFZlcnNpb25lZXIK
PT09PT09PT09PT09PT0KCiogbGlrZSBhIHJvY2tldGVlciwgYnV0IGZvciB2
ZXJzaW9ucyEKKiBodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uLXZlcnNpb25l
ZXIvcHl0aG9uLXZlcnNpb25lZXIKKiBCcmlhbiBXYXJuZXIKKiBMaWNlbnNl
OiBQdWJsaWMgRG9tYWluIChVbmxpY2Vuc2UpCiogQ29tcGF0aWJsZSB3aXRo
OiBQeXRob24gMy43LCAzLjgsIDMuOSwgMy4xMCwgMy4xMSBhbmQgcHlweTMK
KiBbIVtMYXRlc3QgVmVyc2lvbl1bcHlwaS1pbWFnZV1dW3B5cGktdXJsXQoq
IFshW0J1aWxkIFN0YXR1c11bdHJhdmlzLWltYWdlXV1bdHJhdmlzLXVybF0K
ClRoaXMgaXMgYSB0b29sIGZvciBtYW5hZ2luZyBhIHJlY29yZGVkIHZlcnNp
b24gbnVtYmVyIGluIHNldHVwdG9vbHMtYmFzZWQKcHl0aG9uIHByb2plY3Rz
LiBUaGUgZ29hbCBpcyB0byByZW1vdmUgdGhlIHRlZGlvdXMgYW5kIGVycm9y
LXByb25lICJ1cGRhdGUKdGhlIGVtYmVkZGVkIHZlcnNpb24gc3RyaW5nIiBz
dGVwIGZyb20geW91ciByZWxlYXNlIHByb2Nlc3MuIE1ha2luZyBhIG5ldwpy
ZWxlYXNlIHNob3VsZCBiZSBhcyBlYXN5IGFzIHJlY29yZGluZyBhIG5ldyB0
YWcgaW4geW91ciB2ZXJzaW9uLWNvbnRyb2wKc3lzdGVtLCBhbmQgbWF5YmUg
bWFraW5nIG5ldyB0YXJiYWxscy4KCgojIyBRdWljayBJbnN0YWxsCgpWZXJz
aW9uZWVyIHByb3ZpZGVzIHR3byBpbnN0YWxsYXRpb24gbW9kZXMuIFRoZSAi
Y2xhc3NpYyIgdmVuZG9yZWQgbW9kZSBpbnN0YWxscwphIGNvcHkgb2YgdmVy
c2lvbmVlciBpbnRvIHlvdXIgcmVwb3NpdG9yeS4gVGhlIGV4cGVyaW1lbnRh
bCBidWlsZC10aW1lIGRlcGVuZGVuY3kgbW9kZQppcyBpbnRlbmRlZCB0byBh
bGxvdyB5b3UgdG8gc2tpcCB0aGlzIHN0ZXAgYW5kIHNpbXBsaWZ5IHRoZSBw
cm9jZXNzIG9mIHVwZ3JhZGluZy4KCiMjIyBWZW5kb3JlZCBtb2RlCgoqIGBw
aXAgaW5zdGFsbCB2ZXJzaW9uZWVyYCB0byBzb21ld2hlcmUgaW4geW91ciAk
UEFUSAogICAqIEEgW2NvbmRhLWZvcmdlIHJlY2lwZV0oaHR0cHM6Ly9naXRo
dWIuY29tL2NvbmRhLWZvcmdlL3ZlcnNpb25lZXItZmVlZHN0b2NrKSBpcwog
ICAgIGF2YWlsYWJsZSwgc28geW91IGNhbiBhbHNvIHVzZSBgY29uZGEgaW5z
dGFsbCAtYyBjb25kYS1mb3JnZSB2ZXJzaW9uZWVyYAoqIGFkZCBhIGBbdG9v
bC52ZXJzaW9uZWVyXWAgc2VjdGlvbiB0byB5b3VyIGBweXByb2plY3QudG9t
bGAgb3IgYQogIGBbdmVyc2lvbmVlcl1gIHNlY3Rpb24gdG8geW91ciBgc2V0
dXAuY2ZnYCAoc2VlIFtJbnN0YWxsXShJTlNUQUxMLm1kKSkKICAgKiBOb3Rl
IHRoYXQgeW91IHdpbGwgbmVlZCB0byBhZGQgYHRvbWxpOyBweXRob25fdmVy
c2lvbiA8ICIzLjExImAgdG8geW91cgogICAgIGJ1aWxkLXRpbWUgZGVwZW5k
ZW5jaWVzIGlmIHlvdSB1c2UgYHB5cHJvamVjdC50b21sYAoqIHJ1biBgdmVy
c2lvbmVlciBpbnN0YWxsIC0tdmVuZG9yYCBpbiB5b3VyIHNvdXJjZSB0cmVl
LCBjb21taXQgdGhlIHJlc3VsdHMKKiB2ZXJpZnkgdmVyc2lvbiBpbmZvcm1h
dGlvbiB3aXRoIGBweXRob24gc2V0dXAucHkgdmVyc2lvbmAKCiMjIyBCdWls
ZC10aW1lIGRlcGVuZGVuY3kgbW9kZQoKKiBgcGlwIGluc3RhbGwgdmVyc2lv
bmVlcmAgdG8gc29tZXdoZXJlIGluIHlvdXIgJFBBVEgKICAgKiBBIFtjb25k
YS1mb3JnZSByZWNpcGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jb25kYS1mb3Jn
ZS92ZXJzaW9uZWVyLWZlZWRzdG9jaykgaXMKICAgICBhdmFpbGFibGUsIHNv
IHlvdSBjYW4gYWxzbyB1c2UgYGNvbmRhIGluc3RhbGwgLWMgY29uZGEtZm9y
Z2UgdmVyc2lvbmVlcmAKKiBhZGQgYSBgW3Rvb2wudmVyc2lvbmVlcl1gIHNl
Y3Rpb24gdG8geW91ciBgcHlwcm9qZWN0LnRvbWxgIG9yIGEKICBgW3ZlcnNp
b25lZXJdYCBzZWN0aW9uIHRvIHlvdXIgYHNldHVwLmNmZ2AgKHNlZSBbSW5z
dGFsbF0oSU5TVEFMTC5tZCkpCiogYWRkIGB2ZXJzaW9uZWVyYCAod2l0aCBg
W3RvbWxdYCBleHRyYSwgaWYgY29uZmlndXJpbmcgaW4gYHB5cHJvamVjdC50
b21sYCkKICB0byB0aGUgYHJlcXVpcmVzYCBrZXkgb2YgdGhlIGBidWlsZC1z
eXN0ZW1gIHRhYmxlIGluIGBweXByb2plY3QudG9tbGA6CiAgYGBgdG9tbAog
IFtidWlsZC1zeXN0ZW1dCiAgcmVxdWlyZXMgPSBbInNldHVwdG9vbHMiLCAi
dmVyc2lvbmVlclt0b21sXSJdCiAgYnVpbGQtYmFja2VuZCA9ICJzZXR1cHRv
b2xzLmJ1aWxkX21ldGEiCiAgYGBgCiogcnVuIGB2ZXJzaW9uZWVyIGluc3Rh
bGwgLS1uby12ZW5kb3JgIGluIHlvdXIgc291cmNlIHRyZWUsIGNvbW1pdCB0
aGUgcmVzdWx0cwoqIHZlcmlmeSB2ZXJzaW9uIGluZm9ybWF0aW9uIHdpdGgg
YHB5dGhvbiBzZXR1cC5weSB2ZXJzaW9uYAoKIyMgVmVyc2lvbiBJZGVudGlm
aWVycwoKU291cmNlIHRyZWVzIGNvbWUgZnJvbSBhIHZhcmlldHkgb2YgcGxh
Y2VzOgoKKiBhIHZlcnNpb24tY29udHJvbCBzeXN0ZW0gY2hlY2tvdXQgKG1v
c3RseSB1c2VkIGJ5IGRldmVsb3BlcnMpCiogYSBuaWdodGx5IHRhcmJhbGws
IHByb2R1Y2VkIGJ5IGJ1aWxkIGF1dG9tYXRpb24KKiBhIHNuYXBzaG90IHRh
cmJhbGwsIHByb2R1Y2VkIGJ5IGEgd2ViLWJhc2VkIFZDUyBicm93c2VyLCBs
aWtlIGdpdGh1YidzCiAgInRhcmJhbGwgZnJvbSB0YWciIGZlYXR1cmUKKiBh
IHJlbGVhc2UgdGFyYmFsbCwgcHJvZHVjZWQgYnkgInNldHVwLnB5IHNkaXN0
IiwgZGlzdHJpYnV0ZWQgdGhyb3VnaCBQeVBJCgpXaXRoaW4gZWFjaCBzb3Vy
Y2UgdHJlZSwgdGhlIHZlcnNpb24gaWRlbnRpZmllciAoZWl0aGVyIGEgc3Ry
aW5nIG9yIGEgbnVtYmVyLAp0aGlzIHRvb2wgaXMgZm9ybWF0LWFnbm9zdGlj
KSBjYW4gY29tZSBmcm9tIGEgdmFyaWV0eSBvZiBwbGFjZXM6CgoqIGFzayB0
aGUgVkNTIHRvb2wgaXRzZWxmLCBlLmcuICJnaXQgZGVzY3JpYmUiIChmb3Ig
Y2hlY2tvdXRzKSwgd2hpY2gga25vd3MKICBhYm91dCByZWNlbnQgInRhZ3Mi
IGFuZCBhbiBhYnNvbHV0ZSByZXZpc2lvbi1pZAoqIHRoZSBuYW1lIG9mIHRo
ZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdGFyYmFsbCB3YXMgdW5wYWNr
ZWQKKiBhbiBleHBhbmRlZCBWQ1Mga2V5d29yZCAoJElkJCwgZXRjKQoqIGEg
YF92ZXJzaW9uLnB5YCBjcmVhdGVkIGJ5IHNvbWUgZWFybGllciBidWlsZCBz
dGVwCgpGb3IgcmVsZWFzZWQgc29mdHdhcmUsIHRoZSB2ZXJzaW9uIGlkZW50
aWZpZXIgaXMgY2xvc2VseSByZWxhdGVkIHRvIGEgVkNTCnRhZy4gU29tZSBw
cm9qZWN0cyB1c2UgdGFnIG5hbWVzIHRoYXQgaW5jbHVkZSBtb3JlIHRoYW4g
anVzdCB0aGUgdmVyc2lvbgpzdHJpbmcgKGUuZy4gIm15cHJvamVjdC0xLjIi
IGluc3RlYWQgb2YganVzdCAiMS4yIiksIGluIHdoaWNoIGNhc2UgdGhlIHRv
b2wKbmVlZHMgdG8gc3RyaXAgdGhlIHRhZyBwcmVmaXggdG8gZXh0cmFjdCB0
aGUgdmVyc2lvbiBpZGVudGlmaWVyLiBGb3IKdW5yZWxlYXNlZCBzb2Z0d2Fy
ZSAoYmV0d2VlbiB0YWdzKSwgdGhlIHZlcnNpb24gaWRlbnRpZmllciBzaG91
bGQgcHJvdmlkZQplbm91Z2ggaW5mb3JtYXRpb24gdG8gaGVscCBkZXZlbG9w
ZXJzIHJlY3JlYXRlIHRoZSBzYW1lIHRyZWUsIHdoaWxlIGFsc28KZ2l2aW5n
IHRoZW0gYW4gaWRlYSBvZiByb3VnaGx5IGhvdyBvbGQgdGhlIHRyZWUgaXMg
KGFmdGVyIHZlcnNpb24gMS4yLCBiZWZvcmUKdmVyc2lvbiAxLjMpLiBNYW55
IFZDUyBzeXN0ZW1zIGNhbiByZXBvcnQgYSBkZXNjcmlwdGlvbiB0aGF0IGNh
cHR1cmVzIHRoaXMsCmZvciBleGFtcGxlIGBnaXQgZGVzY3JpYmUgLS10YWdz
IC0tZGlydHkgLS1hbHdheXNgIHJlcG9ydHMgdGhpbmdzIGxpa2UKIjAuNy0x
LWc1NzRhYjk4LWRpcnR5IiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjaGVja291
dCBpcyBvbmUgcmV2aXNpb24gcGFzdCB0aGUKMC43IHRhZywgaGFzIGEgdW5p
cXVlIHJldmlzaW9uIGlkIG9mICI1NzRhYjk4IiwgYW5kIGlzICJkaXJ0eSIg
KGl0IGhhcwp1bmNvbW1pdHRlZCBjaGFuZ2VzKS4KClRoZSB2ZXJzaW9uIGlk
ZW50aWZpZXIgaXMgdXNlZCBmb3IgbXVsdGlwbGUgcHVycG9zZXM6CgoqIHRv
IGFsbG93IHRoZSBtb2R1bGUgdG8gc2VsZi1pZGVudGlmeSBpdHMgdmVyc2lv
bjogYG15cHJvamVjdC5fX3ZlcnNpb25fX2AKKiB0byBjaG9vc2UgYSBuYW1l
IGFuZCBwcmVmaXggZm9yIGEgJ3NldHVwLnB5IHNkaXN0JyB0YXJiYWxsCgoj
IyBUaGVvcnkgb2YgT3BlcmF0aW9uCgpWZXJzaW9uZWVyIHdvcmtzIGJ5IGFk
ZGluZyBhIHNwZWNpYWwgYF92ZXJzaW9uLnB5YCBmaWxlIGludG8geW91ciBz
b3VyY2UKdHJlZSwgd2hlcmUgeW91ciBgX19pbml0X18ucHlgIGNhbiBpbXBv
cnQgaXQuIFRoaXMgYF92ZXJzaW9uLnB5YCBrbm93cyBob3cgdG8KZHluYW1p
Y2FsbHkgYXNrIHRoZSBWQ1MgdG9vbCBmb3IgdmVyc2lvbiBpbmZvcm1hdGlv
biBhdCBpbXBvcnQgdGltZS4KCmBfdmVyc2lvbi5weWAgYWxzbyBjb250YWlu
cyBgJFJldmlzaW9uJGAgbWFya2VycywgYW5kIHRoZSBpbnN0YWxsYXRpb24K
cHJvY2VzcyBtYXJrcyBgX3ZlcnNpb24ucHlgIHRvIGhhdmUgdGhpcyBtYXJr
ZXIgcmV3cml0dGVuIHdpdGggYSB0YWcgbmFtZQpkdXJpbmcgdGhlIGBnaXQg
YXJjaGl2ZWAgY29tbWFuZC4gQXMgYSByZXN1bHQsIGdlbmVyYXRlZCB0YXJi
YWxscyB3aWxsCmNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGdldCB0
aGUgcHJvcGVyIHZlcnNpb24uCgpUbyBhbGxvdyBgc2V0dXAucHlgIHRvIGNv
bXB1dGUgYSB2ZXJzaW9uIHRvbywgYSBgdmVyc2lvbmVlci5weWAgaXMgYWRk
ZWQgdG8KdGhlIHRvcCBsZXZlbCBvZiB5b3VyIHNvdXJjZSB0cmVlLCBuZXh0
IHRvIGBzZXR1cC5weWAgYW5kIHRoZSBgc2V0dXAuY2ZnYAp0aGF0IGNvbmZp
Z3VyZXMgaXQuIFRoaXMgb3ZlcnJpZGVzIHNldmVyYWwgZGlzdHV0aWxzL3Nl
dHVwdG9vbHMgY29tbWFuZHMgdG8KY29tcHV0ZSB0aGUgdmVyc2lvbiB3aGVu
IGludm9rZWQsIGFuZCBjaGFuZ2VzIGBzZXR1cC5weSBidWlsZGAgYW5kIGBz
ZXR1cC5weQpzZGlzdGAgdG8gcmVwbGFjZSBgX3ZlcnNpb24ucHlgIHdpdGgg
YSBzbWFsbCBzdGF0aWMgZmlsZSB0aGF0IGNvbnRhaW5zIGp1c3QKdGhlIGdl
bmVyYXRlZCB2ZXJzaW9uIGRhdGEuCgojIyBJbnN0YWxsYXRpb24KClNlZSBb
SU5TVEFMTC5tZF0oLi9JTlNUQUxMLm1kKSBmb3IgZGV0YWlsZWQgaW5zdGFs
bGF0aW9uIGluc3RydWN0aW9ucy4KCiMjIFZlcnNpb24tU3RyaW5nIEZsYXZv
cnMKCkNvZGUgd2hpY2ggdXNlcyBWZXJzaW9uZWVyIGNhbiBsZWFybiBhYm91
dCBpdHMgdmVyc2lvbiBzdHJpbmcgYXQgcnVudGltZSBieQppbXBvcnRpbmcg
YF92ZXJzaW9uYCBmcm9tIHlvdXIgbWFpbiBgX19pbml0X18ucHlgIGZpbGUg
YW5kIHJ1bm5pbmcgdGhlCmBnZXRfdmVyc2lvbnMoKWAgZnVuY3Rpb24uIEZy
b20gdGhlICJvdXRzaWRlIiAoZS5nLiBpbiBgc2V0dXAucHlgKSwgeW91IGNh
bgppbXBvcnQgdGhlIHRvcC1sZXZlbCBgdmVyc2lvbmVlci5weWAgYW5kIHJ1
biBgZ2V0X3ZlcnNpb25zKClgLgoKQm90aCBmdW5jdGlvbnMgcmV0dXJuIGEg
ZGljdGlvbmFyeSB3aXRoIGRpZmZlcmVudCBmbGF2b3JzIG9mIHZlcnNpb24K
aW5mb3JtYXRpb246CgoqIGBbJ3ZlcnNpb24nXWA6IEEgY29uZGVuc2VkIHZl
cnNpb24gc3RyaW5nLCByZW5kZXJlZCB1c2luZyB0aGUgc2VsZWN0ZWQKICBz
dHlsZS4gVGhpcyBpcyB0aGUgbW9zdCBjb21tb25seSB1c2VkIHZhbHVlIGZv
ciB0aGUgcHJvamVjdCdzIHZlcnNpb24KICBzdHJpbmcuIFRoZSBkZWZhdWx0
ICJwZXA0NDAiIHN0eWxlIHlpZWxkcyBzdHJpbmdzIGxpa2UgYDAuMTFgLAog
IGAwLjExKzIuZzEwNzZjOTdgLCBvciBgMC4xMSsyLmcxMDc2Yzk3LmRpcnR5
YC4gU2VlIHRoZSAiU3R5bGVzIiBzZWN0aW9uCiAgYmVsb3cgZm9yIGFsdGVy
bmF0aXZlIHN0eWxlcy4KCiogYFsnZnVsbC1yZXZpc2lvbmlkJ11gOiBkZXRh
aWxlZCByZXZpc2lvbiBpZGVudGlmaWVyLiBGb3IgR2l0LCB0aGlzIGlzIHRo
ZQogIGZ1bGwgU0hBMSBjb21taXQgaWQsIGUuZy4gIjEwNzZjOTc4YThkM2Nm
YzcwZjQwOGZlNTk3NGFhNmMwOTJjOTQ5YWMiLgoKKiBgWydkYXRlJ11gOiBE
YXRlIGFuZCB0aW1lIG9mIHRoZSBsYXRlc3QgYEhFQURgIGNvbW1pdC4gRm9y
IEdpdCwgaXQgaXMgdGhlCiAgY29tbWl0IGRhdGUgaW4gSVNPIDg2MDEgZm9y
bWF0LiBUaGlzIHdpbGwgYmUgTm9uZSBpZiB0aGUgZGF0ZSBpcyBub3QKICBh
dmFpbGFibGUuCgoqIGBbJ2RpcnR5J11gOiBhIGJvb2xlYW4sIFRydWUgaWYg
dGhlIHRyZWUgaGFzIHVuY29tbWl0dGVkIGNoYW5nZXMuIE5vdGUgdGhhdAog
IHRoaXMgaXMgb25seSBhY2N1cmF0ZSBpZiBydW4gaW4gYSBWQ1MgY2hlY2tv
dXQsIG90aGVyd2lzZSBpdCBpcyBsaWtlbHkgdG8KICBiZSBGYWxzZSBvciBO
b25lCgoqIGBbJ2Vycm9yJ11gOiBpZiB0aGUgdmVyc2lvbiBzdHJpbmcgY291
bGQgbm90IGJlIGNvbXB1dGVkLCB0aGlzIHdpbGwgYmUgc2V0CiAgdG8gYSBz
dHJpbmcgZGVzY3JpYmluZyB0aGUgcHJvYmxlbSwgb3RoZXJ3aXNlIGl0IHdp
bGwgYmUgTm9uZS4gSXQgbWF5IGJlCiAgdXNlZnVsIHRvIHRocm93IGFuIGV4
Y2VwdGlvbiBpbiBzZXR1cC5weSBpZiB0aGlzIGlzIHNldCwgdG8gYXZvaWQg
ZS5nLgogIGNyZWF0aW5nIHRhcmJhbGxzIHdpdGggYSB2ZXJzaW9uIHN0cmlu
ZyBvZiAidW5rbm93biIuCgpTb21lIHZhcmlhbnRzIGFyZSBtb3JlIHVzZWZ1
bCB0aGFuIG90aGVycy4gSW5jbHVkaW5nIGBmdWxsLXJldmlzaW9uaWRgIGlu
IGEKYnVnIHJlcG9ydCBzaG91bGQgYWxsb3cgZGV2ZWxvcGVycyB0byByZWNv
bnN0cnVjdCB0aGUgZXhhY3QgY29kZSBiZWluZyB0ZXN0ZWQKKG9yIGluZGlj
YXRlIHRoZSBwcmVzZW5jZSBvZiBsb2NhbCBjaGFuZ2VzIHRoYXQgc2hvdWxk
IGJlIHNoYXJlZCB3aXRoIHRoZQpkZXZlbG9wZXJzKS4gYHZlcnNpb25gIGlz
IHN1aXRhYmxlIGZvciBkaXNwbGF5IGluIGFuICJhYm91dCIgYm94IG9yIGEg
Q0xJCmAtLXZlcnNpb25gIG91dHB1dDogaXQgY2FuIGJlIGVhc2lseSBjb21w
YXJlZCBhZ2FpbnN0IHJlbGVhc2Ugbm90ZXMgYW5kIGxpc3RzCm9mIGJ1Z3Mg
Zml4ZWQgaW4gdmFyaW91cyByZWxlYXNlcy4KClRoZSBpbnN0YWxsZXIgYWRk
cyB0aGUgZm9sbG93aW5nIHRleHQgdG8geW91ciBgX19pbml0X18ucHlgIHRv
IHBsYWNlIGEgYmFzaWMKdmVyc2lvbiBpbiBgWU9VUlBST0pFQ1QuX192ZXJz
aW9uX19gOgoKICAgIGZyb20gLl92ZXJzaW9uIGltcG9ydCBnZXRfdmVyc2lv
bnMKICAgIF9fdmVyc2lvbl9fID0gZ2V0X3ZlcnNpb25zKClbJ3ZlcnNpb24n
XQogICAgZGVsIGdldF92ZXJzaW9ucwoKIyMgU3R5bGVzCgpUaGUgc2V0dXAu
Y2ZnIGBzdHlsZT1gIGNvbmZpZ3VyYXRpb24gY29udHJvbHMgaG93IHRoZSBW
Q1MgaW5mb3JtYXRpb24gaXMKcmVuZGVyZWQgaW50byBhIHZlcnNpb24gc3Ry
aW5nLgoKVGhlIGRlZmF1bHQgc3R5bGUsICJwZXA0NDAiLCBwcm9kdWNlcyBh
IFBFUDQ0MC1jb21wbGlhbnQgc3RyaW5nLCBlcXVhbCB0byB0aGUKdW4tcHJl
Zml4ZWQgdGFnIG5hbWUgZm9yIGFjdHVhbCByZWxlYXNlcywgYW5kIGNvbnRh
aW5pbmcgYW4gYWRkaXRpb25hbCAibG9jYWwKdmVyc2lvbiIgc2VjdGlvbiB3
aXRoIG1vcmUgZGV0YWlsIGZvciBpbi1iZXR3ZWVuIGJ1aWxkcy4gRm9yIEdp
dCwgdGhpcyBpcwpUQUdbK0RJU1RBTkNFLmdIRVhbLmRpcnR5XV0gLCB1c2lu
ZyBpbmZvcm1hdGlvbiBmcm9tIGBnaXQgZGVzY3JpYmUgLS10YWdzCi0tZGly
dHkgLS1hbHdheXNgLiBGb3IgZXhhbXBsZSAiMC4xMSsyLmcxMDc2Yzk3LmRp
cnR5IiBpbmRpY2F0ZXMgdGhhdCB0aGUKdHJlZSBpcyBsaWtlIHRoZSAiMTA3
NmM5NyIgY29tbWl0IGJ1dCBoYXMgdW5jb21taXR0ZWQgY2hhbmdlcyAoIi5k
aXJ0eSIpLCBhbmQKdGhhdCB0aGlzIGNvbW1pdCBpcyB0d28gcmV2aXNpb25z
ICgiKzIiKSBiZXlvbmQgdGhlICIwLjExIiB0YWcuIEZvciByZWxlYXNlZApz
b2Z0d2FyZSAoZXhhY3RseSBlcXVhbCB0byBhIGtub3duIHRhZyksIHRoZSBp
ZGVudGlmaWVyIHdpbGwgb25seSBjb250YWluIHRoZQpzdHJpcHBlZCB0YWcs
IGUuZy4gIjAuMTEiLgoKT3RoZXIgc3R5bGVzIGFyZSBhdmFpbGFibGUuIFNl
ZSBbZGV0YWlscy5tZF0oZGV0YWlscy5tZCkgaW4gdGhlIFZlcnNpb25lZXIK
c291cmNlIHRyZWUgZm9yIGRlc2NyaXB0aW9ucy4KCiMjIERlYnVnZ2luZwoK
VmVyc2lvbmVlciB0cmllcyB0byBhdm9pZCBmYXRhbCBlcnJvcnM6IGlmIHNv
bWV0aGluZyBnb2VzIHdyb25nLCBpdCB3aWxsIHRlbmQKdG8gcmV0dXJuIGEg
dmVyc2lvbiBvZiAiMCt1bmtub3duIi4gVG8gaW52ZXN0aWdhdGUgdGhlIHBy
b2JsZW0sIHJ1biBgc2V0dXAucHkKdmVyc2lvbmAsIHdoaWNoIHdpbGwgcnVu
IHRoZSB2ZXJzaW9uLWxvb2t1cCBjb2RlIGluIGEgdmVyYm9zZSBtb2RlLCBh
bmQgd2lsbApkaXNwbGF5IHRoZSBmdWxsIGNvbnRlbnRzIG9mIGBnZXRfdmVy
c2lvbnMoKWAgKGluY2x1ZGluZyB0aGUgYGVycm9yYCBzdHJpbmcsCndoaWNo
IG1heSBoZWxwIGlkZW50aWZ5IHdoYXQgd2VudCB3cm9uZykuCgojIyBLbm93
biBMaW1pdGF0aW9ucwoKU29tZSBzaXR1YXRpb25zIGFyZSBrbm93biB0byBj
YXVzZSBwcm9ibGVtcyBmb3IgVmVyc2lvbmVlci4gVGhpcyBkZXRhaWxzIHRo
ZQptb3N0IHNpZ25pZmljYW50IG9uZXMuIE1vcmUgY2FuIGJlIGZvdW5kIG9u
IEdpdGh1YgpbaXNzdWVzIHBhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9weXRo
b24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlci9pc3N1ZXMpLgoKIyMj
IFN1YnByb2plY3RzCgpWZXJzaW9uZWVyIGhhcyBsaW1pdGVkIHN1cHBvcnQg
Zm9yIHNvdXJjZSB0cmVlcyBpbiB3aGljaCBgc2V0dXAucHlgIGlzIG5vdCBp
bgp0aGUgcm9vdCBkaXJlY3RvcnkgKGUuZy4gYHNldHVwLnB5YCBhbmQgYC5n
aXQvYCBhcmUgKm5vdCogc2libGluZ3MpLiBUaGUgYXJlCnR3byBjb21tb24g
cmVhc29ucyB3aHkgYHNldHVwLnB5YCBtaWdodCBub3QgYmUgaW4gdGhlIHJv
b3Q6CgoqIFNvdXJjZSB0cmVlcyB3aGljaCBjb250YWluIG11bHRpcGxlIHN1
YnByb2plY3RzLCBzdWNoIGFzCiAgW0J1aWxkYm90XShodHRwczovL2dpdGh1
Yi5jb20vYnVpbGRib3QvYnVpbGRib3QpLCB3aGljaCBjb250YWlucyBib3Ro
CiAgIm1hc3RlciIgYW5kICJzbGF2ZSIgc3VicHJvamVjdHMsIGVhY2ggd2l0
aCB0aGVpciBvd24gYHNldHVwLnB5YCwKICBgc2V0dXAuY2ZnYCwgYW5kIGB0
b3guaW5pYC4gUHJvamVjdHMgbGlrZSB0aGVzZSBwcm9kdWNlIG11bHRpcGxl
IFB5UEkKICBkaXN0cmlidXRpb25zIChhbmQgdXBsb2FkIG11bHRpcGxlIGlu
ZGVwZW5kZW50bHktaW5zdGFsbGFibGUgdGFyYmFsbHMpLgoqIFNvdXJjZSB0
cmVlcyB3aG9zZSBtYWluIHB1cnBvc2UgaXMgdG8gY29udGFpbiBhIEMgbGli
cmFyeSwgYnV0IHdoaWNoIGFsc28KICBwcm92aWRlIGJpbmRpbmdzIHRvIFB5
dGhvbiAoYW5kIHBlcmhhcHMgb3RoZXIgbGFuZ3VhZ2VzKSBpbiBzdWJkaXJl
Y3Rvcmllcy4KClZlcnNpb25lZXIgd2lsbCBsb29rIGZvciBgLmdpdGAgaW4g
cGFyZW50IGRpcmVjdG9yaWVzLCBhbmQgbW9zdCBvcGVyYXRpb25zCnNob3Vs
ZCBnZXQgdGhlIHJpZ2h0IHZlcnNpb24gc3RyaW5nLiBIb3dldmVyIGBwaXBg
IGFuZCBgc2V0dXB0b29sc2AgaGF2ZSBidWdzCmFuZCBpbXBsZW1lbnRhdGlv
biBkZXRhaWxzIHdoaWNoIGZyZXF1ZW50bHkgY2F1c2UgYHBpcCBpbnN0YWxs
IC5gIGZyb20gYQpzdWJwcm9qZWN0IGRpcmVjdG9yeSB0byBmYWlsIHRvIGZp
bmQgYSBjb3JyZWN0IHZlcnNpb24gc3RyaW5nIChzbyBpdCB1c3VhbGx5CmRl
ZmF1bHRzIHRvIGAwK3Vua25vd25gKS4KCmBwaXAgaW5zdGFsbCAtLWVkaXRh
YmxlIC5gIHNob3VsZCB3b3JrIGNvcnJlY3RseS4gYHNldHVwLnB5IGluc3Rh
bGxgIG1pZ2h0CndvcmsgdG9vLgoKUGlwLTguMS4xIGlzIGtub3duIHRvIGhh
dmUgdGhpcyBwcm9ibGVtLCBidXQgaG9wZWZ1bGx5IGl0IHdpbGwgZ2V0IGZp
eGVkIGluCnNvbWUgbGF0ZXIgdmVyc2lvbi4KCltCdWcgIzM4XShodHRwczov
L2dpdGh1Yi5jb20vcHl0aG9uLXZlcnNpb25lZXIvcHl0aG9uLXZlcnNpb25l
ZXIvaXNzdWVzLzM4KSBpcyB0cmFja2luZwp0aGlzIGlzc3VlLiBUaGUgZGlz
Y3Vzc2lvbiBpbgpbUFIgIzYxXShodHRwczovL2dpdGh1Yi5jb20vcHl0aG9u
LXZlcnNpb25lZXIvcHl0aG9uLXZlcnNpb25lZXIvcHVsbC82MSkgZGVzY3Jp
YmVzIHRoZQppc3N1ZSBmcm9tIHRoZSBWZXJzaW9uZWVyIHNpZGUgaW4gbW9y
ZSBkZXRhaWwuCltwaXAgUFIjMzE3Nl0oaHR0cHM6Ly9naXRodWIuY29tL3B5
cGEvcGlwL3B1bGwvMzE3NikgYW5kCltwaXAgUFIjMzYxNV0oaHR0cHM6Ly9n
aXRodWIuY29tL3B5cGEvcGlwL3B1bGwvMzYxNSkgY29udGFpbiB3b3JrIHRv
IGltcHJvdmUKcGlwIHRvIGxldCBWZXJzaW9uZWVyIHdvcmsgY29ycmVjdGx5
LgoKVmVyc2lvbmVlci0wLjE2IGFuZCBlYXJsaWVyIG9ubHkgbG9va2VkIGZv
ciBhIGAuZ2l0YCBkaXJlY3RvcnkgbmV4dCB0byB0aGUKYHNldHVwLmNmZ2As
IHNvIHN1YnByb2plY3RzIHdlcmUgY29tcGxldGVseSB1bnN1cHBvcnRlZCB3
aXRoIHRob3NlIHJlbGVhc2VzLgoKIyMjIEVkaXRhYmxlIGluc3RhbGxzIHdp
dGggc2V0dXB0b29scyA8PSAxOC41Cgpgc2V0dXAucHkgZGV2ZWxvcGAgYW5k
IGBwaXAgaW5zdGFsbCAtLWVkaXRhYmxlIC5gIGFsbG93IHlvdSB0byBpbnN0
YWxsIGEKcHJvamVjdCBpbnRvIGEgdmlydHVhbGVudiBvbmNlLCB0aGVuIGNv
bnRpbnVlIGVkaXRpbmcgdGhlIHNvdXJjZSBjb2RlIChhbmQKdGVzdCkgd2l0
aG91dCByZS1pbnN0YWxsaW5nIGFmdGVyIGV2ZXJ5IGNoYW5nZS4KCiJFbnRy
eS1wb2ludCBzY3JpcHRzIiAoYHNldHVwKGVudHJ5X3BvaW50cz17ImNvbnNv
bGVfc2NyaXB0cyI6IC4ufSlgKSBhcmUgYQpjb252ZW5pZW50IHdheSB0byBz
cGVjaWZ5IGV4ZWN1dGFibGUgc2NyaXB0cyB0aGF0IHNob3VsZCBiZSBpbnN0
YWxsZWQgYWxvbmcKd2l0aCB0aGUgcHl0aG9uIHBhY2thZ2UuCgpUaGVzZSBi
b3RoIHdvcmsgYXMgZXhwZWN0ZWQgd2hlbiB1c2luZyBtb2Rlcm4gc2V0dXB0
b29scy4gV2hlbiB1c2luZwpzZXR1cHRvb2xzLTE4LjUgb3IgZWFybGllciwg
aG93ZXZlciwgY2VydGFpbiBvcGVyYXRpb25zIHdpbGwgY2F1c2UKYHBrZ19y
ZXNvdXJjZXMuRGlzdHJpYnV0aW9uTm90Rm91bmRgIGVycm9ycyB3aGVuIHJ1
bm5pbmcgdGhlIGVudHJ5cG9pbnQKc2NyaXB0LCB3aGljaCBtdXN0IGJlIHJl
c29sdmVkIGJ5IHJlLWluc3RhbGxpbmcgdGhlIHBhY2thZ2UuIFRoaXMgaGFw
cGVucwp3aGVuIHRoZSBpbnN0YWxsIGhhcHBlbnMgd2l0aCBvbmUgdmVyc2lv
biwgdGhlbiB0aGUgZWdnX2luZm8gZGF0YSBpcwpyZWdlbmVyYXRlZCB3aGls
ZSBhIGRpZmZlcmVudCB2ZXJzaW9uIGlzIGNoZWNrZWQgb3V0LiBNYW55IHNl
dHVwLnB5IGNvbW1hbmRzCmNhdXNlIGVnZ19pbmZvIHRvIGJlIHJlYnVpbHQg
KGluY2x1ZGluZyBgc2Rpc3RgLCBgd2hlZWxgLCBhbmQgaW5zdGFsbGluZyBp
bnRvCmEgZGlmZmVyZW50IHZpcnR1YWxlbnYpLCBzbyB0aGlzIGNhbiBiZSBz
dXJwcmlzaW5nLgoKW0J1ZyAjODNdKGh0dHBzOi8vZ2l0aHViLmNvbS9weXRo
b24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlci9pc3N1ZXMvODMpIGRl
c2NyaWJlcwp0aGlzIG9uZSwgYnV0IHVwZ3JhZGluZyB0byBhIG5ld2VyIHZl
cnNpb24gb2Ygc2V0dXB0b29scyBzaG91bGQgcHJvYmFibHkKcmVzb2x2ZSBp
dC4KCgojIyBVcGRhdGluZyBWZXJzaW9uZWVyCgpUbyB1cGdyYWRlIHlvdXIg
cHJvamVjdCB0byBhIG5ldyByZWxlYXNlIG9mIFZlcnNpb25lZXIsIGRvIHRo
ZSBmb2xsb3dpbmc6CgoqIGluc3RhbGwgdGhlIG5ldyBWZXJzaW9uZWVyIChg
cGlwIGluc3RhbGwgLVUgdmVyc2lvbmVlcmAgb3IgZXF1aXZhbGVudCkKKiBl
ZGl0IGBzZXR1cC5jZmdgIGFuZCBgcHlwcm9qZWN0LnRvbWxgLCBpZiBuZWNl
c3NhcnksCiAgdG8gaW5jbHVkZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gc2V0
dGluZ3MgaW5kaWNhdGVkIGJ5IHRoZSByZWxlYXNlIG5vdGVzLgogIFNlZSBb
VVBHUkFESU5HXSguL1VQR1JBRElORy5tZCkgZm9yIGRldGFpbHMuCiogcmUt
cnVuIGB2ZXJzaW9uZWVyIGluc3RhbGwgLS1bbm8tXXZlbmRvcmAgaW4geW91
ciBzb3VyY2UgdHJlZSwgdG8gcmVwbGFjZQogIGBTUkMvX3ZlcnNpb24ucHlg
CiogY29tbWl0IGFueSBjaGFuZ2VkIGZpbGVzCgojIyBGdXR1cmUgRGlyZWN0
aW9ucwoKVGhpcyB0b29sIGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzaWx5
IGV4dGVuZGVkIHRvIG90aGVyIHZlcnNpb24tY29udHJvbApzeXN0ZW1zOiBh
bGwgVkNTLXNwZWNpZmljIGNvbXBvbmVudHMgYXJlIGluIHNlcGFyYXRlIGRp
cmVjdG9yaWVzIGxpa2UKc3JjL2dpdC8gLiBUaGUgdG9wLWxldmVsIGB2ZXJz
aW9uZWVyLnB5YCBzY3JpcHQgaXMgYXNzZW1ibGVkIGZyb20gdGhlc2UKY29t
cG9uZW50cyBieSBydW5uaW5nIG1ha2UtdmVyc2lvbmVlci5weSAuIEluIHRo
ZSBmdXR1cmUsIG1ha2UtdmVyc2lvbmVlci5weQp3aWxsIHRha2UgYSBWQ1Mg
bmFtZSBhcyBhbiBhcmd1bWVudCwgYW5kIHdpbGwgY29uc3RydWN0IGEgdmVy
c2lvbiBvZgpgdmVyc2lvbmVlci5weWAgdGhhdCBpcyBzcGVjaWZpYyB0byB0
aGUgZ2l2ZW4gVkNTLiBJdCBtaWdodCBhbHNvIHRha2UgdGhlCmNvbmZpZ3Vy
YXRpb24gYXJndW1lbnRzIHRoYXQgYXJlIGN1cnJlbnRseSBwcm92aWRlZCBt
YW51YWxseSBkdXJpbmcKaW5zdGFsbGF0aW9uIGJ5IGVkaXRpbmcgc2V0dXAu
cHkgLiBBbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBnbyB0aGUgb3RoZXIKZGly
ZWN0aW9uIGFuZCBpbmNsdWRlIGNvZGUgZnJvbSBhbGwgc3VwcG9ydGVkIFZD
UyBzeXN0ZW1zLCByZWR1Y2luZyB0aGUKbnVtYmVyIG9mIGludGVybWVkaWF0
ZSBzY3JpcHRzLgoKIyMgU2ltaWxhciBwcm9qZWN0cwoKKiBbc2V0dXB0b29s
c19zY21dKGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhL3NldHVwdG9vbHNfc2Nt
LykgLSBhIG5vbi12ZW5kb3JlZCBidWlsZC10aW1lCiAgZGVwZW5kZW5jeQoq
IFttaW52ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYndlc3Rvbi9taW5pdmVy
KSAtIGEgbGlnaHR3ZWlnaHQgcmVpbXBsZW1lbnRhdGlvbiBvZgogIHZlcnNp
b25lZXIKKiBbdmVyc2lvbmluZ2l0XShodHRwczovL2dpdGh1Yi5jb20vandv
ZGRlci92ZXJzaW9uaW5naXQpIC0gYSBQRVAgNTE4LWJhc2VkIHNldHVwdG9v
bHMKICBwbHVnaW4KCiMjIExpY2Vuc2UKClRvIG1ha2UgVmVyc2lvbmVlciBl
YXNpZXIgdG8gZW1iZWQsIGFsbCBpdHMgY29kZSBpcyBkZWRpY2F0ZWQgdG8g
dGhlIHB1YmxpYwpkb21haW4uIFRoZSBgX3ZlcnNpb24ucHlgIHRoYXQgaXQg
Y3JlYXRlcyBpcyBhbHNvIGluIHRoZSBwdWJsaWMgZG9tYWluLgpTcGVjaWZp
Y2FsbHksIGJvdGggYXJlIHJlbGVhc2VkIHVuZGVyIHRoZSAiVW5saWNlbnNl
IiwgYXMgZGVzY3JpYmVkIGluCmh0dHBzOi8vdW5saWNlbnNlLm9yZy8uCgpb
cHlwaS1pbWFnZV06IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS92L3Zl
cnNpb25lZXIuc3ZnCltweXBpLXVybF06IGh0dHBzOi8vcHlwaS5weXRob24u
b3JnL3B5cGkvdmVyc2lvbmVlci8KW3RyYXZpcy1pbWFnZV06Cmh0dHBzOi8v
aW1nLnNoaWVsZHMuaW8vdHJhdmlzL2NvbS9weXRob24tdmVyc2lvbmVlci9w
eXRob24tdmVyc2lvbmVlci5zdmcKW3RyYXZpcy11cmxdOiBodHRwczovL3Ry
YXZpcy1jaS5jb20vZ2l0aHViL3B5dGhvbi12ZXJzaW9uZWVyL3B5dGhvbi12
ZXJzaW9uZWVyCgoiIiIKIyBweWxpbnQ6ZGlzYWJsZT1pbnZhbGlkLW5hbWUs
aW1wb3J0LW91dHNpZGUtdG9wbGV2ZWwsbWlzc2luZy1mdW5jdGlvbi1kb2Nz
dHJpbmcKIyBweWxpbnQ6ZGlzYWJsZT1taXNzaW5nLWNsYXNzLWRvY3N0cmlu
Zyx0b28tbWFueS1icmFuY2hlcyx0b28tbWFueS1zdGF0ZW1lbnRzCiMgcHls
aW50OmRpc2FibGU9cmFpc2UtbWlzc2luZy1mcm9tLHRvby1tYW55LWxpbmVz
LHRvby1tYW55LWxvY2FscyxpbXBvcnQtZXJyb3IKIyBweWxpbnQ6ZGlzYWJs
ZT10b28tZmV3LXB1YmxpYy1tZXRob2RzLHJlZGVmaW5lZC1vdXRlci1uYW1l
LGNvbnNpZGVyLXVzaW5nLXdpdGgKIyBweWxpbnQ6ZGlzYWJsZT1hdHRyaWJ1
dGUtZGVmaW5lZC1vdXRzaWRlLWluaXQsdG9vLW1hbnktYXJndW1lbnRzCgpp
bXBvcnQgY29uZmlncGFyc2VyCmltcG9ydCBlcnJubwppbXBvcnQganNvbgpp
bXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBz
eXMKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9y
dCBBbnksIENhbGxhYmxlLCBjYXN0LCBEaWN0LCBMaXN0LCBPcHRpb25hbCwg
VHVwbGUsIFVuaW9uCmZyb20gdHlwaW5nIGltcG9ydCBOb1JldHVybgppbXBv
cnQgZnVuY3Rvb2xzCgpoYXZlX3RvbWxsaWIgPSBUcnVlCmlmIHN5cy52ZXJz
aW9uX2luZm8gPj0gKDMsIDExKToKICAgIGltcG9ydCB0b21sbGliCmVsc2U6
CiAgICB0cnk6CiAgICAgICAgaW1wb3J0IHRvbWxpIGFzIHRvbWxsaWIKICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICBoYXZlX3RvbWxsaWIgPSBG
YWxzZQoKCmNsYXNzIFZlcnNpb25lZXJDb25maWc6CiAgICAiIiJDb250YWlu
ZXIgZm9yIFZlcnNpb25lZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiIi
IgoKICAgIFZDUzogc3RyCiAgICBzdHlsZTogc3RyCiAgICB0YWdfcHJlZml4
OiBzdHIKICAgIHZlcnNpb25maWxlX3NvdXJjZTogc3RyCiAgICB2ZXJzaW9u
ZmlsZV9idWlsZDogT3B0aW9uYWxbc3RyXQogICAgcGFyZW50ZGlyX3ByZWZp
eDogT3B0aW9uYWxbc3RyXQogICAgdmVyYm9zZTogT3B0aW9uYWxbYm9vbF0K
CgpkZWYgZ2V0X3Jvb3QoKSAtPiBzdHI6CiAgICAiIiJHZXQgdGhlIHByb2pl
Y3Qgcm9vdCBkaXJlY3RvcnkuCgogICAgV2UgcmVxdWlyZSB0aGF0IGFsbCBj
b21tYW5kcyBhcmUgcnVuIGZyb20gdGhlIHByb2plY3Qgcm9vdCwgaS5lLiB0
aGUKICAgIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHNldHVwLnB5LCBzZXR1
cC5jZmcsIGFuZCB2ZXJzaW9uZWVyLnB5IC4KICAgICIiIgogICAgcm9vdCA9
IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgp
KSkKICAgIHNldHVwX3B5ID0gb3MucGF0aC5qb2luKHJvb3QsICJzZXR1cC5w
eSIpCiAgICBweXByb2plY3RfdG9tbCA9IG9zLnBhdGguam9pbihyb290LCAi
cHlwcm9qZWN0LnRvbWwiKQogICAgdmVyc2lvbmVlcl9weSA9IG9zLnBhdGgu
am9pbihyb290LCAidmVyc2lvbmVlci5weSIpCiAgICBpZiBub3QgKAogICAg
ICAgIG9zLnBhdGguZXhpc3RzKHNldHVwX3B5KQogICAgICAgIG9yIG9zLnBh
dGguZXhpc3RzKHB5cHJvamVjdF90b21sKQogICAgICAgIG9yIG9zLnBhdGgu
ZXhpc3RzKHZlcnNpb25lZXJfcHkpCiAgICApOgogICAgICAgICMgYWxsb3cg
J3B5dGhvbiBwYXRoL3RvL3NldHVwLnB5IENPTU1BTkQnCiAgICAgICAgcm9v
dCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGgu
YWJzcGF0aChzeXMuYXJndlswXSkpKQogICAgICAgIHNldHVwX3B5ID0gb3Mu
cGF0aC5qb2luKHJvb3QsICJzZXR1cC5weSIpCiAgICAgICAgcHlwcm9qZWN0
X3RvbWwgPSBvcy5wYXRoLmpvaW4ocm9vdCwgInB5cHJvamVjdC50b21sIikK
ICAgICAgICB2ZXJzaW9uZWVyX3B5ID0gb3MucGF0aC5qb2luKHJvb3QsICJ2
ZXJzaW9uZWVyLnB5IikKICAgIGlmIG5vdCAoCiAgICAgICAgb3MucGF0aC5l
eGlzdHMoc2V0dXBfcHkpCiAgICAgICAgb3Igb3MucGF0aC5leGlzdHMocHlw
cm9qZWN0X3RvbWwpCiAgICAgICAgb3Igb3MucGF0aC5leGlzdHModmVyc2lv
bmVlcl9weSkKICAgICk6CiAgICAgICAgZXJyID0gKCJWZXJzaW9uZWVyIHdh
cyB1bmFibGUgdG8gcnVuIHRoZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5LiAi
CiAgICAgICAgICAgICAgICJWZXJzaW9uZWVyIHJlcXVpcmVzIHNldHVwLnB5
IHRvIGJlIGV4ZWN1dGVkIGZyb20gIgogICAgICAgICAgICAgICAiaXRzIGlt
bWVkaWF0ZSBkaXJlY3RvcnkgKGxpa2UgJ3B5dGhvbiBzZXR1cC5weSBDT01N
QU5EJyksICIKICAgICAgICAgICAgICAgIm9yIGluIGEgd2F5IHRoYXQgbGV0
cyBpdCB1c2Ugc3lzLmFyZ3ZbMF0gdG8gZmluZCB0aGUgcm9vdCAiCiAgICAg
ICAgICAgICAgICIobGlrZSAncHl0aG9uIHBhdGgvdG8vc2V0dXAucHkgQ09N
TUFORCcpLiIpCiAgICAgICAgcmFpc2UgVmVyc2lvbmVlckJhZFJvb3RFcnJv
cihlcnIpCiAgICB0cnk6CiAgICAgICAgIyBDZXJ0YWluIHJ1bnRpbWUgd29y
a2Zsb3dzIChzZXR1cC5weSBpbnN0YWxsL2RldmVsb3AgaW4gYSBzZXR1cHRv
b2xzCiAgICAgICAgIyB0cmVlKSBleGVjdXRlIGFsbCBkZXBlbmRlbmNpZXMg
aW4gYSBzaW5nbGUgcHl0aG9uIHByb2Nlc3MsIHNvCiAgICAgICAgIyAidmVy
c2lvbmVlciIgbWF5IGJlIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzLCBhbmQg
cHl0aG9uJ3Mgc2hhcmVkCiAgICAgICAgIyBtb2R1bGUtaW1wb3J0IHRhYmxl
IHdpbGwgY2FjaGUgdGhlIGZpcnN0IG9uZS4gU28gd2UgY2FuJ3QgdXNlCiAg
ICAgICAgIyBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBhcyB0aGF0IHdp
bGwgZmluZCB3aGljaGV2ZXIKICAgICAgICAjIHZlcnNpb25lZXIucHkgd2Fz
IGZpcnN0IGltcG9ydGVkLCBldmVuIGluIGxhdGVyIHByb2plY3RzLgogICAg
ICAgIG15X3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguYWJzcGF0
aChfX2ZpbGVfXykpCiAgICAgICAgbWVfZGlyID0gb3MucGF0aC5ub3JtY2Fz
ZShvcy5wYXRoLnNwbGl0ZXh0KG15X3BhdGgpWzBdKQogICAgICAgIHZzcl9k
aXIgPSBvcy5wYXRoLm5vcm1jYXNlKG9zLnBhdGguc3BsaXRleHQodmVyc2lv
bmVlcl9weSlbMF0pCiAgICAgICAgaWYgbWVfZGlyICE9IHZzcl9kaXIgYW5k
ICJWRVJTSU9ORUVSX1BFUDUxOCIgbm90IGluIGdsb2JhbHMoKToKICAgICAg
ICAgICAgcHJpbnQoIldhcm5pbmc6IGJ1aWxkIGluICVzIGlzIHVzaW5nIHZl
cnNpb25lZXIucHkgZnJvbSAlcyIKICAgICAgICAgICAgICAgICAgJSAob3Mu
cGF0aC5kaXJuYW1lKG15X3BhdGgpLCB2ZXJzaW9uZWVyX3B5KSkKICAgIGV4
Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIHJvb3QK
CgpkZWYgZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9vdDogc3RyKSAtPiBWZXJz
aW9uZWVyQ29uZmlnOgogICAgIiIiUmVhZCB0aGUgcHJvamVjdCBzZXR1cC5j
ZmcgZmlsZSB0byBkZXRlcm1pbmUgVmVyc2lvbmVlciBjb25maWcuIiIiCiAg
ICAjIFRoaXMgbWlnaHQgcmFpc2UgT1NFcnJvciAoaWYgc2V0dXAuY2ZnIGlz
IG1pc3NpbmcpLCBvcgogICAgIyBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJy
b3IgKGlmIGl0IGxhY2tzIGEgW3ZlcnNpb25lZXJdIHNlY3Rpb24pLCBvcgog
ICAgIyBjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvciAoaWYgaXQgbGFja3Mg
IlZDUz0iKS4gU2VlIHRoZSBkb2NzdHJpbmcgYXQKICAgICMgdGhlIHRvcCBv
ZiB2ZXJzaW9uZWVyLnB5IGZvciBpbnN0cnVjdGlvbnMgb24gd3JpdGluZyB5
b3VyIHNldHVwLmNmZyAuCiAgICByb290X3B0aCA9IFBhdGgocm9vdCkKICAg
IHB5cHJvamVjdF90b21sID0gcm9vdF9wdGggLyAicHlwcm9qZWN0LnRvbWwi
CiAgICBzZXR1cF9jZmcgPSByb290X3B0aCAvICJzZXR1cC5jZmciCiAgICBz
ZWN0aW9uOiBVbmlvbltEaWN0W3N0ciwgQW55XSwgY29uZmlncGFyc2VyLlNl
Y3Rpb25Qcm94eSwgTm9uZV0gPSBOb25lCiAgICBpZiBweXByb2plY3RfdG9t
bC5leGlzdHMoKSBhbmQgaGF2ZV90b21sbGliOgogICAgICAgIHRyeToKICAg
ICAgICAgICAgd2l0aCBvcGVuKHB5cHJvamVjdF90b21sLCAncmInKSBhcyBm
b2JqOgogICAgICAgICAgICAgICAgcHAgPSB0b21sbGliLmxvYWQoZm9iaikK
ICAgICAgICAgICAgc2VjdGlvbiA9IHBwWyd0b29sJ11bJ3ZlcnNpb25lZXIn
XQogICAgICAgIGV4Y2VwdCAodG9tbGxpYi5UT01MRGVjb2RlRXJyb3IsIEtl
eUVycm9yKSBhcyBlOgogICAgICAgICAgICBwcmludChmIkZhaWxlZCB0byBs
b2FkIGNvbmZpZyBmcm9tIHtweXByb2plY3RfdG9tbH06IHtlfSIpCiAgICAg
ICAgICAgIHByaW50KCJUcnkgdG8gbG9hZCBpdCBmcm9tIHNldHVwLmNmZyIp
CiAgICBpZiBub3Qgc2VjdGlvbjoKICAgICAgICBwYXJzZXIgPSBjb25maWdw
YXJzZXIuQ29uZmlnUGFyc2VyKCkKICAgICAgICB3aXRoIG9wZW4oc2V0dXBf
Y2ZnKSBhcyBjZmdfZmlsZToKICAgICAgICAgICAgcGFyc2VyLnJlYWRfZmls
ZShjZmdfZmlsZSkKICAgICAgICBwYXJzZXIuZ2V0KCJ2ZXJzaW9uZWVyIiwg
IlZDUyIpICAjIHJhaXNlIGVycm9yIGlmIG1pc3NpbmcKCiAgICAgICAgc2Vj
dGlvbiA9IHBhcnNlclsidmVyc2lvbmVlciJdCgogICAgIyBgY2FzdGBgIHJl
YWxseSBzaG91bGRuJ3QgYmUgdXNlZCwgYnV0IGl0cyBzaW1wbGVzdCBmb3Ig
dGhlCiAgICAjIGNvbW1vbiBWZXJzaW9uZWVyQ29uZmlnIHVzZXJzIGF0IHRo
ZSBtb21lbnQuIFdlIHZlcmlmeSBhZ2FpbnN0CiAgICAjIGBOb25lYCB2YWx1
ZXMgZWxzZXdoZXJlIHdoZXJlIGl0IG1hdHRlcnMKCiAgICBjZmcgPSBWZXJz
aW9uZWVyQ29uZmlnKCkKICAgIGNmZy5WQ1MgPSBzZWN0aW9uWydWQ1MnXQog
ICAgY2ZnLnN0eWxlID0gc2VjdGlvbi5nZXQoInN0eWxlIiwgIiIpCiAgICBj
ZmcudmVyc2lvbmZpbGVfc291cmNlID0gY2FzdChzdHIsIHNlY3Rpb24uZ2V0
KCJ2ZXJzaW9uZmlsZV9zb3VyY2UiKSkKICAgIGNmZy52ZXJzaW9uZmlsZV9i
dWlsZCA9IHNlY3Rpb24uZ2V0KCJ2ZXJzaW9uZmlsZV9idWlsZCIpCiAgICBj
ZmcudGFnX3ByZWZpeCA9IGNhc3Qoc3RyLCBzZWN0aW9uLmdldCgidGFnX3By
ZWZpeCIpKQogICAgaWYgY2ZnLnRhZ19wcmVmaXggaW4gKCInJyIsICciIics
IE5vbmUpOgogICAgICAgIGNmZy50YWdfcHJlZml4ID0gIiIKICAgIGNmZy5w
YXJlbnRkaXJfcHJlZml4ID0gc2VjdGlvbi5nZXQoInBhcmVudGRpcl9wcmVm
aXgiKQogICAgaWYgaXNpbnN0YW5jZShzZWN0aW9uLCBjb25maWdwYXJzZXIu
U2VjdGlvblByb3h5KToKICAgICAgICAjIE1ha2Ugc3VyZSBjb25maWdwYXJz
ZXIgdHJhbnNsYXRlcyB0byBib29sCiAgICAgICAgY2ZnLnZlcmJvc2UgPSBz
ZWN0aW9uLmdldGJvb2xlYW4oInZlcmJvc2UiKQogICAgZWxzZToKICAgICAg
ICBjZmcudmVyYm9zZSA9IHNlY3Rpb24uZ2V0KCJ2ZXJib3NlIikKCiAgICBy
ZXR1cm4gY2ZnCgoKY2xhc3MgTm90VGhpc01ldGhvZChFeGNlcHRpb24pOgog
ICAgIiIiRXhjZXB0aW9uIHJhaXNlZCBpZiBhIG1ldGhvZCBpcyBub3QgdmFs
aWQgZm9yIHRoZSBjdXJyZW50IHNjZW5hcmlvLiIiIgoKCiMgdGhlc2UgZGlj
dGlvbmFyaWVzIGNvbnRhaW4gVkNTLXNwZWNpZmljIHRvb2xzCkxPTkdfVkVS
U0lPTl9QWTogRGljdFtzdHIsIHN0cl0gPSB7fQpIQU5ETEVSUzogRGljdFtz
dHIsIERpY3Rbc3RyLCBDYWxsYWJsZV1dID0ge30KCgpkZWYgcmVnaXN0ZXJf
dmNzX2hhbmRsZXIodmNzOiBzdHIsIG1ldGhvZDogc3RyKSAtPiBDYWxsYWJs
ZTogICMgZGVjb3JhdG9yCiAgICAiIiJDcmVhdGUgZGVjb3JhdG9yIHRvIG1h
cmsgYSBtZXRob2QgYXMgdGhlIGhhbmRsZXIgb2YgYSBWQ1MuIiIiCiAgICBk
ZWYgZGVjb3JhdGUoZjogQ2FsbGFibGUpIC0+IENhbGxhYmxlOgogICAgICAg
ICIiIlN0b3JlIGYgaW4gSEFORExFUlNbdmNzXVttZXRob2RdLiIiIgogICAg
ICAgIEhBTkRMRVJTLnNldGRlZmF1bHQodmNzLCB7fSlbbWV0aG9kXSA9IGYK
ICAgICAgICByZXR1cm4gZgogICAgcmV0dXJuIGRlY29yYXRlCgoKZGVmIHJ1
bl9jb21tYW5kKAogICAgY29tbWFuZHM6IExpc3Rbc3RyXSwKICAgIGFyZ3M6
IExpc3Rbc3RyXSwKICAgIGN3ZDogT3B0aW9uYWxbc3RyXSA9IE5vbmUsCiAg
ICB2ZXJib3NlOiBib29sID0gRmFsc2UsCiAgICBoaWRlX3N0ZGVycjogYm9v
bCA9IEZhbHNlLAogICAgZW52OiBPcHRpb25hbFtEaWN0W3N0ciwgc3RyXV0g
PSBOb25lLAopIC0+IFR1cGxlW09wdGlvbmFsW3N0cl0sIE9wdGlvbmFsW2lu
dF1dOgogICAgIiIiQ2FsbCB0aGUgZ2l2ZW4gY29tbWFuZChzKS4iIiIKICAg
IGFzc2VydCBpc2luc3RhbmNlKGNvbW1hbmRzLCBsaXN0KQogICAgcHJvY2Vz
cyA9IE5vbmUKCiAgICBwb3Blbl9rd2FyZ3M6IERpY3Rbc3RyLCBBbnldID0g
e30KICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgogICAgICAgICMg
VGhpcyBoaWRlcyB0aGUgY29uc29sZSB3aW5kb3cgaWYgcHl0aG9udy5leGUg
aXMgdXNlZAogICAgICAgIHN0YXJ0dXBpbmZvID0gc3VicHJvY2Vzcy5TVEFS
VFVQSU5GTygpCiAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBzdWJw
cm9jZXNzLlNUQVJURl9VU0VTSE9XV0lORE9XCiAgICAgICAgcG9wZW5fa3dh
cmdzWyJzdGFydHVwaW5mbyJdID0gc3RhcnR1cGluZm8KCiAgICBmb3IgY29t
bWFuZCBpbiBjb21tYW5kczoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRp
c3BjbWQgPSBzdHIoW2NvbW1hbmRdICsgYXJncykKICAgICAgICAgICAgIyBy
ZW1lbWJlciBzaGVsbD1GYWxzZSwgc28gdXNlIGdpdC5jbWQgb24gd2luZG93
cywgbm90IGp1c3QgZ2l0CiAgICAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9j
ZXNzLlBvcGVuKFtjb21tYW5kXSArIGFyZ3MsIGN3ZD1jd2QsIGVudj1lbnYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj0oc3VicHJvY2Vzcy5QSVBFIGlmIGhpZGVf
c3RkZXJyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBOb25lKSwgKipwb3Blbl9rd2FyZ3MpCiAgICAgICAg
ICAgIGJyZWFrCiAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAg
ICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAg
ICAgICBjb250aW51ZQogICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAg
ICAgICAgICAgcHJpbnQoInVuYWJsZSB0byBydW4gJXMiICUgZGlzcGNtZCkK
ICAgICAgICAgICAgICAgIHByaW50KGUpCiAgICAgICAgICAgIHJldHVybiBO
b25lLCBOb25lCiAgICBlbHNlOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAg
ICAgICAgIHByaW50KCJ1bmFibGUgdG8gZmluZCBjb21tYW5kLCB0cmllZCAl
cyIgJSAoY29tbWFuZHMsKSkKICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQog
ICAgc3Rkb3V0ID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCku
ZGVjb2RlKCkKICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZSAhPSAwOgogICAg
ICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8g
cnVuICVzIChlcnJvcikiICUgZGlzcGNtZCkKICAgICAgICAgICAgcHJpbnQo
InN0ZG91dCB3YXMgJXMiICUgc3Rkb3V0KQogICAgICAgIHJldHVybiBOb25l
LCBwcm9jZXNzLnJldHVybmNvZGUKICAgIHJldHVybiBzdGRvdXQsIHByb2Nl
c3MucmV0dXJuY29kZQoKCkxPTkdfVkVSU0lPTl9QWVsnZ2l0J10gPSByJycn
CiMgVGhpcyBmaWxlIGhlbHBzIHRvIGNvbXB1dGUgYSB2ZXJzaW9uIG51bWJl
ciBpbiBzb3VyY2UgdHJlZXMgb2J0YWluZWQgZnJvbQojIGdpdC1hcmNoaXZl
IHRhcmJhbGwgKHN1Y2ggYXMgdGhvc2UgcHJvdmlkZWQgYnkgZ2l0aHVicyBk
b3dubG9hZC1mcm9tLXRhZwojIGZlYXR1cmUpLiBEaXN0cmlidXRpb24gdGFy
YmFsbHMgKGJ1aWx0IGJ5IHNldHVwLnB5IHNkaXN0KSBhbmQgYnVpbGQKIyBk
aXJlY3RvcmllcyAocHJvZHVjZWQgYnkgc2V0dXAucHkgYnVpbGQpIHdpbGwg
Y29udGFpbiBhIG11Y2ggc2hvcnRlciBmaWxlCiMgdGhhdCBqdXN0IGNvbnRh
aW5zIHRoZSBjb21wdXRlZCB2ZXJzaW9uIG51bWJlci4KCiMgVGhpcyBmaWxl
IGlzIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uCiMgR2VuZXJh
dGVkIGJ5IHZlcnNpb25lZXItMC4yOQojIGh0dHBzOi8vZ2l0aHViLmNvbS9w
eXRob24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlcgoKIiIiR2l0IGlt
cGxlbWVudGF0aW9uIG9mIF92ZXJzaW9uLnB5LiIiIgoKaW1wb3J0IGVycm5v
CmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0
IHN5cwpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBDYWxsYWJsZSwgRGljdCwg
TGlzdCwgT3B0aW9uYWwsIFR1cGxlCmltcG9ydCBmdW5jdG9vbHMKCgpkZWYg
Z2V0X2tleXdvcmRzKCkgLT4gRGljdFtzdHIsIHN0cl06CiAgICAiIiJHZXQg
dGhlIGtleXdvcmRzIG5lZWRlZCB0byBsb29rIHVwIHRoZSB2ZXJzaW9uIGlu
Zm9ybWF0aW9uLiIiIgogICAgIyB0aGVzZSBzdHJpbmdzIHdpbGwgYmUgcmVw
bGFjZWQgYnkgZ2l0IGR1cmluZyBnaXQtYXJjaGl2ZS4KICAgICMgc2V0dXAu
cHkvdmVyc2lvbmVlci5weSB3aWxsIGdyZXAgZm9yIHRoZSB2YXJpYWJsZSBu
YW1lcywgc28gdGhleSBtdXN0CiAgICAjIGVhY2ggYmUgZGVmaW5lZCBvbiBh
IGxpbmUgb2YgdGhlaXIgb3duLiBfdmVyc2lvbi5weSB3aWxsIGp1c3QgY2Fs
bAogICAgIyBnZXRfa2V5d29yZHMoKS4KICAgIGdpdF9yZWZuYW1lcyA9ICIl
KERPTExBUilzRm9ybWF0OiUlZCUoRE9MTEFSKXMiCiAgICBnaXRfZnVsbCA9
ICIlKERPTExBUilzRm9ybWF0OiUlSCUoRE9MTEFSKXMiCiAgICBnaXRfZGF0
ZSA9ICIlKERPTExBUilzRm9ybWF0OiUlY2klKERPTExBUilzIgogICAga2V5
d29yZHMgPSB7InJlZm5hbWVzIjogZ2l0X3JlZm5hbWVzLCAiZnVsbCI6IGdp
dF9mdWxsLCAiZGF0ZSI6IGdpdF9kYXRlfQogICAgcmV0dXJuIGtleXdvcmRz
CgoKY2xhc3MgVmVyc2lvbmVlckNvbmZpZzoKICAgICIiIkNvbnRhaW5lciBm
b3IgVmVyc2lvbmVlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIiIiCgog
ICAgVkNTOiBzdHIKICAgIHN0eWxlOiBzdHIKICAgIHRhZ19wcmVmaXg6IHN0
cgogICAgcGFyZW50ZGlyX3ByZWZpeDogc3RyCiAgICB2ZXJzaW9uZmlsZV9z
b3VyY2U6IHN0cgogICAgdmVyYm9zZTogYm9vbAoKCmRlZiBnZXRfY29uZmln
KCkgLT4gVmVyc2lvbmVlckNvbmZpZzoKICAgICIiIkNyZWF0ZSwgcG9wdWxh
dGUgYW5kIHJldHVybiB0aGUgVmVyc2lvbmVlckNvbmZpZygpIG9iamVjdC4i
IiIKICAgICMgdGhlc2Ugc3RyaW5ncyBhcmUgZmlsbGVkIGluIHdoZW4gJ3Nl
dHVwLnB5IHZlcnNpb25lZXInIGNyZWF0ZXMKICAgICMgX3ZlcnNpb24ucHkK
ICAgIGNmZyA9IFZlcnNpb25lZXJDb25maWcoKQogICAgY2ZnLlZDUyA9ICJn
aXQiCiAgICBjZmcuc3R5bGUgPSAiJShTVFlMRSlzIgogICAgY2ZnLnRhZ19w
cmVmaXggPSAiJShUQUdfUFJFRklYKXMiCiAgICBjZmcucGFyZW50ZGlyX3By
ZWZpeCA9ICIlKFBBUkVOVERJUl9QUkVGSVgpcyIKICAgIGNmZy52ZXJzaW9u
ZmlsZV9zb3VyY2UgPSAiJShWRVJTSU9ORklMRV9TT1VSQ0UpcyIKICAgIGNm
Zy52ZXJib3NlID0gRmFsc2UKICAgIHJldHVybiBjZmcKCgpjbGFzcyBOb3RU
aGlzTWV0aG9kKEV4Y2VwdGlvbik6CiAgICAiIiJFeGNlcHRpb24gcmFpc2Vk
IGlmIGEgbWV0aG9kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgc2Nl
bmFyaW8uIiIiCgoKTE9OR19WRVJTSU9OX1BZOiBEaWN0W3N0ciwgc3RyXSA9
IHt9CkhBTkRMRVJTOiBEaWN0W3N0ciwgRGljdFtzdHIsIENhbGxhYmxlXV0g
PSB7fQoKCmRlZiByZWdpc3Rlcl92Y3NfaGFuZGxlcih2Y3M6IHN0ciwgbWV0
aG9kOiBzdHIpIC0+IENhbGxhYmxlOiAgIyBkZWNvcmF0b3IKICAgICIiIkNy
ZWF0ZSBkZWNvcmF0b3IgdG8gbWFyayBhIG1ldGhvZCBhcyB0aGUgaGFuZGxl
ciBvZiBhIFZDUy4iIiIKICAgIGRlZiBkZWNvcmF0ZShmOiBDYWxsYWJsZSkg
LT4gQ2FsbGFibGU6CiAgICAgICAgIiIiU3RvcmUgZiBpbiBIQU5ETEVSU1t2
Y3NdW21ldGhvZF0uIiIiCiAgICAgICAgaWYgdmNzIG5vdCBpbiBIQU5ETEVS
UzoKICAgICAgICAgICAgSEFORExFUlNbdmNzXSA9IHt9CiAgICAgICAgSEFO
RExFUlNbdmNzXVttZXRob2RdID0gZgogICAgICAgIHJldHVybiBmCiAgICBy
ZXR1cm4gZGVjb3JhdGUKCgpkZWYgcnVuX2NvbW1hbmQoCiAgICBjb21tYW5k
czogTGlzdFtzdHJdLAogICAgYXJnczogTGlzdFtzdHJdLAogICAgY3dkOiBP
cHRpb25hbFtzdHJdID0gTm9uZSwKICAgIHZlcmJvc2U6IGJvb2wgPSBGYWxz
ZSwKICAgIGhpZGVfc3RkZXJyOiBib29sID0gRmFsc2UsCiAgICBlbnY6IE9w
dGlvbmFsW0RpY3Rbc3RyLCBzdHJdXSA9IE5vbmUsCikgLT4gVHVwbGVbT3B0
aW9uYWxbc3RyXSwgT3B0aW9uYWxbaW50XV06CiAgICAiIiJDYWxsIHRoZSBn
aXZlbiBjb21tYW5kKHMpLiIiIgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29t
bWFuZHMsIGxpc3QpCiAgICBwcm9jZXNzID0gTm9uZQoKICAgIHBvcGVuX2t3
YXJnczogRGljdFtzdHIsIEFueV0gPSB7fQogICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICJ3aW4zMiI6CiAgICAgICAgIyBUaGlzIGhpZGVzIHRoZSBjb25zb2xl
IHdpbmRvdyBpZiBweXRob253LmV4ZSBpcyB1c2VkCiAgICAgICAgc3RhcnR1
cGluZm8gPSBzdWJwcm9jZXNzLlNUQVJUVVBJTkZPKCkKICAgICAgICBzdGFy
dHVwaW5mby5kd0ZsYWdzIHw9IHN1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dX
SU5ET1cKICAgICAgICBwb3Blbl9rd2FyZ3NbInN0YXJ0dXBpbmZvIl0gPSBz
dGFydHVwaW5mbwoKICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAg
ICAgIHRyeToKICAgICAgICAgICAgZGlzcGNtZCA9IHN0cihbY29tbWFuZF0g
KyBhcmdzKQogICAgICAgICAgICAjIHJlbWVtYmVyIHNoZWxsPUZhbHNlLCBz
byB1c2UgZ2l0LmNtZCBvbiB3aW5kb3dzLCBub3QganVzdCBnaXQKICAgICAg
ICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW2NvbW1hbmRdICsg
YXJncywgY3dkPWN3ZCwgZW52PWVudiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPShz
dWJwcm9jZXNzLlBJUEUgaWYgaGlkZV9zdGRlcnIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIE5vbmUpLCAq
KnBvcGVuX2t3YXJncykKICAgICAgICAgICAgYnJlYWsKICAgICAgICBleGNl
cHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICBpZiBlLmVycm5vID09IGVy
cm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAg
ICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgidW5hYmxl
IHRvIHJ1biAlJXMiICUlIGRpc3BjbWQpCiAgICAgICAgICAgICAgICBwcmlu
dChlKQogICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgZWxzZToK
ICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCgidW5hYmxl
IHRvIGZpbmQgY29tbWFuZCwgdHJpZWQgJSVzIiAlJSAoY29tbWFuZHMsKSkK
ICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgc3Rkb3V0ID0gcHJvY2Vz
cy5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkuZGVjb2RlKCkKICAgIGlmIHBy
b2Nlc3MucmV0dXJuY29kZSAhPSAwOgogICAgICAgIGlmIHZlcmJvc2U6CiAg
ICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8gcnVuICUlcyAoZXJyb3IpIiAl
JSBkaXNwY21kKQogICAgICAgICAgICBwcmludCgic3Rkb3V0IHdhcyAlJXMi
ICUlIHN0ZG91dCkKICAgICAgICByZXR1cm4gTm9uZSwgcHJvY2Vzcy5yZXR1
cm5jb2RlCiAgICByZXR1cm4gc3Rkb3V0LCBwcm9jZXNzLnJldHVybmNvZGUK
CgpkZWYgdmVyc2lvbnNfZnJvbV9wYXJlbnRkaXIoCiAgICBwYXJlbnRkaXJf
cHJlZml4OiBzdHIsCiAgICByb290OiBzdHIsCiAgICB2ZXJib3NlOiBib29s
LAopIC0+IERpY3Rbc3RyLCBBbnldOgogICAgIiIiVHJ5IHRvIGRldGVybWlu
ZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG5hbWUu
CgogICAgU291cmNlIHRhcmJhbGxzIGNvbnZlbnRpb25hbGx5IHVucGFjayBp
bnRvIGEgZGlyZWN0b3J5IHRoYXQgaW5jbHVkZXMgYm90aAogICAgdGhlIHBy
b2plY3QgbmFtZSBhbmQgYSB2ZXJzaW9uIHN0cmluZy4gV2Ugd2lsbCBhbHNv
IHN1cHBvcnQgc2VhcmNoaW5nIHVwCiAgICB0d28gZGlyZWN0b3J5IGxldmVs
cyBmb3IgYW4gYXBwcm9wcmlhdGVseSBuYW1lZCBwYXJlbnQgZGlyZWN0b3J5
CiAgICAiIiIKICAgIHJvb3RkaXJzID0gW10KCiAgICBmb3IgXyBpbiByYW5n
ZSgzKToKICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5iYXNlbmFtZShyb290
KQogICAgICAgIGlmIGRpcm5hbWUuc3RhcnRzd2l0aChwYXJlbnRkaXJfcHJl
Zml4KToKICAgICAgICAgICAgcmV0dXJuIHsidmVyc2lvbiI6IGRpcm5hbWVb
bGVuKHBhcmVudGRpcl9wcmVmaXgpOl0sCiAgICAgICAgICAgICAgICAgICAg
ImZ1bGwtcmV2aXNpb25pZCI6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAg
ImRpcnR5IjogRmFsc2UsICJlcnJvciI6IE5vbmUsICJkYXRlIjogTm9uZX0K
ICAgICAgICByb290ZGlycy5hcHBlbmQocm9vdCkKICAgICAgICByb290ID0g
b3MucGF0aC5kaXJuYW1lKHJvb3QpICAjIHVwIGEgbGV2ZWwKCiAgICBpZiB2
ZXJib3NlOgogICAgICAgIHByaW50KCJUcmllZCBkaXJlY3RvcmllcyAlJXMg
YnV0IG5vbmUgc3RhcnRlZCB3aXRoIHByZWZpeCAlJXMiICUlCiAgICAgICAg
ICAgICAgKHN0cihyb290ZGlycyksIHBhcmVudGRpcl9wcmVmaXgpKQogICAg
cmFpc2UgTm90VGhpc01ldGhvZCgicm9vdGRpciBkb2Vzbid0IHN0YXJ0IHdp
dGggcGFyZW50ZGlyX3ByZWZpeCIpCgoKQHJlZ2lzdGVyX3Zjc19oYW5kbGVy
KCJnaXQiLCAiZ2V0X2tleXdvcmRzIikKZGVmIGdpdF9nZXRfa2V5d29yZHMo
dmVyc2lvbmZpbGVfYWJzOiBzdHIpIC0+IERpY3Rbc3RyLCBzdHJdOgogICAg
IiIiRXh0cmFjdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVu
IGZpbGUuIiIiCiAgICAjIHRoZSBjb2RlIGVtYmVkZGVkIGluIF92ZXJzaW9u
LnB5IGNhbiBqdXN0IGZldGNoIHRoZSB2YWx1ZSBvZiB0aGVzZQogICAgIyBr
ZXl3b3Jkcy4gV2hlbiB1c2VkIGZyb20gc2V0dXAucHksIHdlIGRvbid0IHdh
bnQgdG8gaW1wb3J0IF92ZXJzaW9uLnB5LAogICAgIyBzbyB3ZSBkbyBpdCB3
aXRoIGEgcmVnZXhwIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVz
ZWQgZnJvbQogICAgIyBfdmVyc2lvbi5weS4KICAgIGtleXdvcmRzOiBEaWN0
W3N0ciwgc3RyXSA9IHt9CiAgICB0cnk6CiAgICAgICAgd2l0aCBvcGVuKHZl
cnNpb25maWxlX2FicywgInIiKSBhcyBmb2JqOgogICAgICAgICAgICBmb3Ig
bGluZSBpbiBmb2JqOgogICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgp
LnN0YXJ0c3dpdGgoImdpdF9yZWZuYW1lcyA9Iik6CiAgICAgICAgICAgICAg
ICAgICAgbW8gPSByZS5zZWFyY2gocic9XHMqIiguKikiJywgbGluZSkKICAg
ICAgICAgICAgICAgICAgICBpZiBtbzoKICAgICAgICAgICAgICAgICAgICAg
ICAga2V5d29yZHNbInJlZm5hbWVzIl0gPSBtby5ncm91cCgxKQogICAgICAg
ICAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoImdpdF9mdWxs
ID0iKToKICAgICAgICAgICAgICAgICAgICBtbyA9IHJlLnNlYXJjaChyJz1c
cyoiKC4qKSInLCBsaW5lKQogICAgICAgICAgICAgICAgICAgIGlmIG1vOgog
ICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkc1siZnVsbCJdID0gbW8u
Z3JvdXAoMSkKICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKS5zdGFy
dHN3aXRoKCJnaXRfZGF0ZSA9Iik6CiAgICAgICAgICAgICAgICAgICAgbW8g
PSByZS5zZWFyY2gocic9XHMqIiguKikiJywgbGluZSkKICAgICAgICAgICAg
ICAgICAgICBpZiBtbzoKICAgICAgICAgICAgICAgICAgICAgICAga2V5d29y
ZHNbImRhdGUiXSA9IG1vLmdyb3VwKDEpCiAgICBleGNlcHQgT1NFcnJvcjoK
ICAgICAgICBwYXNzCiAgICByZXR1cm4ga2V5d29yZHMKCgpAcmVnaXN0ZXJf
dmNzX2hhbmRsZXIoImdpdCIsICJrZXl3b3JkcyIpCmRlZiBnaXRfdmVyc2lv
bnNfZnJvbV9rZXl3b3JkcygKICAgIGtleXdvcmRzOiBEaWN0W3N0ciwgc3Ry
XSwKICAgIHRhZ19wcmVmaXg6IHN0ciwKICAgIHZlcmJvc2U6IGJvb2wsCikg
LT4gRGljdFtzdHIsIEFueV06CiAgICAiIiJHZXQgdmVyc2lvbiBpbmZvcm1h
dGlvbiBmcm9tIGdpdCBrZXl3b3Jkcy4iIiIKICAgIGlmICJyZWZuYW1lcyIg
bm90IGluIGtleXdvcmRzOgogICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2Qo
IlNob3J0IHZlcnNpb24gZmlsZSBmb3VuZCIpCiAgICBkYXRlID0ga2V5d29y
ZHMuZ2V0KCJkYXRlIikKICAgIGlmIGRhdGUgaXMgbm90IE5vbmU6CiAgICAg
ICAgIyBVc2Ugb25seSB0aGUgbGFzdCBsaW5lLiAgUHJldmlvdXMgbGluZXMg
bWF5IGNvbnRhaW4gR1BHIHNpZ25hdHVyZQogICAgICAgICMgaW5mb3JtYXRp
b24uCiAgICAgICAgZGF0ZSA9IGRhdGUuc3BsaXRsaW5lcygpWy0xXQoKICAg
ICAgICAjIGdpdC0yLjIuMCBhZGRlZCAiJSVjSSIsIHdoaWNoIGV4cGFuZHMg
dG8gYW4gSVNPLTg2MDEgLWNvbXBsaWFudAogICAgICAgICMgZGF0ZXN0YW1w
LiBIb3dldmVyIHdlIHByZWZlciAiJSVjaSIgKHdoaWNoIGV4cGFuZHMgdG8g
YW4gIklTTy04NjAxCiAgICAgICAgIyAtbGlrZSIgc3RyaW5nLCB3aGljaCB3
ZSBtdXN0IHRoZW4gZWRpdCB0byBtYWtlIGNvbXBsaWFudCksIGJlY2F1c2UK
ICAgICAgICAjIGl0J3MgYmVlbiBhcm91bmQgc2luY2UgZ2l0LTEuNS4zLCBh
bmQgaXQncyB0b28gZGlmZmljdWx0IHRvCiAgICAgICAgIyBkaXNjb3ZlciB3
aGljaCB2ZXJzaW9uIHdlJ3JlIHVzaW5nLCBvciB0byB3b3JrIGFyb3VuZCB1
c2luZyBhbgogICAgICAgICMgb2xkZXIgb25lLgogICAgICAgIGRhdGUgPSBk
YXRlLnN0cmlwKCkucmVwbGFjZSgiICIsICJUIiwgMSkucmVwbGFjZSgiICIs
ICIiLCAxKQogICAgcmVmbmFtZXMgPSBrZXl3b3Jkc1sicmVmbmFtZXMiXS5z
dHJpcCgpCiAgICBpZiByZWZuYW1lcy5zdGFydHN3aXRoKCIkRm9ybWF0Iik6
CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImtleXdv
cmRzIGFyZSB1bmV4cGFuZGVkLCBub3QgdXNpbmciKQogICAgICAgIHJhaXNl
IE5vdFRoaXNNZXRob2QoInVuZXhwYW5kZWQga2V5d29yZHMsIG5vdCBhIGdp
dC1hcmNoaXZlIHRhcmJhbGwiKQogICAgcmVmcyA9IHtyLnN0cmlwKCkgZm9y
IHIgaW4gcmVmbmFtZXMuc3RyaXAoIigpIikuc3BsaXQoIiwiKX0KICAgICMg
c3RhcnRpbmcgaW4gZ2l0LTEuOC4zLCB0YWdzIGFyZSBsaXN0ZWQgYXMgInRh
ZzogZm9vLTEuMCIgaW5zdGVhZCBvZgogICAgIyBqdXN0ICJmb28tMS4wIi4g
SWYgd2Ugc2VlIGEgInRhZzogIiBwcmVmaXgsIHByZWZlciB0aG9zZS4KICAg
IFRBRyA9ICJ0YWc6ICIKICAgIHRhZ3MgPSB7cltsZW4oVEFHKTpdIGZvciBy
IGluIHJlZnMgaWYgci5zdGFydHN3aXRoKFRBRyl9CiAgICBpZiBub3QgdGFn
czoKICAgICAgICAjIEVpdGhlciB3ZSdyZSB1c2luZyBnaXQgPCAxLjguMywg
b3IgdGhlcmUgcmVhbGx5IGFyZSBubyB0YWdzLiBXZSB1c2UKICAgICAgICAj
IGEgaGV1cmlzdGljOiBhc3N1bWUgYWxsIHZlcnNpb24gdGFncyBoYXZlIGEg
ZGlnaXQuIFRoZSBvbGQgZ2l0ICUlZAogICAgICAgICMgZXhwYW5zaW9uIGJl
aGF2ZXMgbGlrZSBnaXQgbG9nIC0tZGVjb3JhdGU9c2hvcnQgYW5kIHN0cmlw
cyBvdXQgdGhlCiAgICAgICAgIyByZWZzL2hlYWRzLyBhbmQgcmVmcy90YWdz
LyBwcmVmaXhlcyB0aGF0IHdvdWxkIGxldCB1cyBkaXN0aW5ndWlzaAogICAg
ICAgICMgYmV0d2VlbiBicmFuY2hlcyBhbmQgdGFncy4gQnkgaWdub3Jpbmcg
cmVmbmFtZXMgd2l0aG91dCBkaWdpdHMsIHdlCiAgICAgICAgIyBmaWx0ZXIg
b3V0IG1hbnkgY29tbW9uIGJyYW5jaCBuYW1lcyBsaWtlICJyZWxlYXNlIiBh
bmQKICAgICAgICAjICJzdGFiaWxpemF0aW9uIiwgYXMgd2VsbCBhcyAiSEVB
RCIgYW5kICJtYXN0ZXIiLgogICAgICAgIHRhZ3MgPSB7ciBmb3IgciBpbiBy
ZWZzIGlmIHJlLnNlYXJjaChyJ1xkJywgcil9CiAgICAgICAgaWYgdmVyYm9z
ZToKICAgICAgICAgICAgcHJpbnQoImRpc2NhcmRpbmcgJyUlcycsIG5vIGRp
Z2l0cyIgJSUgIiwiLmpvaW4ocmVmcyAtIHRhZ3MpKQogICAgaWYgdmVyYm9z
ZToKICAgICAgICBwcmludCgibGlrZWx5IHRhZ3M6ICUlcyIgJSUgIiwiLmpv
aW4oc29ydGVkKHRhZ3MpKSkKICAgIGZvciByZWYgaW4gc29ydGVkKHRhZ3Mp
OgogICAgICAgICMgc29ydGluZyB3aWxsIHByZWZlciBlLmcuICIyLjAiIG92
ZXIgIjIuMHJjMSIKICAgICAgICBpZiByZWYuc3RhcnRzd2l0aCh0YWdfcHJl
Zml4KToKICAgICAgICAgICAgciA9IHJlZltsZW4odGFnX3ByZWZpeCk6XQog
ICAgICAgICAgICAjIEZpbHRlciBvdXQgcmVmcyB0aGF0IGV4YWN0bHkgbWF0
Y2ggcHJlZml4IG9yIHRoYXQgZG9uJ3Qgc3RhcnQKICAgICAgICAgICAgIyB3
aXRoIGEgbnVtYmVyIG9uY2UgdGhlIHByZWZpeCBpcyBzdHJpcHBlZCAobW9z
dGx5IGEgY29uY2VybgogICAgICAgICAgICAjIHdoZW4gcHJlZml4IGlzICcn
KQogICAgICAgICAgICBpZiBub3QgcmUubWF0Y2gocidcZCcsIHIpOgogICAg
ICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgdmVyYm9zZToK
ICAgICAgICAgICAgICAgIHByaW50KCJwaWNraW5nICUlcyIgJSUgcikKICAg
ICAgICAgICAgcmV0dXJuIHsidmVyc2lvbiI6IHIsCiAgICAgICAgICAgICAg
ICAgICAgImZ1bGwtcmV2aXNpb25pZCI6IGtleXdvcmRzWyJmdWxsIl0uc3Ry
aXAoKSwKICAgICAgICAgICAgICAgICAgICAiZGlydHkiOiBGYWxzZSwgImVy
cm9yIjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAiZGF0ZSI6IGRhdGV9
CiAgICAjIG5vIHN1aXRhYmxlIHRhZ3MsIHNvIHZlcnNpb24gaXMgIjArdW5r
bm93biIsIGJ1dCBmdWxsIGhleCBpcyBzdGlsbCB0aGVyZQogICAgaWYgdmVy
Ym9zZToKICAgICAgICBwcmludCgibm8gc3VpdGFibGUgdGFncywgdXNpbmcg
dW5rbm93biArIGZ1bGwgcmV2aXNpb24gaWQiKQogICAgcmV0dXJuIHsidmVy
c2lvbiI6ICIwK3Vua25vd24iLAogICAgICAgICAgICAiZnVsbC1yZXZpc2lv
bmlkIjoga2V5d29yZHNbImZ1bGwiXS5zdHJpcCgpLAogICAgICAgICAgICAi
ZGlydHkiOiBGYWxzZSwgImVycm9yIjogIm5vIHN1aXRhYmxlIHRhZ3MiLCAi
ZGF0ZSI6IE5vbmV9CgoKQHJlZ2lzdGVyX3Zjc19oYW5kbGVyKCJnaXQiLCAi
cGllY2VzX2Zyb21fdmNzIikKZGVmIGdpdF9waWVjZXNfZnJvbV92Y3MoCiAg
ICB0YWdfcHJlZml4OiBzdHIsCiAgICByb290OiBzdHIsCiAgICB2ZXJib3Nl
OiBib29sLAogICAgcnVubmVyOiBDYWxsYWJsZSA9IHJ1bl9jb21tYW5kCikg
LT4gRGljdFtzdHIsIEFueV06CiAgICAiIiJHZXQgdmVyc2lvbiBmcm9tICdn
aXQgZGVzY3JpYmUnIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
CiAgICBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgaWYgdGhlIGdpdC1hcmNoaXZl
ICdzdWJzdCcga2V5d29yZHMgd2VyZSAqbm90KgogICAgZXhwYW5kZWQsIGFu
ZCBfdmVyc2lvbi5weSBoYXNuJ3QgYWxyZWFkeSBiZWVuIHJld3JpdHRlbiB3
aXRoIGEgc2hvcnQKICAgIHZlcnNpb24gc3RyaW5nLCBtZWFuaW5nIHdlJ3Jl
IGluc2lkZSBhIGNoZWNrZWQgb3V0IHNvdXJjZSB0cmVlLgogICAgIiIiCiAg
ICBHSVRTID0gWyJnaXQiXQogICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4z
MiI6CiAgICAgICAgR0lUUyA9IFsiZ2l0LmNtZCIsICJnaXQuZXhlIl0KCiAg
ICAjIEdJVF9ESVIgY2FuIGludGVyZmVyZSB3aXRoIGNvcnJlY3Qgb3BlcmF0
aW9uIG9mIFZlcnNpb25lZXIuCiAgICAjIEl0IG1heSBiZSBpbnRlbmRlZCB0
byBiZSBwYXNzZWQgdG8gdGhlIFZlcnNpb25lZXItdmVyc2lvbmVkIHByb2pl
Y3QsCiAgICAjIGJ1dCB0aGF0IHNob3VsZCBub3QgY2hhbmdlIHdoZXJlIHdl
IGdldCBvdXIgdmVyc2lvbiBmcm9tLgogICAgZW52ID0gb3MuZW52aXJvbi5j
b3B5KCkKICAgIGVudi5wb3AoIkdJVF9ESVIiLCBOb25lKQogICAgcnVubmVy
ID0gZnVuY3Rvb2xzLnBhcnRpYWwocnVubmVyLCBlbnY9ZW52KQoKICAgIF8s
IHJjID0gcnVubmVyKEdJVFMsIFsicmV2LXBhcnNlIiwgIi0tZ2l0LWRpciJd
LCBjd2Q9cm9vdCwKICAgICAgICAgICAgICAgICAgIGhpZGVfc3RkZXJyPW5v
dCB2ZXJib3NlKQogICAgaWYgcmMgIT0gMDoKICAgICAgICBpZiB2ZXJib3Nl
OgogICAgICAgICAgICBwcmludCgiRGlyZWN0b3J5ICUlcyBub3QgdW5kZXIg
Z2l0IGNvbnRyb2wiICUlIHJvb3QpCiAgICAgICAgcmFpc2UgTm90VGhpc01l
dGhvZCgiJ2dpdCByZXYtcGFyc2UgLS1naXQtZGlyJyByZXR1cm5lZCBlcnJv
ciIpCgogICAgIyBpZiB0aGVyZSBpcyBhIHRhZyBtYXRjaGluZyB0YWdfcHJl
Zml4LCB0aGlzIHlpZWxkcyBUQUctTlVNLWdIRVhbLWRpcnR5XQogICAgIyBp
ZiB0aGVyZSBpc24ndCBvbmUsIHRoaXMgeWllbGRzIEhFWFstZGlydHldIChu
byBOVU0pCiAgICBkZXNjcmliZV9vdXQsIHJjID0gcnVubmVyKEdJVFMsIFsK
ICAgICAgICAiZGVzY3JpYmUiLCAiLS10YWdzIiwgIi0tZGlydHkiLCAiLS1h
bHdheXMiLCAiLS1sb25nIiwKICAgICAgICAiLS1tYXRjaCIsIGYie3RhZ19w
cmVmaXh9W1s6ZGlnaXQ6XV0qIgogICAgXSwgY3dkPXJvb3QpCiAgICAjIC0t
bG9uZyB3YXMgYWRkZWQgaW4gZ2l0LTEuNS41CiAgICBpZiBkZXNjcmliZV9v
dXQgaXMgTm9uZToKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCInZ2l0
IGRlc2NyaWJlJyBmYWlsZWQiKQogICAgZGVzY3JpYmVfb3V0ID0gZGVzY3Jp
YmVfb3V0LnN0cmlwKCkKICAgIGZ1bGxfb3V0LCByYyA9IHJ1bm5lcihHSVRT
LCBbInJldi1wYXJzZSIsICJIRUFEIl0sIGN3ZD1yb290KQogICAgaWYgZnVs
bF9vdXQgaXMgTm9uZToKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCIn
Z2l0IHJldi1wYXJzZScgZmFpbGVkIikKICAgIGZ1bGxfb3V0ID0gZnVsbF9v
dXQuc3RyaXAoKQoKICAgIHBpZWNlczogRGljdFtzdHIsIEFueV0gPSB7fQog
ICAgcGllY2VzWyJsb25nIl0gPSBmdWxsX291dAogICAgcGllY2VzWyJzaG9y
dCJdID0gZnVsbF9vdXRbOjddICAjIG1heWJlIGltcHJvdmVkIGxhdGVyCiAg
ICBwaWVjZXNbImVycm9yIl0gPSBOb25lCgogICAgYnJhbmNoX25hbWUsIHJj
ID0gcnVubmVyKEdJVFMsIFsicmV2LXBhcnNlIiwgIi0tYWJicmV2LXJlZiIs
ICJIRUFEIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXJv
b3QpCiAgICAjIC0tYWJicmV2LXJlZiB3YXMgYWRkZWQgaW4gZ2l0LTEuNi4z
CiAgICBpZiByYyAhPSAwIG9yIGJyYW5jaF9uYW1lIGlzIE5vbmU6CiAgICAg
ICAgcmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCByZXYtcGFyc2UgLS1hYmJy
ZXYtcmVmJyByZXR1cm5lZCBlcnJvciIpCiAgICBicmFuY2hfbmFtZSA9IGJy
YW5jaF9uYW1lLnN0cmlwKCkKCiAgICBpZiBicmFuY2hfbmFtZSA9PSAiSEVB
RCI6CiAgICAgICAgIyBJZiB3ZSBhcmVuJ3QgZXhhY3RseSBvbiBhIGJyYW5j
aCwgcGljayBhIGJyYW5jaCB3aGljaCByZXByZXNlbnRzCiAgICAgICAgIyB0
aGUgY3VycmVudCBjb21taXQuIElmIGFsbCBlbHNlIGZhaWxzLCB3ZSBhcmUg
b24gYSBicmFuY2hsZXNzCiAgICAgICAgIyBjb21taXQuCiAgICAgICAgYnJh
bmNoZXMsIHJjID0gcnVubmVyKEdJVFMsIFsiYnJhbmNoIiwgIi0tY29udGFp
bnMiXSwgY3dkPXJvb3QpCiAgICAgICAgIyAtLWNvbnRhaW5zIHdhcyBhZGRl
ZCBpbiBnaXQtMS41LjQKICAgICAgICBpZiByYyAhPSAwIG9yIGJyYW5jaGVz
IGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2QoIidn
aXQgYnJhbmNoIC0tY29udGFpbnMnIHJldHVybmVkIGVycm9yIikKICAgICAg
ICBicmFuY2hlcyA9IGJyYW5jaGVzLnNwbGl0KCJcbiIpCgogICAgICAgICMg
UmVtb3ZlIHRoZSBmaXJzdCBsaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgZGV0YWNo
ZWQKICAgICAgICBpZiAiKCIgaW4gYnJhbmNoZXNbMF06CiAgICAgICAgICAg
IGJyYW5jaGVzLnBvcCgwKQoKICAgICAgICAjIFN0cmlwIG9mZiB0aGUgbGVh
ZGluZyAiKiAiIGZyb20gdGhlIGxpc3Qgb2YgYnJhbmNoZXMuCiAgICAgICAg
YnJhbmNoZXMgPSBbYnJhbmNoWzI6XSBmb3IgYnJhbmNoIGluIGJyYW5jaGVz
XQogICAgICAgIGlmICJtYXN0ZXIiIGluIGJyYW5jaGVzOgogICAgICAgICAg
ICBicmFuY2hfbmFtZSA9ICJtYXN0ZXIiCiAgICAgICAgZWxpZiBub3QgYnJh
bmNoZXM6CiAgICAgICAgICAgIGJyYW5jaF9uYW1lID0gTm9uZQogICAgICAg
IGVsc2U6CiAgICAgICAgICAgICMgUGljayB0aGUgZmlyc3QgYnJhbmNoIHRo
YXQgaXMgcmV0dXJuZWQuIEdvb2Qgb3IgYmFkLgogICAgICAgICAgICBicmFu
Y2hfbmFtZSA9IGJyYW5jaGVzWzBdCgogICAgcGllY2VzWyJicmFuY2giXSA9
IGJyYW5jaF9uYW1lCgogICAgIyBwYXJzZSBkZXNjcmliZV9vdXQuIEl0IHdp
bGwgYmUgbGlrZSBUQUctTlVNLWdIRVhbLWRpcnR5XSBvciBIRVhbLWRpcnR5
XQogICAgIyBUQUcgbWlnaHQgaGF2ZSBoeXBoZW5zLgogICAgZ2l0X2Rlc2Ny
aWJlID0gZGVzY3JpYmVfb3V0CgogICAgIyBsb29rIGZvciAtZGlydHkgc3Vm
Zml4CiAgICBkaXJ0eSA9IGdpdF9kZXNjcmliZS5lbmRzd2l0aCgiLWRpcnR5
IikKICAgIHBpZWNlc1siZGlydHkiXSA9IGRpcnR5CiAgICBpZiBkaXJ0eToK
ICAgICAgICBnaXRfZGVzY3JpYmUgPSBnaXRfZGVzY3JpYmVbOmdpdF9kZXNj
cmliZS5yaW5kZXgoIi1kaXJ0eSIpXQoKICAgICMgbm93IHdlIGhhdmUgVEFH
LU5VTS1nSEVYIG9yIEhFWAoKICAgIGlmICItIiBpbiBnaXRfZGVzY3JpYmU6
CiAgICAgICAgIyBUQUctTlVNLWdIRVgKICAgICAgICBtbyA9IHJlLnNlYXJj
aChyJ14oLispLShcZCspLWcoWzAtOWEtZl0rKSQnLCBnaXRfZGVzY3JpYmUp
CiAgICAgICAgaWYgbm90IG1vOgogICAgICAgICAgICAjIHVucGFyc2FibGUu
IE1heWJlIGdpdC1kZXNjcmliZSBpcyBtaXNiZWhhdmluZz8KICAgICAgICAg
ICAgcGllY2VzWyJlcnJvciJdID0gKCJ1bmFibGUgdG8gcGFyc2UgZ2l0LWRl
c2NyaWJlIG91dHB1dDogJyUlcyciCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlJSBkZXNjcmliZV9vdXQpCiAgICAgICAgICAgIHJldHVybiBw
aWVjZXMKCiAgICAgICAgIyB0YWcKICAgICAgICBmdWxsX3RhZyA9IG1vLmdy
b3VwKDEpCiAgICAgICAgaWYgbm90IGZ1bGxfdGFnLnN0YXJ0c3dpdGgodGFn
X3ByZWZpeCk6CiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAg
ICAgICBmbXQgPSAidGFnICclJXMnIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVm
aXggJyUlcyciCiAgICAgICAgICAgICAgICBwcmludChmbXQgJSUgKGZ1bGxf
dGFnLCB0YWdfcHJlZml4KSkKICAgICAgICAgICAgcGllY2VzWyJlcnJvciJd
ID0gKCJ0YWcgJyUlcycgZG9lc24ndCBzdGFydCB3aXRoIHByZWZpeCAnJSVz
JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIChmdWxsX3Rh
ZywgdGFnX3ByZWZpeCkpCiAgICAgICAgICAgIHJldHVybiBwaWVjZXMKICAg
ICAgICBwaWVjZXNbImNsb3Nlc3QtdGFnIl0gPSBmdWxsX3RhZ1tsZW4odGFn
X3ByZWZpeCk6XQoKICAgICAgICAjIGRpc3RhbmNlOiBudW1iZXIgb2YgY29t
bWl0cyBzaW5jZSB0YWcKICAgICAgICBwaWVjZXNbImRpc3RhbmNlIl0gPSBp
bnQobW8uZ3JvdXAoMikpCgogICAgICAgICMgY29tbWl0OiBzaG9ydCBoZXgg
cmV2aXNpb24gSUQKICAgICAgICBwaWVjZXNbInNob3J0Il0gPSBtby5ncm91
cCgzKQoKICAgIGVsc2U6CiAgICAgICAgIyBIRVg6IG5vIHRhZ3MKICAgICAg
ICBwaWVjZXNbImNsb3Nlc3QtdGFnIl0gPSBOb25lCiAgICAgICAgb3V0LCBy
YyA9IHJ1bm5lcihHSVRTLCBbInJldi1saXN0IiwgIkhFQUQiLCAiLS1sZWZ0
LXJpZ2h0Il0sIGN3ZD1yb290KQogICAgICAgIHBpZWNlc1siZGlzdGFuY2Ui
XSA9IGxlbihvdXQuc3BsaXQoKSkgICMgdG90YWwgbnVtYmVyIG9mIGNvbW1p
dHMKCiAgICAjIGNvbW1pdCBkYXRlOiBzZWUgSVNPLTg2MDEgY29tbWVudCBp
biBnaXRfdmVyc2lvbnNfZnJvbV9rZXl3b3JkcygpCiAgICBkYXRlID0gcnVu
bmVyKEdJVFMsIFsic2hvdyIsICItcyIsICItLWZvcm1hdD0lJWNpIiwgIkhF
QUQiXSwgY3dkPXJvb3QpWzBdLnN0cmlwKCkKICAgICMgVXNlIG9ubHkgdGhl
IGxhc3QgbGluZS4gIFByZXZpb3VzIGxpbmVzIG1heSBjb250YWluIEdQRyBz
aWduYXR1cmUKICAgICMgaW5mb3JtYXRpb24uCiAgICBkYXRlID0gZGF0ZS5z
cGxpdGxpbmVzKClbLTFdCiAgICBwaWVjZXNbImRhdGUiXSA9IGRhdGUuc3Ry
aXAoKS5yZXBsYWNlKCIgIiwgIlQiLCAxKS5yZXBsYWNlKCIgIiwgIiIsIDEp
CgogICAgcmV0dXJuIHBpZWNlcwoKCmRlZiBwbHVzX29yX2RvdChwaWVjZXM6
IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAgICAiIiJSZXR1cm4gYSArIGlm
IHdlIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUsIGVsc2UgcmV0dXJuIGEgLiIi
IgogICAgaWYgIisiIGluIHBpZWNlcy5nZXQoImNsb3Nlc3QtdGFnIiwgIiIp
OgogICAgICAgIHJldHVybiAiLiIKICAgIHJldHVybiAiKyIKCgpkZWYgcmVu
ZGVyX3BlcDQ0MChwaWVjZXM6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAg
ICAiIiJCdWlsZCB1cCB2ZXJzaW9uIHN0cmluZywgd2l0aCBwb3N0LXJlbGVh
c2UgImxvY2FsIHZlcnNpb24gaWRlbnRpZmllciIuCgogICAgT3VyIGdvYWw6
IFRBR1srRElTVEFOQ0UuZ0hFWFsuZGlydHldXSAuIE5vdGUgdGhhdCBpZiB5
b3UKICAgIGdldCBhIHRhZ2dlZCBidWlsZCBhbmQgdGhlbiBkaXJ0eSBpdCwg
eW91J2xsIGdldCBUQUcrMC5nSEVYLmRpcnR5CgogICAgRXhjZXB0aW9uczoK
ICAgIDE6IG5vIHRhZ3MuIGdpdF9kZXNjcmliZSB3YXMganVzdCBIRVguIDAr
dW50YWdnZWQuRElTVEFOQ0UuZ0hFWFsuZGlydHldCiAgICAiIiIKICAgIGlm
IHBpZWNlc1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBp
ZWNlc1siY2xvc2VzdC10YWciXQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFu
Y2UiXSBvciBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVk
ICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAgICAgcmVuZGVyZWQg
Kz0gIiUlZC5nJSVzIiAlJSAocGllY2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNb
InNob3J0Il0pCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAg
ICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICBlbHNlOgog
ICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMCt1
bnRhZ2dlZC4lJWQuZyUlcyIgJSUgKHBpZWNlc1siZGlzdGFuY2UiXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGllY2Vz
WyJzaG9ydCJdKQogICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAg
ICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAgIHJldHVybiByZW5kZXJl
ZAoKCmRlZiByZW5kZXJfcGVwNDQwX2JyYW5jaChwaWVjZXM6IERpY3Rbc3Ry
LCBBbnldKSAtPiBzdHI6CiAgICAiIiJUQUdbWy5kZXYwXStESVNUQU5DRS5n
SEVYWy5kaXJ0eV1dIC4KCiAgICBUaGUgIi5kZXYwIiBtZWFucyBub3QgbWFz
dGVyIGJyYW5jaC4gTm90ZSB0aGF0IC5kZXYwIHNvcnRzIGJhY2t3YXJkcwog
ICAgKGEgZmVhdHVyZSBicmFuY2ggd2lsbCBhcHBlYXIgIm9sZGVyIiB0aGFu
IHRoZSBtYXN0ZXIgYnJhbmNoKS4KCiAgICBFeGNlcHRpb25zOgogICAgMTog
bm8gdGFncy4gMFsuZGV2MF0rdW50YWdnZWQuRElTVEFOQ0UuZ0hFWFsuZGly
dHldCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToKICAg
ICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgICAg
IGlmIHBpZWNlc1siZGlzdGFuY2UiXSBvciBwaWVjZXNbImRpcnR5Il06CiAg
ICAgICAgICAgIGlmIHBpZWNlc1siYnJhbmNoIl0gIT0gIm1hc3RlciI6CiAg
ICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgICAg
IHJlbmRlcmVkICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAgICAg
cmVuZGVyZWQgKz0gIiUlZC5nJSVzIiAlJSAocGllY2VzWyJkaXN0YW5jZSJd
LCBwaWVjZXNbInNob3J0Il0pCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGly
dHkiXToKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAg
ICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVy
ZWQgPSAiMCIKICAgICAgICBpZiBwaWVjZXNbImJyYW5jaCJdICE9ICJtYXN0
ZXIiOgogICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAg
cmVuZGVyZWQgKz0gIit1bnRhZ2dlZC4lJWQuZyUlcyIgJSUgKHBpZWNlc1si
ZGlzdGFuY2UiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGllY2VzWyJzaG9ydCJdKQogICAgICAgIGlmIHBpZWNlc1si
ZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiBwZXA0NDBfc3BsaXRfcG9zdCh2ZXI6
IHN0cikgLT4gVHVwbGVbc3RyLCBPcHRpb25hbFtpbnRdXToKICAgICIiIlNw
bGl0IHBlcDQ0MCB2ZXJzaW9uIHN0cmluZyBhdCB0aGUgcG9zdC1yZWxlYXNl
IHNlZ21lbnQuCgogICAgUmV0dXJucyB0aGUgcmVsZWFzZSBzZWdtZW50cyBi
ZWZvcmUgdGhlIHBvc3QtcmVsZWFzZSBhbmQgdGhlCiAgICBwb3N0LXJlbGVh
c2UgdmVyc2lvbiBudW1iZXIgKG9yIC0xIGlmIG5vIHBvc3QtcmVsZWFzZSBz
ZWdtZW50IGlzIHByZXNlbnQpLgogICAgIiIiCiAgICB2YyA9IHN0ci5zcGxp
dCh2ZXIsICIucG9zdCIpCiAgICByZXR1cm4gdmNbMF0sIGludCh2Y1sxXSBv
ciAwKSBpZiBsZW4odmMpID09IDIgZWxzZSBOb25lCgoKZGVmIHJlbmRlcl9w
ZXA0NDBfcHJlKHBpZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAg
ICIiIlRBR1sucG9zdE4uZGV2RElTVEFOQ0VdIC0tIE5vIC1kaXJ0eS4KCiAg
ICBFeGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gMC5wb3N0MC5kZXZESVNU
QU5DRQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAg
ICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICAjIHVw
ZGF0ZSB0aGUgcG9zdCByZWxlYXNlIHNlZ21lbnQKICAgICAgICAgICAgdGFn
X3ZlcnNpb24sIHBvc3RfdmVyc2lvbiA9IHBlcDQ0MF9zcGxpdF9wb3N0KHBp
ZWNlc1siY2xvc2VzdC10YWciXSkKICAgICAgICAgICAgcmVuZGVyZWQgPSB0
YWdfdmVyc2lvbgogICAgICAgICAgICBpZiBwb3N0X3ZlcnNpb24gaXMgbm90
IE5vbmU6CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLnBvc3QlJWQu
ZGV2JSVkIiAlJSAocG9zdF92ZXJzaW9uICsgMSwgcGllY2VzWyJkaXN0YW5j
ZSJdKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmVuZGVy
ZWQgKz0gIi5wb3N0MC5kZXYlJWQiICUlIChwaWVjZXNbImRpc3RhbmNlIl0p
CiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBubyBjb21taXRzLCB1c2Ug
dGhlIHRhZyBhcyB0aGUgdmVyc2lvbgogICAgICAgICAgICByZW5kZXJlZCA9
IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgZWxzZToKICAgICAgICAjIGV4
Y2VwdGlvbiAjMQogICAgICAgIHJlbmRlcmVkID0gIjAucG9zdDAuZGV2JSVk
IiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgIHJldHVybiByZW5kZXJlZAoK
CmRlZiByZW5kZXJfcGVwNDQwX3Bvc3QocGllY2VzOiBEaWN0W3N0ciwgQW55
XSkgLT4gc3RyOgogICAgIiIiVEFHWy5wb3N0RElTVEFOQ0VbLmRldjBdK2dI
RVhdIC4KCiAgICBUaGUgIi5kZXYwIiBtZWFucyBkaXJ0eS4gTm90ZSB0aGF0
IC5kZXYwIHNvcnRzIGJhY2t3YXJkcwogICAgKGEgZGlydHkgdHJlZSB3aWxs
IGFwcGVhciAib2xkZXIiIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xlYW4g
b25lKSwKICAgIGJ1dCB5b3Ugc2hvdWxkbid0IGJlIHJlbGVhc2luZyBzb2Z0
d2FyZSB3aXRoIC1kaXJ0eSBhbnl3YXlzLgoKICAgIEV4Y2VwdGlvbnM6CiAg
ICAxOiBubyB0YWdzLiAwLnBvc3RESVNUQU5DRVsuZGV2MF0KICAgICIiIgog
ICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRlcmVk
ID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2VzWyJk
aXN0YW5jZSJdIG9yIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVu
ZGVyZWQgKz0gIi5wb3N0JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAg
ICAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICAgICAg
cmVuZGVyZWQgKz0gIi5kZXYwIgogICAgICAgICAgICByZW5kZXJlZCArPSBw
bHVzX29yX2RvdChwaWVjZXMpCiAgICAgICAgICAgIHJlbmRlcmVkICs9ICJn
JSVzIiAlJSBwaWVjZXNbInNob3J0Il0KICAgIGVsc2U6CiAgICAgICAgIyBl
eGNlcHRpb24gIzEKICAgICAgICByZW5kZXJlZCA9ICIwLnBvc3QlJWQiICUl
IHBpZWNlc1siZGlzdGFuY2UiXQogICAgICAgIGlmIHBpZWNlc1siZGlydHki
XToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kZXYwIgogICAgICAgIHJl
bmRlcmVkICs9ICIrZyUlcyIgJSUgcGllY2VzWyJzaG9ydCJdCiAgICByZXR1
cm4gcmVuZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9wb3N0X2JyYW5jaChw
aWVjZXM6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAgICAiIiJUQUdbLnBv
c3RESVNUQU5DRVsuZGV2MF0rZ0hFWFsuZGlydHldXSAuCgogICAgVGhlICIu
ZGV2MCIgbWVhbnMgbm90IG1hc3RlciBicmFuY2guCgogICAgRXhjZXB0aW9u
czoKICAgIDE6IG5vIHRhZ3MuIDAucG9zdERJU1RBTkNFWy5kZXYwXStnSEVY
Wy5kaXJ0eV0KICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJd
OgogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAg
ICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdIG9yIHBpZWNlc1siZGlydHki
XToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5wb3N0JSVkIiAlJSBwaWVj
ZXNbImRpc3RhbmNlIl0KICAgICAgICAgICAgaWYgcGllY2VzWyJicmFuY2gi
XSAhPSAibWFzdGVyIjoKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIu
ZGV2MCIKICAgICAgICAgICAgcmVuZGVyZWQgKz0gcGx1c19vcl9kb3QocGll
Y2VzKQogICAgICAgICAgICByZW5kZXJlZCArPSAiZyUlcyIgJSUgcGllY2Vz
WyJzaG9ydCJdCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAg
ICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICBlbHNlOgog
ICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5w
b3N0JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgICAgICBpZiBwaWVj
ZXNbImJyYW5jaCJdICE9ICJtYXN0ZXIiOgogICAgICAgICAgICByZW5kZXJl
ZCArPSAiLmRldjAiCiAgICAgICAgcmVuZGVyZWQgKz0gIitnJSVzIiAlJSBw
aWVjZXNbInNob3J0Il0KICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAg
ICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICByZXR1cm4gcmVu
ZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9vbGQocGllY2VzOiBEaWN0W3N0
ciwgQW55XSkgLT4gc3RyOgogICAgIiIiVEFHWy5wb3N0RElTVEFOQ0VbLmRl
djBdXSAuCgogICAgVGhlICIuZGV2MCIgbWVhbnMgZGlydHkuCgogICAgRXhj
ZXB0aW9uczoKICAgIDE6IG5vIHRhZ3MuIDAucG9zdERJU1RBTkNFWy5kZXYw
XQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAg
ICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICBp
ZiBwaWVjZXNbImRpc3RhbmNlIl0gb3IgcGllY2VzWyJkaXJ0eSJdOgogICAg
ICAgICAgICByZW5kZXJlZCArPSAiLnBvc3QlJWQiICUlIHBpZWNlc1siZGlz
dGFuY2UiXQogICAgICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAg
ICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICBlbHNlOgogICAg
ICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5wb3N0
JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgICAgICBpZiBwaWVjZXNb
ImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGV2MCIKICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfZ2l0X2Rlc2NyaWJlKHBp
ZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICIiIlRBR1stRElT
VEFOQ0UtZ0hFWF1bLWRpcnR5XS4KCiAgICBMaWtlICdnaXQgZGVzY3JpYmUg
LS10YWdzIC0tZGlydHkgLS1hbHdheXMnLgoKICAgIEV4Y2VwdGlvbnM6CiAg
ICAxOiBubyB0YWdzLiBIRVhbLWRpcnR5XSAgKG5vdGU6IG5vICdnJyBwcmVm
aXgpCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToKICAg
ICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgICAg
IGlmIHBpZWNlc1siZGlzdGFuY2UiXToKICAgICAgICAgICAgcmVuZGVyZWQg
Kz0gIi0lJWQtZyUlcyIgJSUgKHBpZWNlc1siZGlzdGFuY2UiXSwgcGllY2Vz
WyJzaG9ydCJdKQogICAgZWxzZToKICAgICAgICAjIGV4Y2VwdGlvbiAjMQog
ICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJzaG9ydCJdCiAgICBpZiBwaWVj
ZXNbImRpcnR5Il06CiAgICAgICAgcmVuZGVyZWQgKz0gIi1kaXJ0eSIKICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfZ2l0X2Rlc2NyaWJlX2xv
bmcocGllY2VzOiBEaWN0W3N0ciwgQW55XSkgLT4gc3RyOgogICAgIiIiVEFH
LURJU1RBTkNFLWdIRVhbLWRpcnR5XS4KCiAgICBMaWtlICdnaXQgZGVzY3Jp
YmUgLS10YWdzIC0tZGlydHkgLS1hbHdheXMgLWxvbmcnLgogICAgVGhlIGRp
c3RhbmNlL2hhc2ggaXMgdW5jb25kaXRpb25hbC4KCiAgICBFeGNlcHRpb25z
OgogICAgMTogbm8gdGFncy4gSEVYWy1kaXJ0eV0gIChub3RlOiBubyAnZycg
cHJlZml4KQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06
CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAg
ICAgICByZW5kZXJlZCArPSAiLSUlZC1nJSVzIiAlJSAocGllY2VzWyJkaXN0
YW5jZSJdLCBwaWVjZXNbInNob3J0Il0pCiAgICBlbHNlOgogICAgICAgICMg
ZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbInNob3J0
Il0KICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAgICByZW5kZXJlZCAr
PSAiLWRpcnR5IgogICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRlcihw
aWVjZXM6IERpY3Rbc3RyLCBBbnldLCBzdHlsZTogc3RyKSAtPiBEaWN0W3N0
ciwgQW55XToKICAgICIiIlJlbmRlciB0aGUgZ2l2ZW4gdmVyc2lvbiBwaWVj
ZXMgaW50byB0aGUgcmVxdWVzdGVkIHN0eWxlLiIiIgogICAgaWYgcGllY2Vz
WyJlcnJvciJdOgogICAgICAgIHJldHVybiB7InZlcnNpb24iOiAidW5rbm93
biIsCiAgICAgICAgICAgICAgICAiZnVsbC1yZXZpc2lvbmlkIjogcGllY2Vz
LmdldCgibG9uZyIpLAogICAgICAgICAgICAgICAgImRpcnR5IjogTm9uZSwK
ICAgICAgICAgICAgICAgICJlcnJvciI6IHBpZWNlc1siZXJyb3IiXSwKICAg
ICAgICAgICAgICAgICJkYXRlIjogTm9uZX0KCiAgICBpZiBub3Qgc3R5bGUg
b3Igc3R5bGUgPT0gImRlZmF1bHQiOgogICAgICAgIHN0eWxlID0gInBlcDQ0
MCIgICMgdGhlIGRlZmF1bHQKCiAgICBpZiBzdHlsZSA9PSAicGVwNDQwIjoK
ICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDAocGllY2VzKQogICAg
ZWxpZiBzdHlsZSA9PSAicGVwNDQwLWJyYW5jaCI6CiAgICAgICAgcmVuZGVy
ZWQgPSByZW5kZXJfcGVwNDQwX2JyYW5jaChwaWVjZXMpCiAgICBlbGlmIHN0
eWxlID09ICJwZXA0NDAtcHJlIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRl
cl9wZXA0NDBfcHJlKHBpZWNlcykKICAgIGVsaWYgc3R5bGUgPT0gInBlcDQ0
MC1wb3N0IjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBfcG9z
dChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAtcG9zdC1icmFu
Y2giOgogICAgICAgIHJlbmRlcmVkID0gcmVuZGVyX3BlcDQ0MF9wb3N0X2Jy
YW5jaChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAtb2xkIjoK
ICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBfb2xkKHBpZWNlcykK
ICAgIGVsaWYgc3R5bGUgPT0gImdpdC1kZXNjcmliZSI6CiAgICAgICAgcmVu
ZGVyZWQgPSByZW5kZXJfZ2l0X2Rlc2NyaWJlKHBpZWNlcykKICAgIGVsaWYg
c3R5bGUgPT0gImdpdC1kZXNjcmliZS1sb25nIjoKICAgICAgICByZW5kZXJl
ZCA9IHJlbmRlcl9naXRfZGVzY3JpYmVfbG9uZyhwaWVjZXMpCiAgICBlbHNl
OgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gc3R5bGUgJyUl
cyciICUlIHN0eWxlKQoKICAgIHJldHVybiB7InZlcnNpb24iOiByZW5kZXJl
ZCwgImZ1bGwtcmV2aXNpb25pZCI6IHBpZWNlc1sibG9uZyJdLAogICAgICAg
ICAgICAiZGlydHkiOiBwaWVjZXNbImRpcnR5Il0sICJlcnJvciI6IE5vbmUs
CiAgICAgICAgICAgICJkYXRlIjogcGllY2VzLmdldCgiZGF0ZSIpfQoKCmRl
ZiBnZXRfdmVyc2lvbnMoKSAtPiBEaWN0W3N0ciwgQW55XToKICAgICIiIkdl