-
Notifications
You must be signed in to change notification settings - Fork 177
/
ocs-operator.clusterserviceversion.yaml
2601 lines (2583 loc) · 114 KB
/
ocs-operator.clusterserviceversion.yaml
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
---
apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
annotations:
alm-examples: |2-
[
{
"apiVersion": "ocs.openshift.io/v1",
"kind": "StorageCluster",
"metadata": {
"name": "example-storagecluster",
"namespace": "openshift-storage"
},
"spec": {
"manageNodes": false,
"monPVCTemplate": {
"spec": {
"accessModes": [
"ReadWriteOnce"
],
"resources": {
"requests": {
"storage": "10Gi"
}
},
"storageClassName": "gp2"
}
},
"storageDeviceSets": [
{
"count": 3,
"dataPVCTemplate": {
"spec": {
"accessModes": [
"ReadWriteOnce"
],
"resources": {
"requests": {
"storage": "1Ti"
}
},
"storageClassName": "gp2",
"volumeMode": "Block"
}
},
"name": "example-deviceset",
"placement": {},
"portable": true,
"resources": {}
}
]
}
}
]
capabilities: Full Lifecycle
categories: Storage
containerImage: quay.io/ocs-dev/ocs-operator:4.6.0
description: Red Hat OpenShift Container Storage provides hyperconverged storage
for applications within an OpenShift cluster.
external.features.ocs.openshift.io/export-script: |-
JycnCkNvcHlyaWdodCAyMDIwIFRoZSBSb29rIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
CglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCicnJwoKaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgYXJncGFyc2UKaW1w
b3J0IHVuaXR0ZXN0CmltcG9ydCByZQppbXBvcnQgcmVxdWVzdHMKZnJvbSBvcyBpbXBvcnQgbGlu
ZXNlcCBhcyBMSU5FU0VQCgojIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAyLngKdHJ5Ogog
ICAgTW9kdWxlTm90Rm91bmRFcnJvcgpleGNlcHQ6CiAgICBNb2R1bGVOb3RGb3VuZEVycm9yID0g
SW1wb3J0RXJyb3IKCnRyeToKICAgIGltcG9ydCByYWRvcwpleGNlcHQgTW9kdWxlTm90Rm91bmRF
cnJvciBhcyBub01vZEVycjoKICAgIHByaW50KCJFcnJvcjogJXNcbkV4aXRpbmcgdGhlIHNjcmlw
dC4uLiIgJSBub01vZEVycikKICAgIHN5cy5leGl0KDEpCgp0cnk6CiAgICAjIGZvciAyLjcueAog
ICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJy
b3I6CiAgICAjIGZvciAzLngKICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCgoKY2xhc3MgRXhl
Y3V0aW9uRmFpbHVyZUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgcGFzcwoKCmNsYXNzIFJhZG9z
SlNPTjoKICAgIEVYVEVSTkFMX1VTRVJfTkFNRSA9ICJjbGllbnQuaGVhbHRoY2hlY2tlciIKICAg
IEVNUFRZX09VVFBVVF9MSVNUID0gIkVtcHR5IG91dHB1dCBsaXN0IgogICAgREVGQVVMVF9SR1df
UE9PTF9QUkVGSVggPSAiZGVmYXVsdCIKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBnZW5fYXJn
X3BhcnNlcihjbHMsIGFyZ3NfdG9fcGFyc2U9Tm9uZSk6CiAgICAgICAgYXJnUCA9IGFyZ3BhcnNl
LkFyZ3VtZW50UGFyc2VyKCkKCiAgICAgICAgY29tbW9uX2dyb3VwID0gYXJnUC5hZGRfYXJndW1l
bnRfZ3JvdXAoJ2NvbW1vbicpCiAgICAgICAgY29tbW9uX2dyb3VwLmFkZF9hcmd1bWVudCgiLS12
ZXJib3NlIiwgIi12IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3Ry
dWUnLCBkZWZhdWx0PUZhbHNlKQogICAgICAgIGNvbW1vbl9ncm91cC5hZGRfYXJndW1lbnQoIi0t
Y2VwaC1jb25mIiwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcm92aWRl
IGEgY2VwaCBjb25mIGZpbGUuIiwgdHlwZT1zdHIpCiAgICAgICAgY29tbW9uX2dyb3VwLmFkZF9h
cmd1bWVudCgiLS1ydW4tYXMtdXNlciIsICItdSIsIGRlZmF1bHQ9IiIsIHR5cGU9c3RyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByb3ZpZGVzIGEgdXNlciBuYW1lIHRvIGNoZWNr
IHRoZSBjbHVzdGVyJ3MgaGVhbHRoIHN0YXR1cywgbXVzdCBiZSBwcmVmaXhlZCBieSAnY2xpZW50
LiciKQogICAgICAgIGNvbW1vbl9ncm91cC5hZGRfYXJndW1lbnQoIi0tY2x1c3Rlci1uYW1lIiwg
ZGVmYXVsdD0ib3BlbnNoaWZ0LXN0b3JhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9IkNlcGggY2x1c3RlciBuYW1lIikKICAgICAgICBjb21tb25fZ3JvdXAuYWRkX2FyZ3VtZW50
KCItLW5hbWVzcGFjZSIsIGRlZmF1bHQ9IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iTmFtZXNwYWNlIHdoZXJlIENlcGhDbHVzdGVyIGlzIHJ1bm5pbmciKQogICAgICAgIGNvbW1v
bl9ncm91cC5hZGRfYXJndW1lbnQoIi0tcmd3LXBvb2wtcHJlZml4IiwgZGVmYXVsdD0iIiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSR1cgUG9vbCBwcmVmaXgiKQoKICAgICAgICBv
dXRwdXRfZ3JvdXAgPSBhcmdQLmFkZF9hcmd1bWVudF9ncm91cCgnb3V0cHV0JykKICAgICAgICBv
dXRwdXRfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWZvcm1hdCIsICItdCIsIGNob2ljZXM9WyJqc29u
IiwgImJhc2giXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdqc29uJywgaGVs
cD0iUHJvdmlkZXMgdGhlIG91dHB1dCBmb3JtYXQgKGpzb24gfCBiYXNoKSIpCiAgICAgICAgb3V0
cHV0X2dyb3VwLmFkZF9hcmd1bWVudCgiLS1vdXRwdXQiLCAiLW8iLCBkZWZhdWx0PSIiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCB3aWxsIGJlIHN0b3JlZCBpbnRvIHRo
ZSBwcm92aWRlZCBmaWxlIikKICAgICAgICBvdXRwdXRfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWNl
cGhmcy1maWxlc3lzdGVtLW5hbWUiLCBkZWZhdWx0PSIiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9IlByb3ZpZGVzIHRoZSBuYW1lIG9mIHRoZSBDZXBoIGZpbGVzeXN0ZW0iKQogICAg
ICAgIG91dHB1dF9ncm91cC5hZGRfYXJndW1lbnQoIi0tY2VwaGZzLWRhdGEtcG9vbC1uYW1lIiwg
ZGVmYXVsdD0iIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcm92aWRlcyB0aGUg
bmFtZSBvZiB0aGUgY2VwaGZzIGRhdGEgcG9vbCIpCiAgICAgICAgb3V0cHV0X2dyb3VwLmFkZF9h
cmd1bWVudCgiLS1yYmQtZGF0YS1wb29sLW5hbWUiLCBkZWZhdWx0PSIiLCByZXF1aXJlZD1GYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcm92aWRlcyB0aGUgbmFtZSBvZiB0
aGUgUkJEIGRhdGFwb29sIikKICAgICAgICBvdXRwdXRfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXJn
dy1lbmRwb2ludCIsIGRlZmF1bHQ9IiIsIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IlJhZG9zIEdhdGVXYXkgZW5kcG9pbnQgKGluIDxJUD46PFBPUlQ+IGZv
cm1hdCkiKQogICAgICAgIG91dHB1dF9ncm91cC5hZGRfYXJndW1lbnQoIi0tbW9uaXRvcmluZy1l
bmRwb2ludCIsIGRlZmF1bHQ9IiIsIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IkNlcGggTWFuYWdlciBwcm9tZXRoZXVzIGV4cG9ydGVyIGVuZHBvaW50cyBj
b21tYSBzZXBhcmF0ZWQgbGlzdCBvZiA8SVA+IGVudHJpZXMiKQogICAgICAgIG91dHB1dF9ncm91
cC5hZGRfYXJndW1lbnQoIi0tbW9uaXRvcmluZy1lbmRwb2ludC1wb3J0IiwgZGVmYXVsdD0iOTI4
MyIsIHJlcXVpcmVkPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNlcGgg
TWFuYWdlciBwcm9tZXRoZXVzIGV4cG9ydGVyIHBvcnQiKQoKICAgICAgICB1cGdyYWRlX2dyb3Vw
ID0gYXJnUC5hZGRfYXJndW1lbnRfZ3JvdXAoJ3VwZ3JhZGUnKQogICAgICAgIHVwZ3JhZGVfZ3Jv
dXAuYWRkX2FyZ3VtZW50KCItLXVwZ3JhZGUiLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0
PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlVwZ3JhZGVzIHRoZSAndXNl
cicgd2l0aCBhbGwgdGhlIHBlcm1pc3Npb25zIG5lZWRlZCBmb3IgdGhlIG5ldyBjbHVzdGVyIHZl
cnNpb24iKQoKICAgICAgICBpZiBhcmdzX3RvX3BhcnNlOgogICAgICAgICAgICBhc3NlcnQgdHlw
ZShhcmdzX3RvX3BhcnNlKSA9PSBsaXN0LCBcCiAgICAgICAgICAgICAgICAiQXJndW1lbnQgdG8g
J2dlbl9hcmdfcGFyc2VyJyBzaG91bGQgYmUgYSBsaXN0IgogICAgICAgIGVsc2U6CiAgICAgICAg
ICAgIGFyZ3NfdG9fcGFyc2UgPSBzeXMuYXJndlsxOl0KICAgICAgICByZXR1cm4gYXJnUC5wYXJz
ZV9hcmdzKGFyZ3NfdG9fcGFyc2UpCgogICAgZGVmIF9jaGVja19jb25mbGljdGluZ19vcHRpb25z
KHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLl9hcmdfcGFyc2VyLnVwZ3JhZGUgYW5kIG5vdCBz
ZWxmLl9hcmdfcGFyc2VyLnJiZF9kYXRhX3Bvb2xfbmFtZToKICAgICAgICAgICAgcmFpc2UgRXhl
Y3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJFaXRoZXIgJy0tdXBncmFk
ZScgb3IgJy0tcmJkLWRhdGEtcG9vbC1uYW1lIDxwb29sX25hbWU+JyBzaG91bGQgYmUgc3BlY2lm
aWVkIikKICAgICAgICBpZiBzZWxmLl9hcmdfcGFyc2VyLnVwZ3JhZGUgYW5kIHNlbGYuX2FyZ19w
YXJzZXIucmJkX2RhdGFfcG9vbF9uYW1lOgogICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWls
dXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIkJvdGggJy0tdXBncmFkZScgYW5kICctLXJi
ZC1kYXRhLXBvb2wtbmFtZSA8cG9vbF9uYW1lPicgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQsIGNo
b29zZSBvbmx5IG9uZSIpCiAgICAgICAgIyBhIHVzZXIgbmFtZSBtdXN0IGJlIHByb3ZpZGVkIHdo
aWxlIHVzaW5nICctLXVwZ3JhZGUnIG9wdGlvbgogICAgICAgIGlmIG5vdCBzZWxmLl9hcmdfcGFy
c2VyLnJ1bl9hc191c2VyIGFuZCBzZWxmLl9hcmdfcGFyc2VyLnVwZ3JhZGU6CiAgICAgICAgICAg
IHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiUGxlYXNl
IHByb3ZpZGUgYW4gZXhpc3RpbmcgdXNlci1uYW1lIHRocm91Z2ggJy0tcnVuLWFzLXVzZXInIChv
ciAnLXUnKSBmbGFnIHdoaWxlIHVwZ3JhZGluZyIpCgogICAgZGVmIF9pbnZhbGlkX2VuZHBvaW50
KHNlbGYsIGVuZHBvaW50X3N0cik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpcHY0LCBwb3J0
ID0gZW5kcG9pbnRfc3RyLnNwbGl0KCc6JykKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAg
ICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAg
ICJOb3QgYSBwcm9wZXIgZW5kcG9pbnQ6IHt9LCA8SVA+OjxQT1JUPiwgZm9ybWF0IGlzIGV4cGVj
dGVkIi5mb3JtYXQoZW5kcG9pbnRfc3RyKSkKICAgICAgICBpcFBhcnRzID0gaXB2NC5zcGxpdCgn
LicpCiAgICAgICAgaWYgbGVuKGlwUGFydHMpICE9IDQ6CiAgICAgICAgICAgIHJhaXNlIEV4ZWN1
dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiTm90IGEgdmFsaWQgSVAgYWRk
cmVzczoge30iLmZvcm1hdChpcHY0KSkKICAgICAgICBmb3IgZWFjaFBhcnQgaW4gaXBQYXJ0czoK
ICAgICAgICAgICAgaWYgbm90IGVhY2hQYXJ0LmlzZGlnaXQoKToKICAgICAgICAgICAgICAgIHJh
aXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIklQIGFk
ZHJlc3MgcGFydHMgc2hvdWxkIGJlIG51bWJlcnM6IHt9Ii5mb3JtYXQoaXB2NCkpCiAgICAgICAg
ICAgIGludFBhcnQgPSBpbnQoZWFjaFBhcnQpCiAgICAgICAgICAgIGlmIGludFBhcnQgPCAwIG9y
IGludFBhcnQgPiAyNTQ6CiAgICAgICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhj
ZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgSVAgYWRkcmVzc2VzOiB7
fSIuZm9ybWF0KGlwdjQpKQogICAgICAgIGlmIG5vdCBwb3J0LmlzZGlnaXQoKToKICAgICAgICAg
ICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigiUG9ydCBub3QgdmFsaWQ6IHt9Ii5m
b3JtYXQocG9ydCkpCiAgICAgICAgaW50UG9ydCA9IGludChwb3J0KQogICAgICAgIGlmIGludFBv
cnQgPCAxIG9yIGludFBvcnQgPiAyKioxNi0xOgogICAgICAgICAgICByYWlzZSBFeGVjdXRpb25G
YWlsdXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIk91dCBvZiByYW5nZSBwb3J0IG51bWJl
cjoge30iLmZvcm1hdChwb3J0KSkKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgZW5kcG9p
bnRfZGlhbChzZWxmLCBlbmRwb2ludF9zdHIpOgogICAgICAgIHRyeToKICAgICAgICAgICAgZXAg
PSAiaHR0cDovLyIgKyBlbmRwb2ludF9zdHIKICAgICAgICAgICAgciA9IHJlcXVlc3RzLmhlYWQo
ZXApCiAgICAgICAgICAgIHJjID0gci5zdGF0dXNfY29kZQogICAgICAgICAgICBpZiByYyAhPSAy
MDA6CiAgICAgICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uKAogICAg
ICAgICAgICAgICAgICAgICJ3cm9uZyByZXR1cm4gY29kZSB7fSBvbiByZ3cgZW5kcG9pbnQgaHR0
cCBoZWFkZXIgcmVxdWVzdCIuZm9ybWF0KHJjKSkKICAgICAgICBleGNlcHQgcmVxdWVzdHMuQ29u
bmVjdGlvbkVycm9yOgogICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhjZXB0aW9u
KAogICAgICAgICAgICAgICAgImZhaWxlZCB0byBjb25uZWN0IHRvIHJndyBlbmRwb2ludCB7fSIu
Zm9ybWF0KGVwKSkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnX2xpc3Q9Tm9uZSk6CiAgICAg
ICAgc2VsZi5vdXRfbWFwID0ge30KICAgICAgICBzZWxmLl9leGNsdWRlZF9rZXlzID0gc2V0KCkK
ICAgICAgICBzZWxmLl9hcmdfcGFyc2VyID0gc2VsZi5nZW5fYXJnX3BhcnNlcihhcmdzX3RvX3Bh
cnNlPWFyZ19saXN0KQogICAgICAgIHNlbGYuX2NoZWNrX2NvbmZsaWN0aW5nX29wdGlvbnMoKQog
ICAgICAgIHNlbGYucnVuX2FzX3VzZXIgPSBzZWxmLl9hcmdfcGFyc2VyLnJ1bl9hc191c2VyCiAg
ICAgICAgc2VsZi5vdXRwdXRfZmlsZSA9IHNlbGYuX2FyZ19wYXJzZXIub3V0cHV0CiAgICAgICAg
c2VsZi5jZXBoX2NvbmYgPSBzZWxmLl9hcmdfcGFyc2VyLmNlcGhfY29uZgogICAgICAgIHNlbGYu
TUlOX1VTRVJfQ0FQX1BFUk1JU1NJT05TID0gewogICAgICAgICAgICAgICAgJ21ncic6ICdhbGxv
dyBjb21tYW5kIGNvbmZpZycsCiAgICAgICAgICAgICAgICAnbW9uJzogJ2FsbG93IHIsIGFsbG93
IGNvbW1hbmQgcXVvcnVtX3N0YXR1cywgYWxsb3cgY29tbWFuZCB2ZXJzaW9uJywKICAgICAgICAg
ICAgICAgICdvc2QnOiAiYWxsb3cgcnd4IHBvb2w9ezB9LnJndy5tZXRhLCAiICsKICAgICAgICAg
ICAgICAgICAgICAgICAiYWxsb3cgciBwb29sPS5yZ3cucm9vdCwgIiArCiAgICAgICAgICAgICAg
ICAgICAgICAgImFsbG93IHJ3IHBvb2w9ezB9LnJndy5jb250cm9sLCAiICsKICAgICAgICAgICAg
ICAgICAgICAgICAiYWxsb3cgcnggcG9vbD17MH0ucmd3LmxvZywgIiArCiAgICAgICAgICAgICAg
ICAgICAgICAgImFsbG93IHggcG9vbD17MH0ucmd3LmJ1Y2tldHMuaW5kZXgiCiAgICAgICAgfQog
ICAgICAgICMgaWYgdXNlciBub3QgcHJvdmlkZWQsIGdpdmUgYSBkZWZhdWx0IHVzZXIKICAgICAg
ICBpZiBub3Qgc2VsZi5ydW5fYXNfdXNlciBhbmQgbm90IHNlbGYuX2FyZ19wYXJzZXIudXBncmFk
ZToKICAgICAgICAgICAgc2VsZi5ydW5fYXNfdXNlciA9IHNlbGYuRVhURVJOQUxfVVNFUl9OQU1F
CiAgICAgICAgaWYgbm90IHNlbGYuX2FyZ19wYXJzZXIucmd3X3Bvb2xfcHJlZml4IGFuZCBub3Qg
c2VsZi5fYXJnX3BhcnNlci51cGdyYWRlOgogICAgICAgICAgICBzZWxmLl9hcmdfcGFyc2VyLnJn
d19wb29sX3ByZWZpeCA9IHNlbGYuREVGQVVMVF9SR1dfUE9PTF9QUkVGSVgKICAgICAgICBpZiBz
ZWxmLmNlcGhfY29uZjoKICAgICAgICAgICAgc2VsZi5jbHVzdGVyID0gcmFkb3MuUmFkb3MoY29u
ZmZpbGU9c2VsZi5jZXBoX2NvbmYpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5jbHVz
dGVyID0gcmFkb3MuUmFkb3MoKQogICAgICAgICAgICBzZWxmLmNsdXN0ZXIuY29uZl9yZWFkX2Zp
bGUoKQogICAgICAgIHNlbGYuY2x1c3Rlci5jb25uZWN0KCkKCiAgICBkZWYgc2h1dGRvd24oc2Vs
Zik6CiAgICAgICAgaWYgc2VsZi5jbHVzdGVyLnN0YXRlID09ICJjb25uZWN0ZWQiOgogICAgICAg
ICAgICBzZWxmLmNsdXN0ZXIuc2h1dGRvd24oKQoKICAgIGRlZiBnZXRfZnNpZChzZWxmKToKICAg
ICAgICByZXR1cm4gc3RyKHNlbGYuY2x1c3Rlci5nZXRfZnNpZCgpKQoKICAgIGRlZiBfY29tbW9u
X2NtZF9qc29uX2dlbihzZWxmLCBjbWRfanNvbik6CiAgICAgICAgY21kID0ganNvbi5kdW1wcyhj
bWRfanNvbiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAgcmV0X3ZhbCwgY21kX291dCwgZXJyX21z
ZyA9IHNlbGYuY2x1c3Rlci5tb25fY29tbWFuZChjbWQsIGInJykKICAgICAgICBpZiBzZWxmLl9h
cmdfcGFyc2VyLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJDb21tYW5kIElucHV0OiB7fSIu
Zm9ybWF0KGNtZCkpCiAgICAgICAgICAgIHByaW50KCJSZXR1cm4gVmFsOiB7fVxuQ29tbWFuZCBP
dXRwdXQ6IHt9XG5FcnJvciBNZXNzYWdlOiB7fVxuLS0tLS0tLS0tLVxuIi5mb3JtYXQoCiAgICAg
ICAgICAgICAgICAgIHJldF92YWwsIGNtZF9vdXQsIGVycl9tc2cpKQogICAgICAgIGpzb25fb3V0
ID0ge30KICAgICAgICAjIGlmIHRoZXJlIGlzIG5vIGVycm9yIChpLmU7IHJldF92YWwgaXMgWkVS
TykgYW5kICdjbWRfb3V0JyBpcyBub3QgZW1wdHkKICAgICAgICAjIHRoZW4gY29udmVydCAnY21k
X291dCcgdG8gYSBqc29uIG91dHB1dAogICAgICAgIGlmIHJldF92YWwgPT0gMCBhbmQgY21kX291
dDoKICAgICAgICAgICAganNvbl9vdXQgPSBqc29uLmxvYWRzKGNtZF9vdXQpCiAgICAgICAgcmV0
dXJuIHJldF92YWwsIGpzb25fb3V0LCBlcnJfbXNnCgogICAgZGVmIGdldF9jZXBoX2V4dGVybmFs
X21vbl9kYXRhKHNlbGYpOgogICAgICAgIGNtZF9qc29uID0geyJwcmVmaXgiOiAicXVvcnVtX3N0
YXR1cyIsICJmb3JtYXQiOiAianNvbiJ9CiAgICAgICAgcmV0X3ZhbCwganNvbl9vdXQsIGVycl9t
c2cgPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNtZF9qc29uKQogICAgICAgICMgaWYgdGhl
cmUgaXMgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQsCiAgICAgICAgaWYgcmV0X3ZhbCAhPSAwIG9y
IGxlbihqc29uX291dCkgPT0gMDoKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4
Y2VwdGlvbigKICAgICAgICAgICAgICAgICIncXVvcnVtX3N0YXR1cycgY29tbWFuZCBmYWlsZWQu
XG4iICsKICAgICAgICAgICAgICAgICJFcnJvcjoge30iLmZvcm1hdChlcnJfbXNnIGlmIHJldF92
YWwgIT0gMCBlbHNlIHNlbGYuRU1QVFlfT1VUUFVUX0xJU1QpKQogICAgICAgIHFfbGVhZGVyX25h
bWUgPSBqc29uX291dFsncXVvcnVtX2xlYWRlcl9uYW1lJ10KICAgICAgICBxX2xlYWRlcl9kZXRh
aWxzID0ge30KICAgICAgICBxX2xlYWRlcl9tYXRjaGluZ19saXN0ID0gW2wgZm9yIGwgaW4ganNv
bl9vdXRbJ21vbm1hcCddWydtb25zJ10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGxbJ25hbWUnXSA9PSBxX2xlYWRlcl9uYW1lXQogICAgICAgIGlmIGxlbihxX2xlYWRlcl9t
YXRjaGluZ19saXN0KSA9PSAwOgogICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhj
ZXB0aW9uKCJObyBtYXRjaGluZyAnbW9uJyBkZXRhaWxzIGZvdW5kIikKICAgICAgICBxX2xlYWRl
cl9kZXRhaWxzID0gcV9sZWFkZXJfbWF0Y2hpbmdfbGlzdFswXQogICAgICAgIGlwX3BvcnQgPSBz
dHIocV9sZWFkZXJfZGV0YWlsc1sncHVibGljX2FkZHInXS5zcGxpdCgnLycpWzBdKQogICAgICAg
IHJldHVybiAie309e30iLmZvcm1hdChzdHIocV9sZWFkZXJfbmFtZSksIGlwX3BvcnQpCgogICAg
ZGVmIGdldF9hY3RpdmVfY2VwaF9tZ3Ioc2VsZik6CiAgICAgICAgaWYgc2VsZi5fYXJnX3BhcnNl
ci5tb25pdG9yaW5nX2VuZHBvaW50OgogICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJnX3BhcnNl
ci5tb25pdG9yaW5nX2VuZHBvaW50Kyc6JytzZWxmLl9hcmdfcGFyc2VyLm1vbml0b3JpbmdfZW5k
cG9pbnRfcG9ydAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNtZF9qc29uID0geyJwcmVmaXgi
OiAibWdyIHNlcnZpY2VzIiwgImZvcm1hdCI6ICJqc29uIn0KICAgICAgICAgICAgcmV0X3ZhbCwg
anNvbl9vdXQsIGVycl9tc2cgPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNtZF9qc29uKQog
ICAgICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0LAogICAgICAg
ICAgICBpZiByZXRfdmFsICE9IDAgb3IgbGVuKGpzb25fb3V0KSA9PSAwOgogICAgICAgICAgICAg
ICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAi
J21nciBzZXJ2aWNlcycgY29tbWFuZCBmYWlsZWQuXG4iICsKICAgICAgICAgICAgICAgICAgICAi
RXJyb3I6IHt9Ii5mb3JtYXQoZXJyX21zZyBpZiByZXRfdmFsICE9IDAgZWxzZSBzZWxmLkVNUFRZ
X09VVFBVVF9MSVNUKSkKICAgICAgICAgICAgbW9uaXRvcmluZ19lbmRwb2ludCA9IGpzb25fb3V0
LmdldCgncHJvbWV0aGV1cycpCiAgICAgICAgICAgIGlmIG5vdCBtb25pdG9yaW5nX2VuZHBvaW50
OgogICAgICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigKICAgICAg
ICAgICAgICAgICAgICAiJ3Byb21ldGhldXMnIHNlcnZpY2Ugbm90IGZvdW5kLCBpcyB0aGUgZXhw
b3J0ZXIgZW5hYmxlZD8nLlxuIikKCiAgICAgICAgICAgIG1vbml0b3JpbmdfZW5kcG9pbnQgPSBt
b25pdG9yaW5nX2VuZHBvaW50LnJlcGxhY2UoImh0dHA6Ly8iLCAiIikKICAgICAgICAgICAgbW9u
aXRvcmluZ19lbmRwb2ludCA9IG1vbml0b3JpbmdfZW5kcG9pbnQucmVwbGFjZSgiLyIsICIiKQog
ICAgICAgICAgICByZXR1cm4gbW9uaXRvcmluZ19lbmRwb2ludAoKICAgIGRlZiBjcmVhdGVfY2Vw
aENTSUtleXJpbmdfY2VwaEZTUHJvdmlzaW9uZXIoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAg
Y29tbWFuZDogY2VwaCBhdXRoIGdldC1vci1jcmVhdGUgY2xpZW50LmNzaS1jZXBoZnMtcHJvdmlz
aW9uZXIgbW9uICdhbGxvdyByJyBtZ3IgJ2FsbG93IHJ3JyBvc2QgJ2FsbG93IHJ3IHRhZyBjZXBo
ZnMgbWV0YWRhdGE9KicKICAgICAgICAnJycKICAgICAgICBjbWRfanNvbiA9IHsicHJlZml4Ijog
ImF1dGggZ2V0LW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eSI6ICJjbGll
bnQuY3NpLWNlcGhmcy1wcm92aXNpb25lciIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBb
Im1vbiIsICJhbGxvdyByIiwgIm1nciIsICJhbGxvdyBydyIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIm9zZCIsICJhbGxvdyBydyB0YWcgY2VwaGZzIG1ldGFkYXRhPSoiXSwKICAgICAg
ICAgICAgICAgICAgICAiZm9ybWF0IjogImpzb24ifQogICAgICAgIHJldF92YWwsIGpzb25fb3V0
LCBlcnJfbXNnID0gc2VsZi5fY29tbW9uX2NtZF9qc29uX2dlbihjbWRfanNvbikKICAgICAgICAj
IGlmIHRoZXJlIGlzIGFuIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0LAogICAgICAgIGlmIHJldF92YWwg
IT0gMCBvciBsZW4oanNvbl9vdXQpID09IDA6CiAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZh
aWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiJ2F1dGggZ2V0LW9yLWNyZWF0ZSBjbGll
bnQuY3NpLWNlcGhmcy1wcm92aXNpb25lcicgY29tbWFuZCBmYWlsZWQuXG4iICsKICAgICAgICAg
ICAgICAgICJFcnJvcjoge30iLmZvcm1hdChlcnJfbXNnIGlmIHJldF92YWwgIT0gMCBlbHNlIHNl
bGYuRU1QVFlfT1VUUFVUX0xJU1QpKQogICAgICAgIHJldHVybiBzdHIoanNvbl9vdXRbMF1bJ2tl
eSddKQoKICAgIGRlZiBjcmVhdGVfY2VwaENTSUtleXJpbmdfY2VwaEZTTm9kZShzZWxmKToKICAg
ICAgICBjbWRfanNvbiA9IHsicHJlZml4IjogImF1dGggZ2V0LW9yLWNyZWF0ZSIsCiAgICAgICAg
ICAgICAgICAgICAgImVudGl0eSI6ICJjbGllbnQuY3NpLWNlcGhmcy1ub2RlIiwKICAgICAgICAg
ICAgICAgICAgICAiY2FwcyI6IFsibW9uIiwgImFsbG93IHIiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJtZ3IiLCAiYWxsb3cgcnciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJvc2QiLCAiYWxsb3cgcncgdGFnIGNlcGhmcyAqPSoiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJtZHMiLCAiYWxsb3cgcnciXSwKICAgICAgICAgICAgICAgICAgICAiZm9ybWF0Ijog
Impzb24ifQogICAgICAgIHJldF92YWwsIGpzb25fb3V0LCBlcnJfbXNnID0gc2VsZi5fY29tbW9u
X2NtZF9qc29uX2dlbihjbWRfanNvbikKICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIHVuc3VjY2Vz
c2Z1bCBhdHRlbXB0LAogICAgICAgIGlmIHJldF92YWwgIT0gMCBvciBsZW4oanNvbl9vdXQpID09
IDA6CiAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAg
ICAgICAgICAiJ2F1dGggZ2V0LW9yLWNyZWF0ZSBjbGllbnQuY3NpLWNlcGhmcy1ub2RlJyBjb21t
YW5kIGZhaWxlZC5cbiIgKwogICAgICAgICAgICAgICAgIkVycm9yOiB7fSIuZm9ybWF0KGVycl9t
c2cgaWYgcmV0X3ZhbCAhPSAwIGVsc2Ugc2VsZi5FTVBUWV9PVVRQVVRfTElTVCkpCiAgICAgICAg
cmV0dXJuIHN0cihqc29uX291dFswXVsna2V5J10pCgogICAgZGVmIGNyZWF0ZV9jZXBoQ1NJS2V5
cmluZ19SQkRQcm92aXNpb25lcihzZWxmKToKICAgICAgICBjbWRfanNvbiA9IHsicHJlZml4Ijog
ImF1dGggZ2V0LW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eSI6ICJjbGll
bnQuY3NpLXJiZC1wcm92aXNpb25lciIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBbIm1v
biIsICJwcm9maWxlIHJiZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nciIsICJh
bGxvdyBydyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9zZCIsICJwcm9maWxlIHJi
ZCJdLAogICAgICAgICAgICAgICAgICAgICJmb3JtYXQiOiAianNvbiJ9CiAgICAgICAgcmV0X3Zh
bCwganNvbl9vdXQsIGVycl9tc2cgPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNtZF9qc29u
KQogICAgICAgICMgaWYgdGhlcmUgaXMgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQsCiAgICAgICAg
aWYgcmV0X3ZhbCAhPSAwIG9yIGxlbihqc29uX291dCkgPT0gMDoKICAgICAgICAgICAgcmFpc2Ug
RXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICInYXV0aCBnZXQtb3It
Y3JlYXRlIGNsaWVudC5jc2ktcmJkLXByb3Zpc2lvbmVyJyBjb21tYW5kIGZhaWxlZC5cbiIgKwog
ICAgICAgICAgICAgICAgIkVycm9yOiB7fSIuZm9ybWF0KGVycl9tc2cgaWYgcmV0X3ZhbCAhPSAw
IGVsc2Ugc2VsZi5FTVBUWV9PVVRQVVRfTElTVCkpCiAgICAgICAgcmV0dXJuIHN0cihqc29uX291
dFswXVsna2V5J10pCgogICAgZGVmIGdldF9jZXBoZnNfZGF0YV9wb29sX2RldGFpbHMoc2VsZik6
CiAgICAgICAgY21kX2pzb24gPSB7InByZWZpeCI6ICJmcyBscyIsICJmb3JtYXQiOiAianNvbiJ9
CiAgICAgICAgcmV0X3ZhbCwganNvbl9vdXQsIGVycl9tc2cgPSBzZWxmLl9jb21tb25fY21kX2pz
b25fZ2VuKGNtZF9qc29uKQogICAgICAgICMgaWYgdGhlcmUgaXMgYW4gdW5zdWNjZXNzZnVsIGF0
dGVtcHQsIHJlcG9ydCBhbiBlcnJvcgogICAgICAgIGlmIHJldF92YWwgIT0gMDoKICAgICAgICAg
ICAgIyBpZiBmcyBhbmQgZGF0YV9wb29sIGFyZ3VtZW50cyBhcmUgbm90IHNldCwgc2lsZW50bHkg
cmV0dXJuCiAgICAgICAgICAgIGlmIHNlbGYuX2FyZ19wYXJzZXIuY2VwaGZzX2ZpbGVzeXN0ZW1f
bmFtZSA9PSAiIiBhbmQgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUgPT0g
IiI6CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIyBpZiB1c2VyIGhhcyBwcm92
aWRlZCBhbnkgb2YgdGhlCiAgICAgICAgICAgICMgJy0tY2VwaGZzLWZpbGVzeXN0ZW0tbmFtZScg
b3IgJy0tY2VwaGZzLWRhdGEtcG9vbC1uYW1lJyBhcmd1bWVudHMsCiAgICAgICAgICAgICMgcmFp
c2UgYW4gZXhjZXB0aW9uIGFzIHdlIGFyZSB1bmFibGUgdG8gdmVyaWZ5IHRoZSBhcmdzCiAgICAg
ICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAi
J2ZzIGxzJyBjZXBoIGNhbGwgZmFpbGVkIHdpdGggZXJyb3I6IHt9Ii5mb3JtYXQoZXJyX21zZykp
CgogICAgICAgIG1hdGNoaW5nX2pzb25fb3V0ID0ge30KICAgICAgICAjIGlmICctLWNlcGhmcy1m
aWxlc3lzdGVtLW5hbWUnIGFyZ3VtZW50IGlzIHByb3ZpZGVkLAogICAgICAgICMgY2hlY2sgd2hl
dGhlciB0aGUgcHJvdmlkZWQgZmlsZXN5c3RlbS1uYW1lIGV4aXN0cyBvciBub3QKICAgICAgICBp
ZiBzZWxmLl9hcmdfcGFyc2VyLmNlcGhmc19maWxlc3lzdGVtX25hbWU6CiAgICAgICAgICAgICMg
Z2V0IHRoZSBtYXRjaGluZyBsaXN0CiAgICAgICAgICAgIG1hdGNoaW5nX2pzb25fb3V0X2xpc3Qg
PSBbbWF0Y2hlZCBmb3IgbWF0Y2hlZCBpbiBqc29uX291dAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIHN0cihtYXRjaGVkWyduYW1lJ10pID09IHNlbGYuX2FyZ19wYXJz
ZXIuY2VwaGZzX2ZpbGVzeXN0ZW1fbmFtZV0KICAgICAgICAgICAgIyB1bmFibGUgdG8gZmluZCBh
IG1hdGNoaW5nIGZzLW5hbWUsIHJhaXNlIGFuIGVycm9yCiAgICAgICAgICAgIGlmIGxlbihtYXRj
aGluZ19qc29uX291dF9saXN0KSA9PSAwOgogICAgICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9u
RmFpbHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAoIkZpbGVzeXN0ZW0gcHJvdmlk
ZWQsICd7fScsICIgKwogICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGZvdW5kIGluIHRoZSBm
cy1saXN0OiAne30nIikuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdf
cGFyc2VyLmNlcGhmc19maWxlc3lzdGVtX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFtz
dHIoeFsnbmFtZSddKSBmb3IgeCBpbiBqc29uX291dF0pKQogICAgICAgICAgICBtYXRjaGluZ19q
c29uX291dCA9IG1hdGNoaW5nX2pzb25fb3V0X2xpc3RbMF0KICAgICAgICAjIGlmIGNlcGhmcyBm
aWxlc3lzdGVtIG5hbWUgaXMgbm90IHByb3ZpZGVkLAogICAgICAgICMgdHJ5IHRvIGdldCBhIGRl
ZmF1bHQgZnMgbmFtZSBieSBkb2luZyB0aGUgZm9sbG93aW5nCiAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIyBhLiBjaGVjayBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlc3lzdGVtIGlzIHByZXNl
bnQKICAgICAgICAgICAgaWYgbGVuKGpzb25fb3V0KSA9PSAxOgogICAgICAgICAgICAgICAgbWF0
Y2hpbmdfanNvbl9vdXQgPSBqc29uX291dFswXQogICAgICAgICAgICAjIGIuIG9yIGVsc2UsIGNo
ZWNrIGlmIGRhdGFfcG9vbCBuYW1lIGlzIHByb3ZpZGVkCiAgICAgICAgICAgIGVsaWYgc2VsZi5f
YXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWU6CiAgICAgICAgICAgICAgICAjIGFuZCBp
ZiBwcmVzZW50LCBjaGVjayB3aGV0aGVyIHRoZXJlIGV4aXN0cyBhIGZzIHdoaWNoIGhhcyB0aGUg
ZGF0YV9wb29sCiAgICAgICAgICAgICAgICBmb3IgZWFjaEogaW4ganNvbl9vdXQ6CiAgICAgICAg
ICAgICAgICAgICAgaWYgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUgaW4g
ZWFjaEpbJ2RhdGFfcG9vbHMnXToKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdfanNv
bl9vdXQgPSBlYWNoSgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAg
ICAgIyBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmcyBleGlzdHMsIHRoYXQgbWVhbnMgcHJvdmlk
ZWQgZGF0YV9wb29sIG5hbWUgaXMgaW52YWxpZAogICAgICAgICAgICAgICAgaWYgbm90IG1hdGNo
aW5nX2pzb25fb3V0OgogICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVF
eGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICJQcm92aWRlZCBkYXRhX3Bvb2wgbmFt
ZSwge30sIGRvZXMgbm90IGV4aXN0cyIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUpKQogICAgICAgICAgICAj
IGMuIGlmIG5vdGhpbmcgaXMgc2V0IGFuZCBjb3VsZG4ndCBmaW5kIGEgZGVmYXVsdCwKICAgICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMganVzdCByZXR1cm4gc2lsZW50bHkKICAgICAg
ICAgICAgICAgIHJldHVybgoKICAgICAgICBpZiBtYXRjaGluZ19qc29uX291dDoKICAgICAgICAg
ICAgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZmlsZXN5c3RlbV9uYW1lID0gc3RyKAogICAgICAg
ICAgICAgICAgbWF0Y2hpbmdfanNvbl9vdXRbJ25hbWUnXSkKCiAgICAgICAgaWYgdHlwZShtYXRj
aGluZ19qc29uX291dFsnZGF0YV9wb29scyddKSA9PSBsaXN0OgogICAgICAgICAgICAjIGlmIHRo
ZSB1c2VyIGhhcyBhbHJlYWR5IHByb3ZpZGVkIGRhdGEtcG9vbC1uYW1lLAogICAgICAgICAgICAj
IHRocm91Z2ggLS1jZXBoZnMtZGF0YS1wb29sLW5hbWUKICAgICAgICAgICAgaWYgc2VsZi5fYXJn
X3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWU6CiAgICAgICAgICAgICAgICAjIGlmIHRoZSBw
cm92aWRlZCBuYW1lIGlzIG5vdCBtYXRjaGluZyB3aXRoIHRoZSBvbmUgaW4gdGhlIGxpc3QKICAg
ICAgICAgICAgICAgIGlmIHNlbGYuX2FyZ19wYXJzZXIuY2VwaGZzX2RhdGFfcG9vbF9uYW1lIG5v
dCBpbiBtYXRjaGluZ19qc29uX291dFsnZGF0YV9wb29scyddOgogICAgICAgICAgICAgICAgICAg
IHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAg
ICJ7fTogJ3t9Jywge306IHt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
UHJvdmlkZWQgZGF0YS1wb29sLW5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZG9lc24ndCBtYXRjaCBmcm9tIHRoZSBkYXRhLXBvb2xzJyBsaXN0IiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtzdHIoeCkgZm9yIHggaW4gbWF0Y2hpbmdfanNvbl9vdXRb
J2RhdGFfcG9vbHMnXV0pKQogICAgICAgICAgICAjIGlmIGRhdGFfcG9vbCBuYW1lIGlzIG5vdCBw
cm92aWRlZCwKICAgICAgICAgICAgIyB0aGVuIHRyeSB0byBmaW5kIGEgZGVmYXVsdCBkYXRhIHBv
b2wgbmFtZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIyBpZiBubyBkYXRhX3Bv
b2xzIGV4aXN0LCBzaWxlbnRseSByZXR1cm4KICAgICAgICAgICAgICAgIGlmIGxlbihtYXRjaGlu
Z19qc29uX291dFsnZGF0YV9wb29scyddKSA9PSAwOgogICAgICAgICAgICAgICAgICAgIHJldHVy
bgogICAgICAgICAgICAgICAgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUg
PSBzdHIoCiAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdfanNvbl9vdXRbJ2RhdGFfcG9vbHMn
XVswXSkKICAgICAgICAgICAgIyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAnZGF0YV9wb29s
cycgZXhpc3QsCiAgICAgICAgICAgICMgdGhlbiB3YXJuIHRoZSB1c2VyIHRoYXQgd2UgYXJlIHVz
aW5nIHRoZSBzZWxlY3RlZCBuYW1lCiAgICAgICAgICAgIGlmIGxlbihtYXRjaGluZ19qc29uX291
dFsnZGF0YV9wb29scyddKSA+IDE6CiAgICAgICAgICAgICAgICBwcmludCgie306IHt9XG57fTog
J3t9J1xuIi5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IE11bHRpcGxlIGRh
dGEgcG9vbHMgZGV0ZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgIFtzdHIoeCkgZm9yIHggaW4g
bWF0Y2hpbmdfanNvbl9vdXRbJ2RhdGFfcG9vbHMnXV0sCiAgICAgICAgICAgICAgICAgICAgIlVz
aW5nIHRoZSBkYXRhLXBvb2wiLAogICAgICAgICAgICAgICAgICAgIHNlbGYuX2FyZ19wYXJzZXIu
Y2VwaGZzX2RhdGFfcG9vbF9uYW1lKSkKCiAgICBkZWYgY3JlYXRlX2NlcGhDU0lLZXlyaW5nX1JC
RE5vZGUoc2VsZik6CiAgICAgICAgY21kX2pzb24gPSB7InByZWZpeCI6ICJhdXRoIGdldC1vci1j
cmVhdGUiLAogICAgICAgICAgICAgICAgICAgICJlbnRpdHkiOiAiY2xpZW50LmNzaS1yYmQtbm9k
ZSIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBbIm1vbiIsICJwcm9maWxlIHJiZCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9zZCIsICJwcm9maWxlIHJiZCJdLAogICAgICAg
ICAgICAgICAgICAgICJmb3JtYXQiOiAianNvbiJ9CiAgICAgICAgcmV0X3ZhbCwganNvbl9vdXQs
IGVycl9tc2cgPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNtZF9qc29uKQogICAgICAgICMg
aWYgdGhlcmUgaXMgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQsCiAgICAgICAgaWYgcmV0X3ZhbCAh
PSAwIG9yIGxlbihqc29uX291dCkgPT0gMDoKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFp
bHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICInYXV0aCBnZXQtb3ItY3JlYXRlIGNsaWVu
dC5jc2ktcmJkLW5vZGUnIGNvbW1hbmQgZmFpbGVkXG4iICsKICAgICAgICAgICAgICAgICJFcnJv
cjoge30iLmZvcm1hdChlcnJfbXNnIGlmIHJldF92YWwgIT0gMCBlbHNlIHNlbGYuRU1QVFlfT1VU
UFVUX0xJU1QpKQogICAgICAgIHJldHVybiBzdHIoanNvbl9vdXRbMF1bJ2tleSddKQoKICAgIGRl
ZiBjcmVhdGVfY2hlY2tlcktleShzZWxmKToKICAgICAgICBjbWRfanNvbiA9IHsicHJlZml4Ijog
ImF1dGggZ2V0LW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eSI6IHNlbGYu
cnVuX2FzX3VzZXIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBbIm1vbiIsIHNlbGYuTUlO
X1VTRVJfQ0FQX1BFUk1JU1NJT05TWydtb24nXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibWdyIiwgc2VsZi5NSU5fVVNFUl9DQVBfUEVSTUlTU0lPTlNbJ21nciddLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJvc2QiLCBzZWxmLk1JTl9VU0VSX0NBUF9QRVJNSVNTSU9OU1sn
b3NkJ10uZm9ybWF0KHNlbGYuX2FyZ19wYXJzZXIucmd3X3Bvb2xfcHJlZml4KV0sCiAgICAgICAg
ICAgICAgICAgICAgImZvcm1hdCI6ICJqc29uIn0KICAgICAgICByZXRfdmFsLCBqc29uX291dCwg
ZXJyX21zZyA9IHNlbGYuX2NvbW1vbl9jbWRfanNvbl9nZW4oY21kX2pzb24pCiAgICAgICAgIyBp
ZiB0aGVyZSBpcyBhbiB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdCwKICAgICAgICBpZiByZXRfdmFsICE9
IDAgb3IgbGVuKGpzb25fb3V0KSA9PSAwOgogICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWls
dXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIidhdXRoIGdldC1vci1jcmVhdGUge30nIGNv
bW1hbmQgZmFpbGVkXG4iLmZvcm1hdChzZWxmLnJ1bl9hc191c2VyKSArCiAgICAgICAgICAgICAg
ICAiRXJyb3I6IHt9Ii5mb3JtYXQoZXJyX21zZyBpZiByZXRfdmFsICE9IDAgZWxzZSBzZWxmLkVN
UFRZX09VVFBVVF9MSVNUKSkKICAgICAgICByZXR1cm4gc3RyKGpzb25fb3V0WzBdWydrZXknXSkK
CiAgICBkZWYgX2dlbl9vdXRwdXRfbWFwKHNlbGYpOgogICAgICAgIGlmIHNlbGYub3V0X21hcDoK
ICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgcG9vbHNfdG9fdmFsaWRhdGUgPSBbc2VsZi5fYXJn
X3BhcnNlci5yYmRfZGF0YV9wb29sX25hbWVdCiAgICAgICAgIyBpZiByZ3dfZW5kcG9pbnQgaXMg
cHJvdmlkZWQsIHZhbGlkYXRlIGl0CiAgICAgICAgaWYgc2VsZi5fYXJnX3BhcnNlci5yZ3dfZW5k
cG9pbnQ6CiAgICAgICAgICAgIHNlbGYuX2ludmFsaWRfZW5kcG9pbnQoc2VsZi5fYXJnX3BhcnNl
ci5yZ3dfZW5kcG9pbnQpCiAgICAgICAgICAgIHNlbGYuZW5kcG9pbnRfZGlhbChzZWxmLl9hcmdf
cGFyc2VyLnJnd19lbmRwb2ludCkKICAgICAgICAgICAgcmd3X3Bvb2xfdG9fdmFsaWRhdGUgPSBb
InswfS5yZ3cubWV0YSIuZm9ybWF0KHNlbGYuX2FyZ19wYXJzZXIucmd3X3Bvb2xfcHJlZml4KSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5yZ3cucm9vdCIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7MH0ucmd3LmNvbnRyb2wiLmZvcm1hdCgKICAg
ICAgICAgICAgICAgIHNlbGYuX2FyZ19wYXJzZXIucmd3X3Bvb2xfcHJlZml4KSwKICAgICAgICAg
ICAgICAgICJ7MH0ucmd3LmxvZyIuZm9ybWF0KAogICAgICAgICAgICAgICAgc2VsZi5fYXJnX3Bh
cnNlci5yZ3dfcG9vbF9wcmVmaXgpXQogICAgICAgICAgICBwb29sc190b192YWxpZGF0ZS5leHRl
bmQocmd3X3Bvb2xfdG9fdmFsaWRhdGUpCiAgICAgICAgZm9yIHBvb2wgaW4gcG9vbHNfdG9fdmFs
aWRhdGU6CiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsdXN0ZXIucG9vbF9leGlzdHMocG9vbCk6
CiAgICAgICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uKAogICAgICAg
ICAgICAgICAgICAgICJUaGUgcHJvdmlkZWQgcG9vbCwgJ3t9JywgZG9lcyBub3QgZXhpc3QiLmZv
cm1hdChwb29sKSkKICAgICAgICBzZWxmLl9leGNsdWRlZF9rZXlzLmFkZCgnQ0xVU1RFUl9OQU1F
JykKICAgICAgICBzZWxmLmdldF9jZXBoZnNfZGF0YV9wb29sX2RldGFpbHMoKQogICAgICAgIHNl
bGYub3V0X21hcFsnTkFNRVNQQUNFJ10gPSBzZWxmLl9hcmdfcGFyc2VyLm5hbWVzcGFjZQogICAg
ICAgIHNlbGYub3V0X21hcFsnQ0xVU1RFUl9OQU1FJ10gPSBzZWxmLl9hcmdfcGFyc2VyLmNsdXN0
ZXJfbmFtZQogICAgICAgIHNlbGYub3V0X21hcFsnUk9PS19FWFRFUk5BTF9GU0lEJ10gPSBzZWxm
LmdldF9mc2lkKCkKICAgICAgICBzZWxmLm91dF9tYXBbJ1JPT0tfRVhURVJOQUxfVVNFUk5BTUUn
XSA9IHNlbGYucnVuX2FzX3VzZXIKICAgICAgICBzZWxmLm91dF9tYXBbJ1JPT0tfRVhURVJOQUxf
Q0VQSF9NT05fREFUQSddID0gc2VsZi5nZXRfY2VwaF9leHRlcm5hbF9tb25fZGF0YSgpCiAgICAg
ICAgc2VsZi5vdXRfbWFwWydST09LX0VYVEVSTkFMX1VTRVJfU0VDUkVUJ10gPSBzZWxmLmNyZWF0
ZV9jaGVja2VyS2V5KCkKICAgICAgICBzZWxmLm91dF9tYXBbJ0NTSV9SQkRfTk9ERV9TRUNSRVRf
U0VDUkVUJ10gPSBzZWxmLmNyZWF0ZV9jZXBoQ1NJS2V5cmluZ19SQkROb2RlKCkKICAgICAgICBz
ZWxmLm91dF9tYXBbJ0NTSV9SQkRfUFJPVklTSU9ORVJfU0VDUkVUJ10gPSBzZWxmLmNyZWF0ZV9j
ZXBoQ1NJS2V5cmluZ19SQkRQcm92aXNpb25lcigpCiAgICAgICAgc2VsZi5vdXRfbWFwWydDRVBI
RlNfUE9PTF9OQU1FJ10gPSBzZWxmLl9hcmdfcGFyc2VyLmNlcGhmc19kYXRhX3Bvb2xfbmFtZQog
ICAgICAgIHNlbGYub3V0X21hcFsnQ0VQSEZTX0ZTX05BTUUnXSA9IHNlbGYuX2FyZ19wYXJzZXIu
Y2VwaGZzX2ZpbGVzeXN0ZW1fbmFtZQogICAgICAgIHNlbGYub3V0X21hcFsnQ1NJX0NFUEhGU19O
T0RFX1NFQ1JFVCddID0gJycKICAgICAgICBzZWxmLm91dF9tYXBbJ0NTSV9DRVBIRlNfUFJPVklT
SU9ORVJfU0VDUkVUJ10gPSAnJwogICAgICAgICMgY3JlYXRlIENlcGhGUyBub2RlIGFuZCBwcm92
aXNpb25lciBrZXlyaW5nIG9ubHkgd2hlbiBNRFMgZXhpc3RzCiAgICAgICAgaWYgc2VsZi5vdXRf
bWFwWydDRVBIRlNfRlNfTkFNRSddIGFuZCBzZWxmLm91dF9tYXBbJ0NFUEhGU19QT09MX05BTUUn
XToKICAgICAgICAgICAgc2VsZi5vdXRfbWFwWydDU0lfQ0VQSEZTX05PREVfU0VDUkVUJ10gPSBz
ZWxmLmNyZWF0ZV9jZXBoQ1NJS2V5cmluZ19jZXBoRlNOb2RlKCkKICAgICAgICAgICAgc2VsZi5v
dXRfbWFwWydDU0lfQ0VQSEZTX1BST1ZJU0lPTkVSX1NFQ1JFVCddID0gc2VsZi5jcmVhdGVfY2Vw
aENTSUtleXJpbmdfY2VwaEZTUHJvdmlzaW9uZXIoKQogICAgICAgIHNlbGYub3V0X21hcFsnUkdX
X0VORFBPSU5UJ10gPSBzZWxmLl9hcmdfcGFyc2VyLnJnd19lbmRwb2ludAogICAgICAgIHNlbGYu
b3V0X21hcFsnTU9OSVRPUklOR19FTkRQT0lOVCddID0gc2VsZi5nZXRfYWN0aXZlX2NlcGhfbWdy
KCkuc3BsaXQoIjoiKVsKICAgICAgICAgICAgMF0KICAgICAgICBzZWxmLm91dF9tYXBbJ01PTklU
T1JJTkdfRU5EUE9JTlRfUE9SVCddID0gc2VsZi5nZXRfYWN0aXZlX2NlcGhfbWdyKCkuc3BsaXQo
IjoiKVsKICAgICAgICAgICAgMV0KICAgICAgICBzZWxmLm91dF9tYXBbJ1JCRF9QT09MX05BTUUn
XSA9IHNlbGYuX2FyZ19wYXJzZXIucmJkX2RhdGFfcG9vbF9uYW1lCiAgICAgICAgc2VsZi5vdXRf
bWFwWydSR1dfUE9PTF9QUkVGSVgnXSA9IHNlbGYuX2FyZ19wYXJzZXIucmd3X3Bvb2xfcHJlZml4
CgogICAgZGVmIGdlbl9zaGVsbF9vdXQoc2VsZik6CiAgICAgICAgc2VsZi5fZ2VuX291dHB1dF9t
YXAoKQogICAgICAgIHNoT3V0SU8gPSBTdHJpbmdJTygpCiAgICAgICAgZm9yIGssIHYgaW4gc2Vs
Zi5vdXRfbWFwLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHYgYW5kIGsgbm90IGluIHNlbGYuX2V4
Y2x1ZGVkX2tleXM6CiAgICAgICAgICAgICAgICBzaE91dElPLndyaXRlKCdleHBvcnQge309e317
fScuZm9ybWF0KGssIHYsIExJTkVTRVApKQogICAgICAgIHNoT3V0ID0gc2hPdXRJTy5nZXR2YWx1
ZSgpCiAgICAgICAgc2hPdXRJTy5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHNoT3V0CgogICAgZGVm
IGdlbl9qc29uX291dChzZWxmKToKICAgICAgICBzZWxmLl9nZW5fb3V0cHV0X21hcCgpCiAgICAg
ICAganNvbl9vdXQgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogInJv
b2stY2VwaC1tb24tZW5kcG9pbnRzIiwKICAgICAgICAgICAgICAgICJraW5kIjogIkNvbmZpZ01h
cCIsCiAgICAgICAgICAgICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAiZGF0YSI6
IHNlbGYub3V0X21hcFsnUk9PS19FWFRFUk5BTF9DRVBIX01PTl9EQVRBJ10sCiAgICAgICAgICAg
ICAgICAgICAgIm1heE1vbklkIjogIjAiLAogICAgICAgICAgICAgICAgICAgICJtYXBwaW5nIjog
Int9IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAibmFtZSI6ICJyb29rLWNlcGgtbW9uIiwKICAgICAgICAgICAgICAgICJraW5k
IjogIlNlY3JldCIsCiAgICAgICAgICAgICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAg
ICAiYWRtaW4tc2VjcmV0IjogImFkbWluLXNlY3JldCIsCiAgICAgICAgICAgICAgICAgICAgImZz
aWQiOiBzZWxmLm91dF9tYXBbJ1JPT0tfRVhURVJOQUxfRlNJRCddLAogICAgICAgICAgICAgICAg
ICAgICJtb24tc2VjcmV0IjogIm1vbi1zZWNyZXQiCiAgICAgICAgICAgICAgICB9LAogICAgICAg
ICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJyb29rLWNlcGgt
b3BlcmF0b3ItY3JlZHMiLAogICAgICAgICAgICAgICAgImtpbmQiOiAiU2VjcmV0IiwKICAgICAg
ICAgICAgICAgICJkYXRhIjogewogICAgICAgICAgICAgICAgICAgICJ1c2VySUQiOiBzZWxmLm91
dF9tYXBbJ1JPT0tfRVhURVJOQUxfVVNFUk5BTUUnXSwKICAgICAgICAgICAgICAgICAgICAidXNl
cktleSI6IHNlbGYub3V0X21hcFsnUk9PS19FWFRFUk5BTF9VU0VSX1NFQ1JFVCddCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJu
YW1lIjogInJvb2stY3NpLXJiZC1ub2RlIiwKICAgICAgICAgICAgICAgICJraW5kIjogIlNlY3Jl
dCIsCiAgICAgICAgICAgICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAidXNlcklE
IjogJ2NzaS1yYmQtbm9kZScsCiAgICAgICAgICAgICAgICAgICAgInVzZXJLZXkiOiBzZWxmLm91
dF9tYXBbJ0NTSV9SQkRfTk9ERV9TRUNSRVRfU0VDUkVUJ10KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2VwaC1y
YmQiLAogICAgICAgICAgICAgICAgImtpbmQiOiAiU3RvcmFnZUNsYXNzIiwKICAgICAgICAgICAg
ICAgICJkYXRhIjogewogICAgICAgICAgICAgICAgICAgICJwb29sIjogc2VsZi5vdXRfbWFwWydS
QkRfUE9PTF9OQU1FJ10KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAibW9uaXRvcmluZy1lbmRwb2ludCIsCiAgICAg
ICAgICAgICAgICAia2luZCI6ICJDZXBoQ2x1c3RlciIsCiAgICAgICAgICAgICAgICAiZGF0YSI6
IHsKICAgICAgICAgICAgICAgICAgICAiTW9uaXRvcmluZ0VuZHBvaW50Ijogc2VsZi5vdXRfbWFw
WydNT05JVE9SSU5HX0VORFBPSU5UJ10sCiAgICAgICAgICAgICAgICAgICAgIk1vbml0b3JpbmdQ
b3J0Ijogc2VsZi5vdXRfbWFwWydNT05JVE9SSU5HX0VORFBPSU5UX1BPUlQnXQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgXQoKICAgICAgICAjIGlmICdDU0lfUkJEX1BS
T1ZJU0lPTkVSX1NFQ1JFVCcgZXhpc3RzLCB0aGVuIG9ubHkgYWRkICdyb29rLWNzaS1yYmQtcHJv
dmlzaW9uZXInIFNlY3JldAogICAgICAgIGlmIHNlbGYub3V0X21hcFsnQ1NJX1JCRF9QUk9WSVNJ
T05FUl9TRUNSRVQnXToKICAgICAgICAgICAganNvbl9vdXQuYXBwZW5kKHsKICAgICAgICAgICAg
ICAgICJuYW1lIjogInJvb2stY3NpLXJiZC1wcm92aXNpb25lciIsCiAgICAgICAgICAgICAgICAi
a2luZCI6ICJTZWNyZXQiLAogICAgICAgICAgICAgICAgImRhdGEiOiB7CiAgICAgICAgICAgICAg
ICAgICAgInVzZXJJRCI6ICdjc2ktcmJkLXByb3Zpc2lvbmVyJywKICAgICAgICAgICAgICAgICAg
ICAidXNlcktleSI6IHNlbGYub3V0X21hcFsnQ1NJX1JCRF9QUk9WSVNJT05FUl9TRUNSRVQnXQog
ICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSkKICAgICAgICAjIGlmICdDU0lfQ0VQSEZT
X1BST1ZJU0lPTkVSX1NFQ1JFVCcgZXhpc3RzLCB0aGVuIG9ubHkgYWRkICdyb29rLWNzaS1jZXBo
ZnMtcHJvdmlzaW9uZXInIFNlY3JldAogICAgICAgIGlmIHNlbGYub3V0X21hcFsnQ1NJX0NFUEhG
U19QUk9WSVNJT05FUl9TRUNSRVQnXToKICAgICAgICAgICAganNvbl9vdXQuYXBwZW5kKHsKICAg
ICAgICAgICAgICAgICJuYW1lIjogInJvb2stY3NpLWNlcGhmcy1wcm92aXNpb25lciIsCiAgICAg
ICAgICAgICAgICAia2luZCI6ICJTZWNyZXQiLAogICAgICAgICAgICAgICAgImRhdGEiOiB7CiAg
ICAgICAgICAgICAgICAgICAgImFkbWluSUQiOiAnY3NpLWNlcGhmcy1wcm92aXNpb25lcicsCiAg
ICAgICAgICAgICAgICAgICAgImFkbWluS2V5Ijogc2VsZi5vdXRfbWFwWydDU0lfQ0VQSEZTX1BS
T1ZJU0lPTkVSX1NFQ1JFVCddCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KQogICAg
ICAgICMgaWYgJ0NTSV9DRVBIRlNfTk9ERV9TRUNSRVQnIGV4aXN0cywgdGhlbiBvbmx5IGFkZCAn
cm9vay1jc2ktY2VwaGZzLW5vZGUnIFNlY3JldAogICAgICAgIGlmIHNlbGYub3V0X21hcFsnQ1NJ
X0NFUEhGU19OT0RFX1NFQ1JFVCddOgogICAgICAgICAgICBqc29uX291dC5hcHBlbmQoewogICAg
ICAgICAgICAgICAgIm5hbWUiOiAicm9vay1jc2ktY2VwaGZzLW5vZGUiLAogICAgICAgICAgICAg
ICAgImtpbmQiOiAiU2VjcmV0IiwKICAgICAgICAgICAgICAgICJkYXRhIjogewogICAgICAgICAg
ICAgICAgICAgICJhZG1pbklEIjogJ2NzaS1jZXBoZnMtbm9kZScsCiAgICAgICAgICAgICAgICAg
ICAgImFkbWluS2V5Ijogc2VsZi5vdXRfbWFwWydDU0lfQ0VQSEZTX05PREVfU0VDUkVUJ10KICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICAjIGlmICdDRVBIRlNfRlNfTkFN
RScgZXhpc3RzLCB0aGVuIG9ubHkgYWRkICdjZXBoZnMnIFN0b3JhZ2VDbGFzcwogICAgICAgIGlm
IHNlbGYub3V0X21hcFsnQ0VQSEZTX0ZTX05BTUUnXToKICAgICAgICAgICAganNvbl9vdXQuYXBw
ZW5kKHsKICAgICAgICAgICAgICAgICJuYW1lIjogImNlcGhmcyIsCiAgICAgICAgICAgICAgICAi
a2luZCI6ICJTdG9yYWdlQ2xhc3MiLAogICAgICAgICAgICAgICAgImRhdGEiOiB7CiAgICAgICAg
ICAgICAgICAgICAgImZzTmFtZSI6IHNlbGYub3V0X21hcFsnQ0VQSEZTX0ZTX05BTUUnXSwKICAg
ICAgICAgICAgICAgICAgICAicG9vbCI6IHNlbGYub3V0X21hcFsnQ0VQSEZTX1BPT0xfTkFNRSdd
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgIyBpZiAnUkdXX0VORFBP
SU5UJyBleGlzdHMsIHRoZW4gb25seSBhZGQgJ2NlcGgtcmd3JyBTdG9yYWdlQ2xhc3MKICAgICAg
ICBpZiBzZWxmLm91dF9tYXBbJ1JHV19FTkRQT0lOVCddOgogICAgICAgICAgICBqc29uX291dC5h
cHBlbmQoewogICAgICAgICAgICAgICAgIm5hbWUiOiAiY2VwaC1yZ3ciLAogICAgICAgICAgICAg
ICAgImtpbmQiOiAiU3RvcmFnZUNsYXNzIiwKICAgICAgICAgICAgICAgICJkYXRhIjogewogICAg
ICAgICAgICAgICAgICAgICJlbmRwb2ludCI6IHNlbGYub3V0X21hcFsnUkdXX0VORFBPSU5UJ10s
CiAgICAgICAgICAgICAgICAgICAgInBvb2xQcmVmaXgiOiBzZWxmLm91dF9tYXBbJ1JHV19QT09M
X1BSRUZJWCddCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgcmV0dXJu
IGpzb24uZHVtcHMoanNvbl9vdXQpK0xJTkVTRVAKCiAgICBkZWYgdXBncmFkZV91c2VyX3Blcm1p
c3Npb25zKHNlbGYpOgogICAgICAgICMgY2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdXNlciBleGlz
dHMgb3Igbm90CiAgICAgICAgY21kX2pzb24gPSB7InByZWZpeCI6ICJhdXRoIGdldCIsICJlbnRp
dHkiOiBzZWxmLnJ1bl9hc191c2VyLCAiZm9ybWF0IjogImpzb24ifQogICAgICAgIHJldF92YWws
IGpzb25fb3V0LCBlcnJfbXNnID0gc2VsZi5fY29tbW9uX2NtZF9qc29uX2dlbihjbWRfanNvbikK
ICAgICAgICBpZiByZXRfdmFsICE9IDAgb3IgbGVuKGpzb25fb3V0KSA9PSAwOgogICAgICAgICAg
ICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uKCInYXV0aCBnZXQge30nIGNvbW1hbmQg
ZmFpbGVkLlxuIi5mb3JtYXQoc2VsZi5ydW5fYXNfdXNlcikgKwogICAgICAgICAgICAgICAgIkVy
cm9yOiB7fSIuZm9ybWF0KGVycl9tc2cgaWYgcmV0X3ZhbCAhPSAwIGVsc2Ugc2VsZi5FTVBUWV9P
VVRQVVRfTElTVCkpCiAgICAgICAgal9maXJzdCA9IGpzb25fb3V0WzBdCiAgICAgICAgZXhpc3Rp
bmdfY2FwcyA9IGpfZmlyc3RbJ2NhcHMnXQogICAgICAgIG9zZF9jYXAgPSAib3NkIgogICAgICAg
IGNhcF9rZXlzID0gWyJtb24iLCAibWdyIiwgIm9zZCJdCiAgICAgICAgZm9yIGVhY2hDYXAgaW4g
Y2FwX2tleXM6CiAgICAgICAgICAgIG1pbl9jYXBfdmFsdWVzID0gc2VsZi5NSU5fVVNFUl9DQVBf
UEVSTUlTU0lPTlMuZ2V0KGVhY2hDYXAsICcnKQogICAgICAgICAgICBjdXJfY2FwX3ZhbHVlcyA9
IGV4aXN0aW5nX2NhcHMuZ2V0KGVhY2hDYXAsICcnKQogICAgICAgICAgICAjIGRldGVjdCByZ3ct
cG9vbC1wcmVmaXgKICAgICAgICAgICAgaWYgZWFjaENhcCA9PSBvc2RfY2FwOgogICAgICAgICAg
ICAgICAgIyBpZiBkaXJlY3RseSBwcm92aWRlZCB0aHJvdWdoICctLXJndy1wb29sLXByZWZpeCcg
YXJndW1lbnQsIHVzZSBpdAogICAgICAgICAgICAgICAgaWYgc2VsZi5fYXJnX3BhcnNlci5yZ3df
cG9vbF9wcmVmaXg6CiAgICAgICAgICAgICAgICAgICAgbWluX2NhcF92YWx1ZXMgPSBtaW5fY2Fw
X3ZhbHVlcy5mb3JtYXQoc2VsZi5fYXJnX3BhcnNlci5yZ3dfcG9vbF9wcmVmaXgpCiAgICAgICAg
ICAgICAgICAjIG9yIGVsc2UgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSB0aGUgZXhpc3RpbmcvY3Vy
cmVudCBvc2QgY2FwIHZhbHVlcwogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICAgICByYyA9IHJlLmNvbXBpbGUocicgcG9vbD0oW14uXSspXC5yZ3dcLlteIF0qJykKICAgICAg
ICAgICAgICAgICAgICAjICdmaW5kYWxsKCknIG1ldGhvZCB3aWxsIGdpdmUgYSBsaXN0IG9mIHBy
ZWZpeGVzCiAgICAgICAgICAgICAgICAgICAgIyBhbmQgJ3NldCcgd2lsbCBlbGltaW5hdGUgYW55
IGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICBjdXJfcmd3X3Bvb2xfcHJlZml4X2xpc3Qg
PSBsaXN0KHNldChyYy5maW5kYWxsKGN1cl9jYXBfdmFsdWVzKSkpCiAgICAgICAgICAgICAgICAg
ICAgaWYgbGVuKGN1cl9yZ3dfcG9vbF9wcmVmaXhfbGlzdCkgIT0gMToKICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGRldGVy
bWluZSAncmd3LXBvb2wtcHJlZngnLiBQbGVhc2UgcHJvdmlkZSBvbmUgd2l0aCAnLS1yZ3ctcG9v
bC1wcmVmaXgnIGZsYWciKQogICAgICAgICAgICAgICAgICAgIG1pbl9jYXBfdmFsdWVzID0gbWlu
X2NhcF92YWx1ZXMuZm9ybWF0KGN1cl9yZ3dfcG9vbF9wcmVmaXhfbGlzdFswXSkKICAgICAgICAg
ICAgY3VyX2NhcF9wZXJtX2xpc3QgPSBbeC5zdHJpcCgpIGZvciB4IGluIGN1cl9jYXBfdmFsdWVz
LnNwbGl0KCcsJykgaWYgeC5zdHJpcCgpXQogICAgICAgICAgICBtaW5fY2FwX3Blcm1fbGlzdCA9
IFt4LnN0cmlwKCkgZm9yIHggaW4gbWluX2NhcF92YWx1ZXMuc3BsaXQoJywnKSBpZiB4LnN0cmlw
KCldCiAgICAgICAgICAgIG1pbl9jYXBfcGVybV9saXN0LmV4dGVuZChjdXJfY2FwX3Blcm1fbGlz
dCkKICAgICAgICAgICAgIyBlbGltaW5hdGUgZHVwbGljYXRlcyB3aXRob3V0IHVzaW5nICdzZXQn
CiAgICAgICAgICAgICMgc2V0IHJlLW9yZGVycyBpdGVtcyBpbiB0aGUgbGlzdCBhbmQgd2UgaGF2
ZSB0byBrZWVwIHRoZSBvcmRlcgogICAgICAgICAgICBuZXdfY2FwX3Blcm1fbGlzdCA9IFtdCiAg
ICAgICAgICAgIFtuZXdfY2FwX3Blcm1fbGlzdC5hcHBlbmQoeCkgZm9yIHggaW4gbWluX2NhcF9w
ZXJtX2xpc3QgaWYgeCBub3QgaW4gbmV3X2NhcF9wZXJtX2xpc3RdCiAgICAgICAgICAgIGV4aXN0
aW5nX2NhcHNbZWFjaENhcF0gPSAiLCAiLmpvaW4obmV3X2NhcF9wZXJtX2xpc3QpCiAgICAgICAg
Y21kX2pzb24gPSB7InByZWZpeCI6ICJhdXRoIGNhcHMiLAogICAgICAgICAgICAgICAgICAgICJl
bnRpdHkiOiBzZWxmLnJ1bl9hc191c2VyLAogICAgICAgICAgICAgICAgICAgICJjYXBzIjogWyJt
b24iLCBleGlzdGluZ19jYXBzWyJtb24iXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
bWdyIiwgZXhpc3RpbmdfY2Fwc1sibWdyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Im9zZCIsIGV4aXN0aW5nX2NhcHNbIm9zZCJdXSwKICAgICAgICAgICAgICAgICAgICAiZm9ybWF0
IjogImpzb24ifQogICAgICAgIHJldF92YWwsIGpzb25fb3V0LCBlcnJfbXNnID0gc2VsZi5fY29t
bW9uX2NtZF9qc29uX2dlbihjbWRfanNvbikKICAgICAgICBpZiByZXRfdmFsICE9IDA6CiAgICAg
ICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oIidhdXRoIGNhcHMge30nIGNv
bW1hbmQgZmFpbGVkLlxuIi5mb3JtYXQoc2VsZi5ydW5fYXNfdXNlcikgKwogICAgICAgICAgICAg
ICAgIkVycm9yOiB7fSIuZm9ybWF0KGVycl9tc2cpKQogICAgICAgIHByaW50KCJVcGRhdGVkIHVz
ZXIsIHt9LCBzdWNjZXNzZnVsbHkuIi5mb3JtYXQoc2VsZi5ydW5fYXNfdXNlcikpCgogICAgZGVm
IG1haW4oc2VsZik6CiAgICAgICAgZ2VuZXJhdGVkX291dHB1dCA9ICcnCiAgICAgICAgaWYgc2Vs
Zi5fYXJnX3BhcnNlci51cGdyYWRlOgogICAgICAgICAgICBzZWxmLnVwZ3JhZGVfdXNlcl9wZXJt
aXNzaW9ucygpCiAgICAgICAgZWxpZiBzZWxmLl9hcmdfcGFyc2VyLmZvcm1hdCA9PSAnanNvbic6
CiAgICAgICAgICAgIGdlbmVyYXRlZF9vdXRwdXQgPSBzZWxmLmdlbl9qc29uX291dCgpCiAgICAg
ICAgZWxpZiBzZWxmLl9hcmdfcGFyc2VyLmZvcm1hdCA9PSAnYmFzaCc6CiAgICAgICAgICAgIGdl
bmVyYXRlZF9vdXRwdXQgPSBzZWxmLmdlbl9zaGVsbF9vdXQoKQogICAgICAgIGVsc2U6CiAgICAg
ICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oIlVuc3VwcG9ydGVkIGZvcm1h
dDoge30iLmZvcm1hdCgKICAgICAgICAgICAgICAgIHNlbGYuX2FyZ19wYXJzZXIuZm9ybWF0KSkK
ICAgICAgICBwcmludCgne30nLmZvcm1hdChnZW5lcmF0ZWRfb3V0cHV0KSkKICAgICAgICBpZiBz
ZWxmLm91dHB1dF9maWxlIGFuZCBnZW5lcmF0ZWRfb3V0cHV0OgogICAgICAgICAgICBmT3V0ID0g
b3BlbihzZWxmLm91dHB1dF9maWxlLCAndycpCiAgICAgICAgICAgIGZPdXQud3JpdGUoZ2VuZXJh
dGVkX291dHB1dCkKICAgICAgICAgICAgZk91dC5jbG9zZSgpCgoKIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNQUlO
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHJqT2JqID0gUmFk
b3NKU09OKCkKICAgIHRyeToKICAgICAgICByak9iai5tYWluKCkKICAgIGV4Y2VwdCBFeGVjdXRp
b25GYWlsdXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICBwcmludCgiRXhjZWN1dGlvbiBGYWls
ZWQ6IHt9Ii5mb3JtYXQoZXJyKSkKICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBrRXJyOgogICAgICAg
IHByaW50KCJLZXlFcnJvcjogJXMiLCBrRXJyKQogICAgZXhjZXB0IE9TRXJyb3IgYXMgb3NFcnI6
CiAgICAgICAgcHJpbnQoIkVycm9yIHdoaWxlIHRyeWluZyB0byBvdXRwdXQgdGhlIGRhdGE6IHt9
Ii5mb3JtYXQob3NFcnIpKQogICAgZmluYWxseToKICAgICAgICByak9iai5zaHV0ZG93bigpCgoK
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMj
IyMjIyMjIyMjIyMjIyBURVNUICMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyB0aGlzIGlzIG1haW5seSBmb3IgdGVz
dGluZyBhbmQgY291bGQgYmUgdXNlZCB3aGVyZSAncmFkb3MnIGlzIG5vdCBhdmFpbGFibGUKY2xh
c3MgRHVtbXlSYWRvcyhvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNl
bGYucmV0dXJuX3ZhbCA9IDAKICAgICAgICBzZWxmLmVycl9tZXNzYWdlID0gJycKICAgICAgICBz
ZWxmLnN0YXRlID0gJ2Nvbm5lY3RlZCcKICAgICAgICBzZWxmLmNtZF9vdXRwdXRfbWFwID0ge30K
ICAgICAgICBzZWxmLmNtZF9uYW1lcyA9IHt9CiAgICAgICAgc2VsZi5faW5pdF9jbWRfb3V0cHV0
X21hcCgpCgogICAgZGVmIF9pbml0X2NtZF9vdXRwdXRfbWFwKHNlbGYpOgogICAgICAgIHNlbGYu
Y21kX25hbWVzWydmcyBscyddID0gJycneyJmb3JtYXQiOiAianNvbiIsICJwcmVmaXgiOiAiZnMg
bHMifScnJwogICAgICAgIHNlbGYuY21kX25hbWVzWydxdW9ydW1fc3RhdHVzJ10gPSAnJyd7ImZv
cm1hdCI6ICJqc29uIiwgInByZWZpeCI6ICJxdW9ydW1fc3RhdHVzIn0nJycKICAgICAgICAjIGFs
bCB0aGUgY29tbWFuZHMgYW5kIHRoZWlyIG91dHB1dAogICAgICAgIHNlbGYuY21kX291dHB1dF9t
YXBbc2VsZi5jbWRfbmFtZXNbJ2ZzIGxzJ10KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0g
PSAnJydbeyJuYW1lIjoibXlmcyIsIm1ldGFkYXRhX3Bvb2wiOiJteWZzLW1ldGFkYXRhIiwibWV0
YWRhdGFfcG9vbF9pZCI6MiwiZGF0YV9wb29sX2lkcyI6WzNdLCJkYXRhX3Bvb2xzIjpbIm15ZnMt
ZGF0YTAiXX1dJycnCiAgICAgICAgc2VsZi5jbWRfb3V0cHV0X21hcFtzZWxmLmNtZF9uYW1lc1sn
cXVvcnVtX3N0YXR1cyddXSA9ICcnJ3siZWxlY3Rpb25fZXBvY2giOjMsInF1b3J1bSI6WzBdLCJx
dW9ydW1fbmFtZXMiOlsiYSJdLCJxdW9ydW1fbGVhZGVyX25hbWUiOiJhIiwicXVvcnVtX2FnZSI6
MTQzODUsImZlYXR1cmVzIjp7InF1b3J1bV9jb24iOiI0NTQwMTM4MjkyODM2Njk2MDYzIiwicXVv
cnVtX21vbiI6WyJrcmFrZW4iLCJsdW1pbm91cyIsIm1pbWljIiwib3NkbWFwLXBydW5lIiwibmF1
dGlsdXMiLCJvY3RvcHVzIl19LCJtb25tYXAiOnsiZXBvY2giOjEsImZzaWQiOiJhZjRlMTY3My0w
YjcyLTQwMmQtOTkwYS0yMmQyOTE5ZDBmMWMiLCJtb2RpZmllZCI6IjIwMjAtMDUtMDdUMDM6MzY6
MzkuOTE4MDM1WiIsImNyZWF0ZWQiOiIyMDIwLTA1LTA3VDAzOjM2OjM5LjkxODAzNVoiLCJtaW5f
bW9uX3JlbGVhc2UiOjE1LCJtaW5fbW9uX3JlbGVhc2VfbmFtZSI6Im9jdG9wdXMiLCJmZWF0dXJl
cyI6eyJwZXJzaXN0ZW50IjpbImtyYWtlbiIsImx1bWlub3VzIiwibWltaWMiLCJvc2RtYXAtcHJ1
bmUiLCJuYXV0aWx1cyIsIm9jdG9wdXMiXSwib3B0aW9uYWwiOltdfSwibW9ucyI6W3sicmFuayI6
MCwibmFtZSI6ImEiLCJwdWJsaWNfYWRkcnMiOnsiYWRkcnZlYyI6W3sidHlwZSI6InYyIiwiYWRk
ciI6IjEwLjExMC4yMDUuMTc0OjMzMDAiLCJub25jZSI6MH0seyJ0eXBlIjoidjEiLCJhZGRyIjoi
MTAuMTEwLjIwNS4xNzQ6Njc4OSIsIm5vbmNlIjowfV19LCJhZGRyIjoiMTAuMTEwLjIwNS4xNzQ6
Njc4OS8wIiwicHVibGljX2FkZHIiOiIxMC4xMTAuMjA1LjE3NDo2Nzg5LzAiLCJwcmlvcml0eSI6
MCwid2VpZ2h0IjowfV19fScnJwogICAgICAgIHNlbGYuY21kX291dHB1dF9tYXBbJycneyJjYXBz
IjogWyJtb24iLCAiYWxsb3cgciwgYWxsb3cgY29tbWFuZCBxdW9ydW1fc3RhdHVzIiwgIm9zZCIs
ICJhbGxvdyByd3ggcG9vbD1kZWZhdWx0LnJndy5tZXRhLCBhbGxvdyByIHBvb2w9LnJndy5yb290
LCBhbGxvdyBydyBwb29sPWRlZmF1bHQucmd3LmNvbnRyb2wsIGFsbG93IHggcG9vbD1kZWZhdWx0
LnJndy5idWNrZXRzLmluZGV4Il0sICJlbnRpdHkiOiAiY2xpZW50LmhlYWx0aGNoZWNrZXIiLCAi
Zm9ybWF0IjogImpzb24iLCAicHJlZml4IjogImF1dGggZ2V0LW9yLWNyZWF0ZSJ9JycnXSA9ICcn
J1t7ImVudGl0eSI6ImNsaWVudC5oZWFsdGhjaGVja2VyIiwia2V5IjoiQVFERmtiTmVmdDViRlJB
QVRuZExOVVNFS3J1b3p4aVppM2xyZEE9PSIsImNhcHMiOnsibW9uIjoiYWxsb3cgciwgYWxsb3cg
Y29tbWFuZCBxdW9ydW1fc3RhdHVzIiwib3NkIjoiYWxsb3cgcnd4IHBvb2w9ZGVmYXVsdC5yZ3cu
bWV0YSwgYWxsb3cgciBwb29sPS5yZ3cucm9vdCwgYWxsb3cgcncgcG9vbD1kZWZhdWx0LnJndy5j
b250cm9sLCBhbGxvdyB4IHBvb2w9ZGVmYXVsdC5yZ3cuYnVja2V0cy5pbmRleCJ9fV0nJycKICAg
ICAgICBzZWxmLmNtZF9vdXRwdXRfbWFwWycnJ3siY2FwcyI6IFsibW9uIiwgInByb2ZpbGUgcmJk
IiwgIm9zZCIsICJwcm9maWxlIHJiZCJdLCAiZW50aXR5IjogImNsaWVudC5jc2ktcmJkLW5vZGUi
LCAiZm9ybWF0IjogImpzb24iLCAicHJlZml4IjogImF1dGggZ2V0LW9yLWNyZWF0ZSJ9JycnXSA9
ICcnJ1t7ImVudGl0eSI6ImNsaWVudC5jc2ktcmJkLW5vZGUiLCJrZXkiOiJBUUJPZ3JOZUhiSzFB
eEFBdWJZQmVWOFMxVS9HUHpxNVNWZXE2Zz09IiwiY2FwcyI6eyJtb24iOiJwcm9maWxlIHJiZCIs
Im9zZCI6InByb2ZpbGUgcmJkIn19XScnJwogICAgICAgIHNlbGYuY21kX291dHB1dF9tYXBbJycn
eyJjYXBzIjogWyJtb24iLCAicHJvZmlsZSByYmQiLCAibWdyIiwgImFsbG93IHJ3IiwgIm9zZCIs
ICJwcm9maWxlIHJiZCJdLCAiZW50aXR5IjogImNsaWVudC5jc2ktcmJkLXByb3Zpc2lvbmVyIiwg
ImZvcm1hdCI6ICJqc29uIiwgInByZWZpeCI6ICJhdXRoIGdldC1vci1jcmVhdGUifScnJ10gPSAn
JydbeyJlbnRpdHkiOiJjbGllbnQuY3NpLXJiZC1wcm92aXNpb25lciIsImtleSI6IkFRQk5nck5l
MWdleUt4QUE4ZWtWaVJkRStoc3M1T3dlWUJrd05nPT0iLCJjYXBzIjp7Im1nciI6ImFsbG93IHJ3
IiwibW9uIjoicHJvZmlsZSByYmQiLCJvc2QiOiJwcm9maWxlIHJiZCJ9fV0nJycKICAgICAgICBz
ZWxmLmNtZF9vdXRwdXRfbWFwWycnJ3siY2FwcyI6IFsibW9uIiwgImFsbG93IHIiLCAibWdyIiwg
ImFsbG93IHJ3IiwgIm9zZCIsICJhbGxvdyBydyB0YWcgY2VwaGZzICo9KiIsICJtZHMiLCAiYWxs
b3cgcnciXSwgImVudGl0eSI6ICJjbGllbnQuY3NpLWNlcGhmcy1ub2RlIiwgImZvcm1hdCI6ICJq
c29uIiwgInByZWZpeCI6ICJhdXRoIGdldC1vci1jcmVhdGUifScnJ10gPSAnJydbeyJlbnRpdHki
OiJjbGllbnQuY3NpLWNlcGhmcy1ub2RlIiwia2V5IjoiQVFCT2dyTmVFTnVuS3hBQVBDbWdFN1I2
RzhEY1huYUoxRjMycWc9PSIsImNhcHMiOnsibWRzIjoiYWxsb3cgcnciLCJtZ3IiOiJhbGxvdyBy
dyIsIm1vbiI6ImFsbG93IHIiLCJvc2QiOiJhbGxvdyBydyB0YWcgY2VwaGZzICo9KiJ9fV0nJycK
ICAgICAgICBzZWxmLmNtZF9vdXRwdXRfbWFwWycnJ3siY2FwcyI6IFsibW9uIiwgImFsbG93IHIi
LCAibWdyIiwgImFsbG93IHJ3IiwgIm9zZCIsICJhbGxvdyBydyB0YWcgY2VwaGZzIG1ldGFkYXRh
PSoiXSwgImVudGl0eSI6ICJjbGllbnQuY3NpLWNlcGhmcy1wcm92aXNpb25lciIsICJmb3JtYXQi
OiAianNvbiIsICJwcmVmaXgiOiAiYXV0aCBnZXQtb3ItY3JlYXRlIn0nJyddID0gJycnW3siZW50
aXR5IjoiY2xpZW50LmNzaS1jZXBoZnMtcHJvdmlzaW9uZXIiLCJrZXkiOiJBUUJPZ3JOZUFGZ2NH
QkFBdkdxS09BRDBEM3h4bVZZMFI5MTJkZz09IiwiY2FwcyI6eyJtZ3IiOiJhbGxvdyBydyIsIm1v
biI6ImFsbG93IHIiLCJvc2QiOiJhbGxvdyBydyB0YWcgY2VwaGZzIG1ldGFkYXRhPSoifX1dJycn
CgogICAgZGVmIHNodXRkb3duKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgZ2V0X2ZzaWQo
c2VsZik6CiAgICAgICAgcmV0dXJuICdhZjRlMTY3My0wYjcyLTQwMmQtOTkwYS0yMmQyOTE5ZDBm
MWMnCgogICAgZGVmIGNvbmZfcmVhZF9maWxlKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYg
Y29ubmVjdChzZWxmKToKICAgICAgICBwYXNzCgogICAgZGVmIG1vbl9jb21tYW5kKHNlbGYsIGNt
ZCwgb3V0KToKICAgICAgICBqc29uX2NtZCA9IGpzb24ubG9hZHMoY21kKQogICAgICAgIGpzb25f
Y21kX3N0ciA9IGpzb24uZHVtcHMoanNvbl9jbWQsIHNvcnRfa2V5cz1UcnVlKQogICAgICAgIGNt
ZF9vdXRwdXQgPSBzZWxmLmNtZF9vdXRwdXRfbWFwW2pzb25fY21kX3N0cl0KICAgICAgICByZXR1
cm4gc2VsZi5yZXR1cm5fdmFsLCBcCiAgICAgICAgICAgIGNtZF9vdXRwdXQsIFwKICAgICAgICAg
ICAgInt9Ii5mb3JtYXQoc2VsZi5lcnJfbWVzc2FnZSkuZW5jb2RlKCd1dGYtOCcpCgogICAgQGNs
YXNzbWV0aG9kCiAgICBkZWYgUmFkb3MoY29uZmZpbGU9Tm9uZSk6CiAgICAgICAgcmV0dXJuIER1
bW15UmFkb3MoKQoKCiMgaW5vcmRlciB0byB0ZXN0IHRoZSBwYWNrYWdlLAojIGNkIDxzY3JpcHRf
ZGlyZWN0b3J5PgojIHB5dGhvbiAtbSB1bml0dGVzdCAtLXZlcmJvc2UgPHNjcmlwdF9uYW1lX3dp
dGhvdXRfZG90X3B5PgpjbGFzcyBUZXN0UmFkb3NKU09OKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
IGRlZiBzZXRVcChzZWxmKToKICAgICAgICBwcmludCgie30iLmZvcm1hdCgiSSBhbSBpbiBzZXR1
cCIpKQogICAgICAgIHNlbGYucmpPYmogPSBSYWRvc0pTT04oWyctLXJiZC1kYXRhLXBvb2wtbmFt
ZT1hYmMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXJndy1lbmRwb2ludD0x
MC4xMC4yMTIuMTIyOjkwMDAnLCAnLS1mb3JtYXQ9anNvbiddKQogICAgICAgICMgZm9yIHRlc3Rp
bmcsIHdlIGFyZSB1c2luZyAnRHVtbXlSYWRvcycgb2JqZWN0CiAgICAgICAgc2VsZi5yak9iai5j
bHVzdGVyID0gRHVtbXlSYWRvcy5SYWRvcygpCgogICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAg
ICAgIHByaW50KCJ7fSIuZm9ybWF0KCJJIGFtIHRlYXJpbmcgZG93biB0aGUgc2V0dXAiKSkKICAg
ICAgICBzZWxmLnJqT2JqLnNodXRkb3duKCkKCiAgICBkZWYgdGVzdF9tZXRob2RfbWFpbl9vdXRw
dXQoc2VsZik6CiAgICAgICAgcHJpbnQoIkpTT04gT3V0cHV0IikKICAgICAgICBzZWxmLnJqT2Jq
Ll9hcmdfcGFyc2VyLmZvcm1hdCA9ICJqc29uIgogICAgICAgIHNlbGYucmpPYmoubWFpbigpCiAg
ICAgICAgcHJpbnQoIlxuXG5TaGVsbCBPdXRwdXQiKQogICAgICAgIHNlbGYucmpPYmouX2FyZ19w
YXJzZXIuZm9ybWF0ID0gImJhc2giCiAgICAgICAgc2VsZi5yak9iai5tYWluKCkKICAgICAgICBw
cmludCgiXG5cbk5vbiBjb21wYXRpYmxlIG91dHB1dCAoLS1hYmNkKSIpCiAgICAgICAgdHJ5Ogog
ICAgICAgICAgICBzZWxmLnJqT2JqLl9hcmdfcGFyc2VyLmZvcm1hdCA9ICdhYmNkJwogICAgICAg
ICAgICBzZWxmLnJqT2JqLm1haW4oKQogICAgICAgICAgICBzZWxmLmZhaWwoIkZ1bmN0aW9uIHNo
b3VsZCBoYXZlIHRocm93biBhbiBFeGNlcHRpb24iKQogICAgICAgIGV4Y2VwdCBFeGVjdXRpb25G
YWlsdXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiB0aHJv
d24gc3VjY2Vzc2Z1bGx5OiB7fSIuZm9ybWF0KGVycikpCgogICAgZGVmIHRlc3RfbWV0aG9kX2Ny
ZWF0ZV9jZXBoQ1NJS2V5cmluZ19jZXBoRlNQcm92aXNpb25lcihzZWxmKToKICAgICAgICBjc2lL
ZXlyaW5nID0gc2VsZi5yak9iai5jcmVhdGVfY2VwaENTSUtleXJpbmdfY2VwaEZTUHJvdmlzaW9u
ZXIoKQogICAgICAgIHByaW50KCJ7fSIuZm9ybWF0KGNzaUtleXJpbmcpKQoKICAgIGRlZiB0ZXN0
X25vbl96ZXJvX3JldHVybl9hbmRfZXJyb3Ioc2VsZik6CiAgICAgICAgc2VsZi5yak9iai5jbHVz
dGVyLnJldHVybl92YWwgPSAxCiAgICAgICAgc2VsZi5yak9iai5jbHVzdGVyLmVycl9tZXNzYWdl
ID0gIkR1bW15IEVycm9yIgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yak9iai5jcmVh
dGVfY2hlY2tlcktleSgpCiAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIGFu
IGV4Y2VwdGlvbiwgJ0V4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24nIikKICAgICAgICBleGNlcHQg
RXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgICAgIHByaW50KCJTdWNj
ZXNzZnVsbHkgdGhyb3duIGVycm9yLlxuRXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkKCiAgICBkZWYg
dGVzdF9tdWx0aV9maWxlc3lzdGVtX3NjZW5hcmlvKHNlbGYpOgogICAgICAgIGNtZF9rZXkgPSBz
ZWxmLnJqT2JqLmNsdXN0ZXIuY21kX25hbWVzWydmcyBscyddCiAgICAgICAgY21kX291dCA9IHNl
bGYucmpPYmouY2x1c3Rlci5jbWRfb3V0cHV0X21hcFtjbWRfa2V5XQogICAgICAgIGNtZF9qc29u
X291dCA9IGpzb24ubG9hZHMoY21kX291dCkKICAgICAgICBzZWNvbmRfZnNfZGV0YWlscyA9IGRp
Y3QoY21kX2pzb25fb3V0WzBdKQogICAgICAgIHNlY29uZF9mc19kZXRhaWxzWyduYW1lJ10gKz0g
Jy0yJwogICAgICAgIGNtZF9qc29uX291dC5hcHBlbmQoc2Vjb25kX2ZzX2RldGFpbHMpCiAgICAg
ICAgc2VsZi5yak9iai5jbHVzdGVyLmNtZF9vdXRwdXRfbWFwW2NtZF9rZXldID0ganNvbi5kdW1w
cyhjbWRfanNvbl9vdXQpCiAgICAgICAgIyBtdWx0aXBsZSBmaWxlc3lzdGVtIHByZXNlbnQsCiAg
ICAgICAgIyBidXQgbm8gc3BlY2lmaWMgJy0tY2VwaGZzLWZpbGVzeXN0ZW0tbmFtZScgYXJndW1l
bnQgcHJvdmlkZWQKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmpPYmouZ2V0X2NlcGhm
c19kYXRhX3Bvb2xfZGV0YWlscygpCiAgICAgICAgICAgIHNlbGYuZmFpbCgiQW4gRXhjZXB0aW9u
IHdhcyBleHBlY3RlZCB0byBiZSB0aHJvd24iKQogICAgICAgIGV4Y2VwdCBFeGVjdXRpb25GYWls
dXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3NmdWxseSB0aHJv
d24gZXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkKICAgICAgICAjIHBhc3MgYW4gZXhpc3RpbmcgZmls
ZXN5c3RlbSBuYW1lCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnJqT2JqLl9hcmdfcGFy
c2VyLmNlcGhmc19maWxlc3lzdGVtX25hbWUgPSBzZWNvbmRfZnNfZGV0YWlsc1snbmFtZSddCiAg
ICAgICAgICAgIHNlbGYucmpPYmouZ2V0X2NlcGhmc19kYXRhX3Bvb2xfZGV0YWlscygpCiAgICAg
ICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICBz
ZWxmLmZhaWwoIlNob3VsZCBub3QgaGF2ZSB0aHJvd24gZXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkK
ICAgICAgICAjIHBhc3MgYSBub24tZXhpc3RpbmcgZmlsZXN5c3RlbSBuYW1lCiAgICAgICAgdHJ5
OgogICAgICAgICAgICBzZWxmLnJqT2JqLl9hcmdfcGFyc2VyLmNlcGhmc19maWxlc3lzdGVtX25h
bWUgKz0gIi1ub24tZXhpc3RpbmctZnMtbmFtZSIKICAgICAgICAgICAgc2VsZi5yak9iai5nZXRf
Y2VwaGZzX2RhdGFfcG9vbF9kZXRhaWxzKCkKICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNl
cHRpb24gd2FzIGV4cGVjdGVkIHRvIGJlIHRocm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlv
bkZhaWx1cmVFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5
IHRocm93biBlcnJvcjoge30iLmZvcm1hdChlcnIpKQogICAgICAgICMgZW1wdHkgZmlsZS1zeXN0
ZW0gYXJyYXkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmpPYmouY2x1c3Rlci5jbWRf
b3V0cHV0X21hcFtjbWRfa2V5XSA9IGpzb24uZHVtcHMoW10pCiAgICAgICAgICAgIHNlbGYucmpP
YmouZ2V0X2NlcGhmc19kYXRhX3Bvb2xfZGV0YWlscygpCiAgICAgICAgICAgIHNlbGYuZmFpbCgi
QW4gRXhjZXB0aW9uIHdhcyBleHBlY3RlZCB0byBiZSB0aHJvd24iKQogICAgICAgIGV4Y2VwdCBF
eGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nl
c3NmdWxseSB0aHJvd24gZXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkKCiAgICBkZWYgdGVzdF9tdWx0
aV9kYXRhX3Bvb2xfc2NlbmFyaW8oc2VsZik6CiAgICAgICAgY21kX2tleSA9IHNlbGYucmpPYmou
Y2x1c3Rlci5jbWRfbmFtZXNbJ2ZzIGxzJ10KICAgICAgICBjbWRfb3V0ID0gc2VsZi5yak9iai5j
bHVzdGVyLmNtZF9vdXRwdXRfbWFwW2NtZF9rZXldCiAgICAgICAgY21kX2pzb25fb3V0ID0ganNv
bi5sb2FkcyhjbWRfb3V0KQogICAgICAgIGZpcnN0X2ZzX2RldGFpbHMgPSBjbWRfanNvbl9vdXRb
MF0KICAgICAgICBuZXdfZGF0YV9wb29sX25hbWUgPSAnbXlmcy1kYXRhMScKICAgICAgICBmaXJz
dF9mc19kZXRhaWxzWydkYXRhX3Bvb2xzJ10uYXBwZW5kKG5ld19kYXRhX3Bvb2xfbmFtZSkKICAg
ICAgICBwcmludCgiTW9kaWZpZWQgSlNPTiBDbWQgT3V0OiB7fSIuZm9ybWF0KGNtZF9qc29uX291
dCkpCiAgICAgICAgc2VsZi5yak9iai5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUg
PSBuZXdfZGF0YV9wb29sX25hbWUKICAgICAgICBzZWxmLnJqT2JqLmNsdXN0ZXIuY21kX291dHB1
dF9tYXBbY21kX2tleV0gPSBqc29uLmR1bXBzKGNtZF9qc29uX291dCkKICAgICAgICBzZWxmLnJq
T2JqLmdldF9jZXBoZnNfZGF0YV9wb29sX2RldGFpbHMoKQogICAgICAgICMgdXNlIGEgbm9uLWV4
aXN0aW5nIGRhdGEtcG9vbC1uYW1lCiAgICAgICAgYmFkX2RhdGFfcG9vbF9uYW1lID0gJ215ZnMt
ZGF0YTMnCiAgICAgICAgc2VsZi5yak9iai5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25h
bWUgPSBiYWRfZGF0YV9wb29sX25hbWUKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmpP
YmouZ2V0X2NlcGhmc19kYXRhX3Bvb2xfZGV0YWlscygpCiAgICAgICAgICAgIHNlbGYuZmFpbCgi
QW4gRXhjZXB0aW9uIHdhcyBleHBlY3RlZCB0byBiZSB0aHJvd24iKQogICAgICAgIGV4Y2VwdCBF
eGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nl
c3NmdWxseSB0aHJvd24gZXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkKICAgICAgICAjIGVtcHR5IGRh
dGEtcG9vbCBzY2VuYXJpbwogICAgICAgIGZpcnN0X2ZzX2RldGFpbHNbJ2RhdGFfcG9vbHMnXSA9
IFtdCiAgICAgICAgc2VsZi5yak9iai5jbHVzdGVyLmNtZF9vdXRwdXRfbWFwW2NtZF9rZXldID0g
anNvbi5kdW1wcyhjbWRfanNvbl9vdXQpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnJq
T2JqLmdldF9jZXBoZnNfZGF0YV9wb29sX2RldGFpbHMoKQogICAgICAgICAgICBzZWxmLmZhaWwo
IkFuIEV4Y2VwdGlvbiB3YXMgZXhwZWN0ZWQgdG8gYmUgdGhyb3duIikKICAgICAgICBleGNlcHQg
RXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgICAgIHByaW50KCJTdWNj
ZXNzZnVsbHkgdGhyb3duIGVycm9yOiB7fSIuZm9ybWF0KGVycikpCgogICAgZGVmIHRlc3RfdmFs
aWRfcmd3X2VuZHBvaW50KHNlbGYpOgogICAgICAgIHNlbGYucmpPYmouX2ludmFsaWRfZW5kcG9p
bnQoIjEwLjEwLjIxMi4xMzM6ODAwMCIpCiAgICAgICAgIyBpbnZhbGlkIHBvcnQKICAgICAgICB0
cnk6CiAgICAgICAgICAgIHNlbGYucmpPYmouX2ludmFsaWRfZW5kcG9pbnQoIjEwLjEwLjIxMi4x
MzM6MjM4MDAwIikKICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNlcHRpb24gd2FzIGV4cGVj
dGVkIHRvIGJlIHRocm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRp
b24gYXMgZXJyOgogICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5IHRocm93biBlcnJvcjog
e30iLmZvcm1hdChlcnIpKQogICAgICAgICMgb3V0IG9mIHJhbmdlIElQCiAgICAgICAgdHJ5Ogog
ICAgICAgICAgICBzZWxmLnJqT2JqLl9pbnZhbGlkX2VuZHBvaW50KCIxMC4xMDMzLjIxMi4xMzM6
ODAwMCIpCiAgICAgICAgICAgIHNlbGYuZmFpbCgiQW4gRXhjZXB0aW9uIHdhcyBleHBlY3RlZCB0
byBiZSB0aHJvd24iKQogICAgICAgIGV4Y2VwdCBFeGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uIGFz
IGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3NmdWxseSB0aHJvd24gZXJyb3I6IHt9Ii5m
b3JtYXQoZXJyKSkKICAgICAgICAjIG1hbCBmb3JtYXR0ZWQgSVAKICAgICAgICB0cnk6CiAgICAg
ICAgICAgIHNlbGYucmpPYmouX2ludmFsaWRfZW5kcG9pbnQoIjEwLjEwMy4uMjEyLjEzMzo4MDAw
IikKICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNlcHRpb24gd2FzIGV4cGVjdGVkIHRvIGJl
IHRocm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24gYXMgZXJy
OgogICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5IHRocm93biBlcnJvcjoge30iLmZvcm1h
dChlcnIpKQogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yak9iai5faW52YWxpZF9lbmRw
b2ludCgiMTAuMTAzLjIxMi4xMzM6OjgwMDAiKQogICAgICAgICAgICBzZWxmLmZhaWwoIkFuIEV4
Y2VwdGlvbiB3YXMgZXhwZWN0ZWQgdG8gYmUgdGhyb3duIikKICAgICAgICBleGNlcHQgRXhlY3V0
aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzZnVs
bHkgdGhyb3duIGVycm9yOiB7fSIuZm9ybWF0KGVycikpCiAgICAgICAgdHJ5OgogICAgICAgICAg
ICBzZWxmLnJqT2JqLl9pbnZhbGlkX2VuZHBvaW50KCIxMC4xMC4xMDMuMjEyLjEzMzo4MDAwIikK
ICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNlcHRpb24gd2FzIGV4cGVjdGVkIHRvIGJlIHRo
cm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24gYXMgZXJyOgog
ICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5IHRocm93biBlcnJvcjoge30iLmZvcm1hdChl
cnIpKQo=
external.features.ocs.openshift.io/validation: '{"secrets":["rook-ceph-operator-creds",
"rook-csi-rbd-node", "rook-csi-rbd-provisioner"], "configMaps": ["rook-ceph-mon-endpoints",
"rook-ceph-mon"], "storageClasses": ["ceph-rbd"], "cephClusters": ["monitoring-endpoint"]}'
features.ocs.openshift.io/enabled: '["external", "minimal_deployment", "encryption"]'
olm.skipRange: '>=0.0.1 <4.6.0'
operatorframework.io/cluster-monitoring: "true"
operatorframework.io/suggested-namespace: openshift-storage
operators.operatorframework.io/internal-objects: '["ocsinitializations.ocs.openshift.io","cephclusters.ceph.rook.io","cephblockpools.ceph.rook.io","cephobjectstores.ceph.rook.io","cephobjectstoreusers.ceph.rook.io","cephnfses.ceph.rook.io","cephclients.ceph.rook.io","cephfilesystems.ceph.rook.io","cephrbdmirrors.ceph.rook.io","cephobjectrealms.ceph.rook.io","cephobjectzonegroups.ceph.rook.io","cephobjectzones.ceph.rook.io","noobaas.noobaa.io","objectbucketclaims.objectbucket.io","objectbuckets.objectbucket.io"]'
repository: https://github.com/openshift/ocs-operator
support: Red Hat
labels:
operatorframework.io/arch.amd64: supported
operatorframework.io/arch.ppc64le: supported
operatorframework.io/arch.s390x: supported
name: ocs-operator.v4.6.0
namespace: placeholder
spec:
apiservicedefinitions: {}
customresourcedefinitions:
owned:
- description: OCS Initialization represents the initial data to be created when
the OCS operator is installed.
displayName: OCS Initialization
kind: OCSInitialization
name: ocsinitializations.ocs.openshift.io
version: v1
- description: Storage Cluster represents a OpenShift Container Storage Cluster
including Ceph Cluster, NooBaa and all the storage and compute resources required.
displayName: Storage Cluster
kind: StorageCluster
name: storageclusters.ocs.openshift.io
resources:
- kind: CephCluster
name: cephclusters.ceph.rook.io
version: v1
- kind: NooBaa
name: noobaas.noobaa.io
version: v1alpha1
version: v1
- description: Represents a Ceph cluster.
displayName: Ceph Cluster
kind: CephCluster
name: cephclusters.ceph.rook.io
version: v1
- description: Represents a Ceph Block Pool.
displayName: Ceph Block Pool
kind: CephBlockPool
name: cephblockpools.ceph.rook.io
version: v1
- description: Represents a Ceph Object Store.
displayName: Ceph Object Store
kind: CephObjectStore
name: cephobjectstores.ceph.rook.io
specDescriptors:
- description: Coding Chunks
displayName: Coding Chunks
path: dataPool.erasureCoded.codingChunks
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool
- urn:alm:descriptor:com.tectonic.ui:number
- description: Data Chunks
displayName: Data Chunks
path: dataPool.erasureCoded.dataChunks
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool
- urn:alm:descriptor:com.tectonic.ui:number
- description: failureDomain
displayName: failureDomain
path: dataPool.failureDomain
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool
- urn:alm:descriptor:com.tectonic.ui:text
- description: Size
displayName: Size
path: dataPool.replicated.size
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool
- urn:alm:descriptor:com.tectonic.ui:number
- description: Annotations
displayName: Annotations
path: gateway.annotations
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:io.kubernetes:annotations
- description: Instances
displayName: Instances
path: gateway.instances
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:com.tectonic.ui:number
- description: Resources
displayName: Resources
path: gateway.resources
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:com.tectonic.ui:resourceRequirements
- description: placement
displayName: placement
path: gateway.placement
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:io.kubernetes:placement
- description: securePort
displayName: securePort
path: gateway.securePort
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:io.kubernetes:securePort
- description: sslCertificateRef
displayName: sslCertificateRef
path: gateway.sslCertificateRef
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:io.kubernetes:sslCertificateRef
- description: Type
displayName: Type
path: gateway.type
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway
- urn:alm:descriptor:com.tectonic.ui:text
- description: Coding Chunks
displayName: Coding Chunks
path: metadataPool.erasureCoded.codingChunks
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool
- urn:alm:descriptor:com.tectonic.ui:number
- description: Data Chunks
displayName: Data Chunks
path: metadataPool.erasureCoded.dataChunks
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool
- urn:alm:descriptor:com.tectonic.ui:number
- description: failureDomain
displayName: failureDomain
path: metadataPool.failureDomain
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool
- urn:alm:descriptor:com.tectonic.ui:text
- description: Size
displayName: Size
path: metadataPool.replicated.size
x-descriptors:
- urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool
- urn:alm:descriptor:com.tectonic.ui:number
version: v1
- description: Represents a Ceph Object Store User.
displayName: Ceph Object Store User
kind: CephObjectStoreUser
name: cephobjectstoreusers.ceph.rook.io
version: v1
- description: Represents a cluster of Ceph NFS ganesha gateways.
displayName: Ceph NFS
kind: CephNFS
name: cephnfses.ceph.rook.io
version: v1
- description: Represents a Ceph User.
displayName: Ceph Client
kind: CephClient
name: cephclients.ceph.rook.io
version: v1
- description: Represents a Ceph Filesystem.
displayName: Ceph Filesystem
kind: CephFilesystem
name: cephfilesystems.ceph.rook.io
version: v1
- description: Represents a Ceph RBD Mirror.
displayName: Ceph RBD Mirror
kind: CephRBDMirror
name: cephrbdmirrors.ceph.rook.io
version: v1
- description: Represents a Ceph Object Store Realm.
displayName: Ceph Object Store Realm
kind: CephObjectRealm
name: cephobjectrealms.ceph.rook.io
version: v1
- description: Represents a Ceph Object Store Zone Group.
displayName: Ceph Object Store Zone Group
kind: CephObjectZoneGroup
name: cephobjectzonegroups.ceph.rook.io
version: v1
- description: Represents a Ceph Object Store Zone.
displayName: Ceph Object Store Zone
kind: CephObjectZone
name: cephobjectzones.ceph.rook.io
version: v1
- description: A NooBaa system - Create this to start
displayName: NooBaa
kind: NooBaa
name: noobaas.noobaa.io
resources:
- kind: Service
name: services
version: v1
- kind: Secret
name: secrets
version: v1
- kind: ConfigMap
name: configmaps
version: v1
- kind: StatefulSet
name: statefulsets.apps
version: v1
specDescriptors:
- description: DBImage (optional) overrides the default image for the db container.