-
Notifications
You must be signed in to change notification settings - Fork 65
/
JSON Agent.json
439 lines (439 loc) · 181 KB
/
JSON Agent.json
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
{
"description": "Query an API spec to get information about the endpoints, parameters, and responses.",
"name": "JSON Agent",
"id": "1",
"data": {
"nodes": [
{
"width": 384,
"height": 311,
"id": "dndnode_13",
"type": "genericNode",
"position": {
"x": 1187.2084622072437,
"y": 116.13738146259979
},
"data": {
"type": "JsonToolkit",
"node": {
"template": {
"spec": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "spec",
"type": "JsonSpec",
"list": false
},
"_type": "JsonToolkit"
},
"description": "Toolkit for interacting with a JSON spec.",
"base_classes": [
"BaseToolkit",
"JsonToolkit"
]
},
"id": "dndnode_13",
"value": null
},
"selected": false,
"positionAbsolute": {
"x": 1187.2084622072437,
"y": 116.13738146259979
},
"dragging": false
},
{
"width": 384,
"height": 407,
"id": "dndnode_14",
"type": "genericNode",
"position": {
"x": 664.976178190127,
"y": -61.729227981320975
},
"data": {
"type": "JsonSpec",
"node": {
"template": {
"max_value_length": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"value": "400",
"password": false,
"name": "max_value_length",
"type": "int",
"list": false
},
"path": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"value": "openapi.yaml",
"suffixes": [
".json",
".yaml",
".yml"
],
"password": false,
"name": "path",
"type": "file",
"list": false,
"fileTypes": [
"json",
"yaml",
"yml"
],
"content": "data:application/x-yaml;base64,b3BlbmFwaTogMy4wLjAKaW5mbzoKICB0aXRsZTogT3BlbkFJIEFQSQogIGRlc2NyaXB0aW9uOiBBUElzIGZvciBzYW1wbGluZyBmcm9tIGFuZCBmaW5lLXR1bmluZyBsYW5ndWFnZSBtb2RlbHMKICB2ZXJzaW9uOiAnMS4yLjAnCnNlcnZlcnM6CiAgLSB1cmw6IGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEKdGFnczoKLSBuYW1lOiBPcGVuQUkKICBkZXNjcmlwdGlvbjogVGhlIE9wZW5BSSBSRVNUIEFQSQpwYXRoczoKICAvZW5naW5lczoKICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IGxpc3RFbmdpbmVzCiAgICAgIGRlcHJlY2F0ZWQ6IHRydWUKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogTGlzdHMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgKG5vbi1maW5ldHVuZWQpIG1vZGVscywgYW5kIHByb3ZpZGVzIGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb25lIHN1Y2ggYXMgdGhlIG93bmVyIGFuZCBhdmFpbGFiaWxpdHkuCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvTGlzdEVuZ2luZXNSZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IExpc3QgZW5naW5lcwogICAgICAgIGdyb3VwOiBlbmdpbmVzCiAgICAgICAgcGF0aDogbGlzdAogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvZW5naW5lcyBcCiAgICAgICAgICAgICAgLUggJ0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVknCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKICAgICAgICAgICAgb3BlbmFpLkVuZ2luZS5saXN0KCkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5saXN0RW5naW5lcygpOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJlbmdpbmUtaWQtMCIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImVuZ2luZSIsCiAgICAgICAgICAgICAgICAib3duZXIiOiAib3JnYW5pemF0aW9uLW93bmVyIiwKICAgICAgICAgICAgICAgICJyZWFkeSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJlbmdpbmUtaWQtMiIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImVuZ2luZSIsCiAgICAgICAgICAgICAgICAib3duZXIiOiAib3JnYW5pemF0aW9uLW93bmVyIiwKICAgICAgICAgICAgICAgICJyZWFkeSI6IHRydWUKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJlbmdpbmUtaWQtMyIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImVuZ2luZSIsCiAgICAgICAgICAgICAgICAib3duZXIiOiAib3BlbmFpIiwKICAgICAgICAgICAgICAgICJyZWFkeSI6IGZhbHNlCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm9iamVjdCI6ICJsaXN0IgogICAgICAgICAgfQoKICAvZW5naW5lcy97ZW5naW5lX2lkfToKICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IHJldHJpZXZlRW5naW5lCiAgICAgIGRlcHJlY2F0ZWQ6IHRydWUKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogUmV0cmlldmVzIGEgbW9kZWwgaW5zdGFuY2UsIHByb3ZpZGluZyBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCBpdCBzdWNoIGFzIHRoZSBvd25lciBhbmQgYXZhaWxhYmlsaXR5LgogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gaW46IHBhdGgKICAgICAgICAgIG5hbWU6IGVuZ2luZV9pZAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICMgaWRlYWxseSB0aGlzIHdpbGwgYmUgYW4gYWN0dWFsIElELCBzbyB0aGlzIHdpbGwgYWx3YXlzIHdvcmsgZnJvbSBicm93c2VyCiAgICAgICAgICAgIGV4YW1wbGU6CiAgICAgICAgICAgICAgZGF2aW5jaQogICAgICAgICAgZGVzY3JpcHRpb246ICZlbmdpbmVfaWRfZGVzY3JpcHRpb24gPgogICAgICAgICAgICBUaGUgSUQgb2YgdGhlIGVuZ2luZSB0byB1c2UgZm9yIHRoaXMgcmVxdWVzdAogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0VuZ2luZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IFJldHJpZXZlIGVuZ2luZQogICAgICAgIGdyb3VwOiBlbmdpbmVzCiAgICAgICAgcGF0aDogcmV0cmlldmUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2VuZ2luZXMvVkFSX21vZGVsX2lkIFwKICAgICAgICAgICAgICAtSCAnQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuRW5naW5lLnJldHJpZXZlKCJWQVJfbW9kZWxfaWQiKQogICAgICAgICAgbm9kZS5qczogfAogICAgICAgICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb24sIE9wZW5BSUFwaSB9ID0gcmVxdWlyZSgib3BlbmFpIik7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7CiAgICAgICAgICAgICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG9wZW5haSA9IG5ldyBPcGVuQUlBcGkoY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3BlbmFpLnJldHJpZXZlRW5naW5lKCJWQVJfbW9kZWxfaWQiKTsKICAgICAgICByZXNwb25zZTogfAogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiVkFSX21vZGVsX2lkIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJlbmdpbmUiLAogICAgICAgICAgICAib3duZXIiOiAib3BlbmFpIiwKICAgICAgICAgICAgInJlYWR5IjogdHJ1ZQogICAgICAgICAgfQoKICAvY29tcGxldGlvbnM6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlQ29tcGxldGlvbgogICAgICB0YWdzOgogICAgICAtIE9wZW5BSQogICAgICBzdW1tYXJ5OiBDcmVhdGVzIGEgY29tcGxldGlvbiBmb3IgdGhlIHByb3ZpZGVkIHByb21wdCBhbmQgcGFyYW1ldGVycwogICAgICByZXF1ZXN0Qm9keToKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZUNvbXBsZXRpb25SZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZUNvbXBsZXRpb25SZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IENyZWF0ZSBjb21wbGV0aW9uCiAgICAgICAgZ3JvdXA6IGNvbXBsZXRpb25zCiAgICAgICAgcGF0aDogY3JlYXRlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9jb21wbGV0aW9ucyBcCiAgICAgICAgICAgICAgLUggJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJyBcCiAgICAgICAgICAgICAgLWQgJ3sKICAgICAgICAgICAgICAibW9kZWwiOiAiVkFSX21vZGVsX2lkIiwKICAgICAgICAgICAgICAicHJvbXB0IjogIlNheSB0aGlzIGlzIGEgdGVzdCIsCiAgICAgICAgICAgICAgIm1heF90b2tlbnMiOiA3LAogICAgICAgICAgICAgICJ0ZW1wZXJhdHVyZSI6IDAKICAgICAgICAgICAgfScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuQ29tcGxldGlvbi5jcmVhdGUoCiAgICAgICAgICAgICAgbW9kZWw9IlZBUl9tb2RlbF9pZCIsCiAgICAgICAgICAgICAgcHJvbXB0PSJTYXkgdGhpcyBpcyBhIHRlc3QiLAogICAgICAgICAgICAgIG1heF90b2tlbnM9NywKICAgICAgICAgICAgICB0ZW1wZXJhdHVyZT0wCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5jcmVhdGVDb21wbGV0aW9uKHsKICAgICAgICAgICAgICBtb2RlbDogIlZBUl9tb2RlbF9pZCIsCiAgICAgICAgICAgICAgcHJvbXB0OiAiU2F5IHRoaXMgaXMgYSB0ZXN0IiwKICAgICAgICAgICAgICBtYXhfdG9rZW5zOiA3LAogICAgICAgICAgICAgIHRlbXBlcmF0dXJlOiAwLAogICAgICAgICAgICB9KTsKICAgICAgICBwYXJhbWV0ZXJzOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJtb2RlbCI6ICJWQVJfbW9kZWxfaWQiLAogICAgICAgICAgICAicHJvbXB0IjogIlNheSB0aGlzIGlzIGEgdGVzdCIsCiAgICAgICAgICAgICJtYXhfdG9rZW5zIjogNywKICAgICAgICAgICAgInRlbXBlcmF0dXJlIjogMCwKICAgICAgICAgICAgInRvcF9wIjogMSwKICAgICAgICAgICAgIm4iOiAxLAogICAgICAgICAgICAic3RyZWFtIjogZmFsc2UsCiAgICAgICAgICAgICJsb2dwcm9icyI6IG51bGwsCiAgICAgICAgICAgICJzdG9wIjogIlxuIgogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJjbXBsLXVxa3ZsUXlZSzdiR1lyUkhRMGVYbFdpNyIsCiAgICAgICAgICAgICJvYmplY3QiOiAidGV4dF9jb21wbGV0aW9uIiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNTg5NDc4Mzc4LAogICAgICAgICAgICAibW9kZWwiOiAiVkFSX21vZGVsX2lkIiwKICAgICAgICAgICAgImNob2ljZXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInRleHQiOiAiXG5cblRoaXMgaXMgaW5kZWVkIGEgdGVzdCIsCiAgICAgICAgICAgICAgICAiaW5kZXgiOiAwLAogICAgICAgICAgICAgICAgImxvZ3Byb2JzIjogbnVsbCwKICAgICAgICAgICAgICAgICJmaW5pc2hfcmVhc29uIjogImxlbmd0aCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ1c2FnZSI6IHsKICAgICAgICAgICAgICAicHJvbXB0X3Rva2VucyI6IDUsCiAgICAgICAgICAgICAgImNvbXBsZXRpb25fdG9rZW5zIjogNywKICAgICAgICAgICAgICAidG90YWxfdG9rZW5zIjogMTIKICAgICAgICAgICAgfQogICAgICAgICAgfQogIC9jaGF0L2NvbXBsZXRpb25zOgogICAgcG9zdDoKICAgICAgb3BlcmF0aW9uSWQ6IGNyZWF0ZUNoYXRDb21wbGV0aW9uCiAgICAgIHRhZ3M6CiAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IENyZWF0ZXMgYSBjb21wbGV0aW9uIGZvciB0aGUgY2hhdCBtZXNzYWdlCiAgICAgIHJlcXVlc3RCb2R5OgogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgY29udGVudDoKICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZUNoYXRDb21wbGV0aW9uUmVzcG9uc2UnCgogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIGNoYXQgY29tcGxldGlvbgogICAgICAgIGdyb3VwOiBjaGF0CiAgICAgICAgcGF0aDogY3JlYXRlCiAgICAgICAgYmV0YTogdHJ1ZQogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvY2hhdC9jb21wbGV0aW9ucyBcCiAgICAgICAgICAgICAgLUggJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJyBcCiAgICAgICAgICAgICAgLWQgJ3sKICAgICAgICAgICAgICAibW9kZWwiOiAiZ3B0LTMuNS10dXJibyIsCiAgICAgICAgICAgICAgIm1lc3NhZ2VzIjogW3sicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiSGVsbG8hIn1dCiAgICAgICAgICAgIH0nCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKCiAgICAgICAgICAgIGNvbXBsZXRpb24gPSBvcGVuYWkuQ2hhdENvbXBsZXRpb24uY3JlYXRlKAogICAgICAgICAgICAgIG1vZGVsPSJncHQtMy41LXR1cmJvIiwKICAgICAgICAgICAgICBtZXNzYWdlcz1bCiAgICAgICAgICAgICAgICB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIkhlbGxvISJ9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICApCgogICAgICAgICAgICBwcmludChjb21wbGV0aW9uLmNob2ljZXNbMF0ubWVzc2FnZSkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwoKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKCiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb24gPSBhd2FpdCBvcGVuYWkuY3JlYXRlQ2hhdENvbXBsZXRpb24oewogICAgICAgICAgICAgIG1vZGVsOiAiZ3B0LTMuNS10dXJibyIsCiAgICAgICAgICAgICAgbWVzc2FnZXM6IFt7cm9sZTogInVzZXIiLCBjb250ZW50OiAiSGVsbG8gd29ybGQifV0sCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZyhjb21wbGV0aW9uLmRhdGEuY2hvaWNlc1swXS5tZXNzYWdlKTsKICAgICAgICBwYXJhbWV0ZXJzOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJtb2RlbCI6ICJncHQtMy41LXR1cmJvIiwKICAgICAgICAgICAgIm1lc3NhZ2VzIjogW3sicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiSGVsbG8hIn1dCiAgICAgICAgICB9CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImNoYXRjbXBsLTEyMyIsCiAgICAgICAgICAgICJvYmplY3QiOiAiY2hhdC5jb21wbGV0aW9uIiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjc3NjUyMjg4LAogICAgICAgICAgICAiY2hvaWNlcyI6IFt7CiAgICAgICAgICAgICAgImluZGV4IjogMCwKICAgICAgICAgICAgICAibWVzc2FnZSI6IHsKICAgICAgICAgICAgICAgICJyb2xlIjogImFzc2lzdGFudCIsCiAgICAgICAgICAgICAgICAiY29udGVudCI6ICJcblxuSGVsbG8gdGhlcmUsIGhvdyBtYXkgSSBhc3Npc3QgeW91IHRvZGF5PyIsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgICAgICAgICB9XSwKICAgICAgICAgICAgInVzYWdlIjogewogICAgICAgICAgICAgICJwcm9tcHRfdG9rZW5zIjogOSwKICAgICAgICAgICAgICAiY29tcGxldGlvbl90b2tlbnMiOiAxMiwKICAgICAgICAgICAgICAidG90YWxfdG9rZW5zIjogMjEKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAvZWRpdHM6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlRWRpdAogICAgICB0YWdzOgogICAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IENyZWF0ZXMgYSBuZXcgZWRpdCBmb3IgdGhlIHByb3ZpZGVkIGlucHV0LCBpbnN0cnVjdGlvbiwgYW5kIHBhcmFtZXRlcnMuCiAgICAgIHJlcXVlc3RCb2R5OgogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgY29udGVudDoKICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlRWRpdFJlcXVlc3QnCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlRWRpdFJlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIGVkaXQKICAgICAgICBncm91cDogZWRpdHMKICAgICAgICBwYXRoOiBjcmVhdGUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2VkaXRzIFwKICAgICAgICAgICAgICAtSCAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcCiAgICAgICAgICAgICAgLUggJ0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVknIFwKICAgICAgICAgICAgICAtZCAnewogICAgICAgICAgICAgICJtb2RlbCI6ICJWQVJfbW9kZWxfaWQiLAogICAgICAgICAgICAgICJpbnB1dCI6ICJXaGF0IGRheSBvZiB0aGUgd2VrIGlzIGl0PyIsCiAgICAgICAgICAgICAgImluc3RydWN0aW9uIjogIkZpeCB0aGUgc3BlbGxpbmcgbWlzdGFrZXMiCiAgICAgICAgICAgIH0nCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKICAgICAgICAgICAgb3BlbmFpLkVkaXQuY3JlYXRlKAogICAgICAgICAgICAgIG1vZGVsPSJWQVJfbW9kZWxfaWQiLAogICAgICAgICAgICAgIGlucHV0PSJXaGF0IGRheSBvZiB0aGUgd2VrIGlzIGl0PyIsCiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb249IkZpeCB0aGUgc3BlbGxpbmcgbWlzdGFrZXMiCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5jcmVhdGVFZGl0KHsKICAgICAgICAgICAgICBtb2RlbDogIlZBUl9tb2RlbF9pZCIsCiAgICAgICAgICAgICAgaW5wdXQ6ICJXaGF0IGRheSBvZiB0aGUgd2VrIGlzIGl0PyIsCiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246ICJGaXggdGhlIHNwZWxsaW5nIG1pc3Rha2VzIiwKICAgICAgICAgICAgfSk7CiAgICAgICAgcGFyYW1ldGVyczogfAogICAgICAgICAgewogICAgICAgICAgICAibW9kZWwiOiAiVkFSX21vZGVsX2lkIiwKICAgICAgICAgICAgImlucHV0IjogIldoYXQgZGF5IG9mIHRoZSB3ZWsgaXMgaXQ/IiwKICAgICAgICAgICAgImluc3RydWN0aW9uIjogIkZpeCB0aGUgc3BlbGxpbmcgbWlzdGFrZXMiLAogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJvYmplY3QiOiAiZWRpdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTU4OTQ3ODM3OCwKICAgICAgICAgICAgImNob2ljZXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInRleHQiOiAiV2hhdCBkYXkgb2YgdGhlIHdlZWsgaXMgaXQ/IiwKICAgICAgICAgICAgICAgICJpbmRleCI6IDAsCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidXNhZ2UiOiB7CiAgICAgICAgICAgICAgInByb21wdF90b2tlbnMiOiAyNSwKICAgICAgICAgICAgICAiY29tcGxldGlvbl90b2tlbnMiOiAzMiwKICAgICAgICAgICAgICAidG90YWxfdG9rZW5zIjogNTcKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAvaW1hZ2VzL2dlbmVyYXRpb25zOgogICAgcG9zdDoKICAgICAgb3BlcmF0aW9uSWQ6IGNyZWF0ZUltYWdlCiAgICAgIHRhZ3M6CiAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IENyZWF0ZXMgYW4gaW1hZ2UgZ2l2ZW4gYSBwcm9tcHQuCiAgICAgIHJlcXVlc3RCb2R5OgogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgY29udGVudDoKICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlSW1hZ2VSZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0ltYWdlc1Jlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIGltYWdlCiAgICAgICAgZ3JvdXA6IGltYWdlcwogICAgICAgIHBhdGg6IGNyZWF0ZQogICAgICAgIGJldGE6IHRydWUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2ltYWdlcy9nZW5lcmF0aW9ucyBcCiAgICAgICAgICAgICAgLUggJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJyBcCiAgICAgICAgICAgICAgLWQgJ3sKICAgICAgICAgICAgICAicHJvbXB0IjogIkEgY3V0ZSBiYWJ5IHNlYSBvdHRlciIsCiAgICAgICAgICAgICAgIm4iOiAyLAogICAgICAgICAgICAgICJzaXplIjogIjEwMjR4MTAyNCIKICAgICAgICAgICAgfScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuSW1hZ2UuY3JlYXRlKAogICAgICAgICAgICAgIHByb21wdD0iQSBjdXRlIGJhYnkgc2VhIG90dGVyIiwKICAgICAgICAgICAgICBuPTIsCiAgICAgICAgICAgICAgc2l6ZT0iMTAyNHgxMDI0IgogICAgICAgICAgICApCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuY3JlYXRlSW1hZ2UoewogICAgICAgICAgICAgIHByb21wdDogIkEgY3V0ZSBiYWJ5IHNlYSBvdHRlciIsCiAgICAgICAgICAgICAgbjogMiwKICAgICAgICAgICAgICBzaXplOiAiMTAyNHgxMDI0IiwKICAgICAgICAgICAgfSk7CiAgICAgICAgcGFyYW1ldGVyczogfAogICAgICAgICAgewogICAgICAgICAgICAicHJvbXB0IjogIkEgY3V0ZSBiYWJ5IHNlYSBvdHRlciIsCiAgICAgICAgICAgICJuIjogMiwKICAgICAgICAgICAgInNpemUiOiAiMTAyNHgxMDI0IgogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJjcmVhdGVkIjogMTU4OTQ3ODM3OCwKICAgICAgICAgICAgImRhdGEiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovLy4uLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly8uLi4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CgogIC9pbWFnZXMvZWRpdHM6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlSW1hZ2VFZGl0CiAgICAgIHRhZ3M6CiAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IENyZWF0ZXMgYW4gZWRpdGVkIG9yIGV4dGVuZGVkIGltYWdlIGdpdmVuIGFuIG9yaWdpbmFsIGltYWdlIGFuZCBhIHByb21wdC4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgbXVsdGlwYXJ0L2Zvcm0tZGF0YToKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVJbWFnZUVkaXRSZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0ltYWdlc1Jlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIGltYWdlIGVkaXQKICAgICAgICBncm91cDogaW1hZ2VzCiAgICAgICAgcGF0aDogY3JlYXRlLWVkaXQKICAgICAgICBiZXRhOiB0cnVlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9pbWFnZXMvZWRpdHMgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJyBcCiAgICAgICAgICAgICAgLUYgaW1hZ2U9J0BvdHRlci5wbmcnIFwKICAgICAgICAgICAgICAtRiBtYXNrPSdAbWFzay5wbmcnIFwKICAgICAgICAgICAgICAtRiBwcm9tcHQ9IkEgY3V0ZSBiYWJ5IHNlYSBvdHRlciB3ZWFyaW5nIGEgYmVyZXQiIFwKICAgICAgICAgICAgICAtRiBuPTIgXAogICAgICAgICAgICAgIC1GIHNpemU9IjEwMjR4MTAyNCIKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuSW1hZ2UuY3JlYXRlX2VkaXQoCiAgICAgICAgICAgICAgaW1hZ2U9b3Blbigib3R0ZXIucG5nIiwgInJiIiksCiAgICAgICAgICAgICAgbWFzaz1vcGVuKCJtYXNrLnBuZyIsICJyYiIpLAogICAgICAgICAgICAgIHByb21wdD0iQSBjdXRlIGJhYnkgc2VhIG90dGVyIHdlYXJpbmcgYSBiZXJldCIsCiAgICAgICAgICAgICAgbj0yLAogICAgICAgICAgICAgIHNpemU9IjEwMjR4MTAyNCIKICAgICAgICAgICAgKQogICAgICAgICAgbm9kZS5qczogfAogICAgICAgICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb24sIE9wZW5BSUFwaSB9ID0gcmVxdWlyZSgib3BlbmFpIik7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7CiAgICAgICAgICAgICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG9wZW5haSA9IG5ldyBPcGVuQUlBcGkoY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3BlbmFpLmNyZWF0ZUltYWdlRWRpdCgKICAgICAgICAgICAgICBmcy5jcmVhdGVSZWFkU3RyZWFtKCJvdHRlci5wbmciKSwKICAgICAgICAgICAgICBmcy5jcmVhdGVSZWFkU3RyZWFtKCJtYXNrLnBuZyIpLAogICAgICAgICAgICAgICJBIGN1dGUgYmFieSBzZWEgb3R0ZXIgd2VhcmluZyBhIGJlcmV0IiwKICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICIxMDI0eDEwMjQiCiAgICAgICAgICAgICk7CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNTg5NDc4Mzc4LAogICAgICAgICAgICAiZGF0YSI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vLi4uIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovLy4uLiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KCiAgL2ltYWdlcy92YXJpYXRpb25zOgogICAgcG9zdDoKICAgICAgb3BlcmF0aW9uSWQ6IGNyZWF0ZUltYWdlVmFyaWF0aW9uCiAgICAgIHRhZ3M6CiAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IENyZWF0ZXMgYSB2YXJpYXRpb24gb2YgYSBnaXZlbiBpbWFnZS4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgbXVsdGlwYXJ0L2Zvcm0tZGF0YToKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVJbWFnZVZhcmlhdGlvblJlcXVlc3QnCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvSW1hZ2VzUmVzcG9uc2UnCiAgICAgIHgtb2FpTWV0YToKICAgICAgICBuYW1lOiBDcmVhdGUgaW1hZ2UgdmFyaWF0aW9uCiAgICAgICAgZ3JvdXA6IGltYWdlcwogICAgICAgIHBhdGg6IGNyZWF0ZS12YXJpYXRpb24KICAgICAgICBiZXRhOiB0cnVlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9pbWFnZXMvdmFyaWF0aW9ucyBcCiAgICAgICAgICAgICAgLUggJ0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVknIFwKICAgICAgICAgICAgICAtRiBpbWFnZT0nQG90dGVyLnBuZycgXAogICAgICAgICAgICAgIC1GIG49MiBcCiAgICAgICAgICAgICAgLUYgc2l6ZT0iMTAyNHgxMDI0IgogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIG9wZW5haS5JbWFnZS5jcmVhdGVfdmFyaWF0aW9uKAogICAgICAgICAgICAgIGltYWdlPW9wZW4oIm90dGVyLnBuZyIsICJyYiIpLAogICAgICAgICAgICAgIG49MiwKICAgICAgICAgICAgICBzaXplPSIxMDI0eDEwMjQiCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5jcmVhdGVJbWFnZVZhcmlhdGlvbigKICAgICAgICAgICAgICBmcy5jcmVhdGVSZWFkU3RyZWFtKCJvdHRlci5wbmciKSwKICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICIxMDI0eDEwMjQiCiAgICAgICAgICAgICk7CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNTg5NDc4Mzc4LAogICAgICAgICAgICAiZGF0YSI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vLi4uIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovLy4uLiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KCiAgL2VtYmVkZGluZ3M6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlRW1iZWRkaW5nCiAgICAgIHRhZ3M6CiAgICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogQ3JlYXRlcyBhbiBlbWJlZGRpbmcgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgaW5wdXQgdGV4dC4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVFbWJlZGRpbmdSZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIGVtYmVkZGluZ3MKICAgICAgICBncm91cDogZW1iZWRkaW5ncwogICAgICAgIHBhdGg6IGNyZWF0ZQogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvZW1iZWRkaW5ncyBcCiAgICAgICAgICAgICAgLVggUE9TVCBcCiAgICAgICAgICAgICAgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVkiIFwKICAgICAgICAgICAgICAtSCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uIiBcCiAgICAgICAgICAgICAgLWQgJ3siaW5wdXQiOiAiVGhlIGZvb2Qgd2FzIGRlbGljaW91cyBhbmQgdGhlIHdhaXRlci4uLiIsCiAgICAgICAgICAgICAgICAgICAibW9kZWwiOiAidGV4dC1lbWJlZGRpbmctYWRhLTAwMiJ9JwoKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuRW1iZWRkaW5nLmNyZWF0ZSgKICAgICAgICAgICAgICBtb2RlbD0idGV4dC1lbWJlZGRpbmctYWRhLTAwMiIsCiAgICAgICAgICAgICAgaW5wdXQ9IlRoZSBmb29kIHdhcyBkZWxpY2lvdXMgYW5kIHRoZSB3YWl0ZXIuLi4iCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5jcmVhdGVFbWJlZGRpbmcoewogICAgICAgICAgICAgIG1vZGVsOiAidGV4dC1lbWJlZGRpbmctYWRhLTAwMiIsCiAgICAgICAgICAgICAgaW5wdXQ6ICJUaGUgZm9vZCB3YXMgZGVsaWNpb3VzIGFuZCB0aGUgd2FpdGVyLi4uIiwKICAgICAgICAgICAgfSk7CiAgICAgICAgcGFyYW1ldGVyczogfAogICAgICAgICAgewogICAgICAgICAgICAibW9kZWwiOiAidGV4dC1lbWJlZGRpbmctYWRhLTAwMiIsCiAgICAgICAgICAgICJpbnB1dCI6ICJUaGUgZm9vZCB3YXMgZGVsaWNpb3VzIGFuZCB0aGUgd2FpdGVyLi4uIgogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZW1iZWRkaW5nIiwKICAgICAgICAgICAgICAgICJlbWJlZGRpbmciOiBbCiAgICAgICAgICAgICAgICAgIDAuMDAyMzA2NDI1NSwKICAgICAgICAgICAgICAgICAgLTAuMDA5MzI3MjkyLAogICAgICAgICAgICAgICAgICAuLi4uICgxNTM2IGZsb2F0cyB0b3RhbCBmb3IgYWRhLTAwMikKICAgICAgICAgICAgICAgICAgLTAuMDAyODg0MjIyMiwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAiaW5kZXgiOiAwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAibW9kZWwiOiAidGV4dC1lbWJlZGRpbmctYWRhLTAwMiIsCiAgICAgICAgICAgICJ1c2FnZSI6IHsKICAgICAgICAgICAgICAicHJvbXB0X3Rva2VucyI6IDgsCiAgICAgICAgICAgICAgInRvdGFsX3Rva2VucyI6IDgKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAvYXVkaW8vdHJhbnNjcmlwdGlvbnM6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlVHJhbnNjcmlwdGlvbgogICAgICB0YWdzOgogICAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IFRyYW5zY3JpYmVzIGF1ZGlvIGludG8gdGhlIGlucHV0IGxhbmd1YWdlLgogICAgICByZXF1ZXN0Qm9keToKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBtdWx0aXBhcnQvZm9ybS1kYXRhOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZVRyYW5zY3JpcHRpb25SZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZVRyYW5zY3JpcHRpb25SZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IENyZWF0ZSB0cmFuc2NyaXB0aW9uCiAgICAgICAgZ3JvdXA6IGF1ZGlvCiAgICAgICAgcGF0aDogY3JlYXRlCiAgICAgICAgYmV0YTogdHJ1ZQogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvYXVkaW8vdHJhbnNjcmlwdGlvbnMgXAogICAgICAgICAgICAgIC1YIFBPU1QgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgVE9LRU4nIFwKICAgICAgICAgICAgICAtSCAnQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhJyBcCiAgICAgICAgICAgICAgLUYgZmlsZT1AL3BhdGgvdG8vZmlsZS9hdWRpby5tcDMgXAogICAgICAgICAgICAgIC1GIG1vZGVsPXdoaXNwZXItMQogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIGF1ZGlvX2ZpbGUgPSBvcGVuKCJhdWRpby5tcDMiLCAicmIiKQogICAgICAgICAgICB0cmFuc2NyaXB0ID0gb3BlbmFpLkF1ZGlvLnRyYW5zY3JpYmUoIndoaXNwZXItMSIsIGF1ZGlvX2ZpbGUpCiAgICAgICAgICBub2RlOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IG9wZW5haS5jcmVhdGVUcmFuc2NyaXB0aW9uKAogICAgICAgICAgICAgIGZzLmNyZWF0ZVJlYWRTdHJlYW0oImF1ZGlvLm1wMyIpLAogICAgICAgICAgICAgICJ3aGlzcGVyLTEiCiAgICAgICAgICAgICk7CiAgICAgICAgcGFyYW1ldGVyczogfAogICAgICAgICAgewogICAgICAgICAgICAiZmlsZSI6ICJhdWRpby5tcDMiLAogICAgICAgICAgICAibW9kZWwiOiAid2hpc3Blci0xIgogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJ0ZXh0IjogIkltYWdpbmUgdGhlIHdpbGRlc3QgaWRlYSB0aGF0IHlvdSd2ZSBldmVyIGhhZCwgYW5kIHlvdSdyZSBjdXJpb3VzIGFib3V0IGhvdyBpdCBtaWdodCBzY2FsZSB0byBzb21ldGhpbmcgdGhhdCdzIGEgMTAwLCBhIDEsMDAwIHRpbWVzIGJpZ2dlci4gVGhpcyBpcyBhIHBsYWNlIHdoZXJlIHlvdSBjYW4gZ2V0IHRvIGRvIHRoYXQuIgogICAgICAgICAgfQoKICAvYXVkaW8vdHJhbnNsYXRpb25zOgogICAgcG9zdDoKICAgICAgb3BlcmF0aW9uSWQ6IGNyZWF0ZVRyYW5zbGF0aW9uCiAgICAgIHRhZ3M6CiAgICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogVHJhbnNsYXRlcyBhdWRpbyBpbnRvIGludG8gRW5nbGlzaC4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgbXVsdGlwYXJ0L2Zvcm0tZGF0YToKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVUcmFuc2xhdGlvblJlcXVlc3QnCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlVHJhbnNsYXRpb25SZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IENyZWF0ZSB0cmFuc2xhdGlvbgogICAgICAgIGdyb3VwOiBhdWRpbwogICAgICAgIHBhdGg6IGNyZWF0ZQogICAgICAgIGJldGE6IHRydWUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2F1ZGlvL3RyYW5zbGF0aW9ucyBcCiAgICAgICAgICAgICAgICAtWCBQT1NUIFwKICAgICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgVE9LRU4nIFwKICAgICAgICAgICAgICAgIC1IICdDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGEnIFwKICAgICAgICAgICAgICAgIC1GIGZpbGU9QC9wYXRoL3RvL2ZpbGUvZ2VybWFuLm00YSBcCiAgICAgICAgICAgICAgICAtRiBtb2RlbD13aGlzcGVyLTEKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBhdWRpb19maWxlID0gb3BlbigiZ2VybWFuLm00YSIsICJyYiIpCiAgICAgICAgICAgIHRyYW5zY3JpcHQgPSBvcGVuYWkuQXVkaW8udHJhbnNsYXRlKCJ3aGlzcGVyLTEiLCBhdWRpb19maWxlKQogICAgICAgICAgbm9kZTogfAogICAgICAgICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb24sIE9wZW5BSUFwaSB9ID0gcmVxdWlyZSgib3BlbmFpIik7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7CiAgICAgICAgICAgICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG9wZW5haSA9IG5ldyBPcGVuQUlBcGkoY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBvcGVuYWkuY3JlYXRlVHJhbnNsYXRpb24oCiAgICAgICAgICAgICAgZnMuY3JlYXRlUmVhZFN0cmVhbSgiYXVkaW8ubXAzIiksCiAgICAgICAgICAgICAgIndoaXNwZXItMSIKICAgICAgICAgICAgKTsKICAgICAgICBwYXJhbWV0ZXJzOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJmaWxlIjogImdlcm1hbi5tNGEiLAogICAgICAgICAgICAibW9kZWwiOiAid2hpc3Blci0xIgogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJ0ZXh0IjogIkhlbGxvLCBteSBuYW1lIGlzIFdvbGZnYW5nIGFuZCBJIGNvbWUgZnJvbSBHZXJtYW55LiBXaGVyZSBhcmUgeW91IGhlYWRpbmcgdG9kYXk/IgogICAgICAgICAgfQoKICAvZW5naW5lcy97ZW5naW5lX2lkfS9zZWFyY2g6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlU2VhcmNoCiAgICAgIGRlcHJlY2F0ZWQ6IHRydWUKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogfAogICAgICAgIFRoZSBzZWFyY2ggZW5kcG9pbnQgY29tcHV0ZXMgc2ltaWxhcml0eSBzY29yZXMgYmV0d2VlbiBwcm92aWRlZCBxdWVyeSBhbmQgZG9jdW1lbnRzLiBEb2N1bWVudHMgY2FuIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgQVBJIGlmIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gMjAwIG9mIHRoZW0uCgogICAgICAgIFRvIGdvIGJleW9uZCB0aGUgMjAwIGRvY3VtZW50IGxpbWl0LCBkb2N1bWVudHMgY2FuIGJlIHByb2Nlc3NlZCBvZmZsaW5lIGFuZCB0aGVuIHVzZWQgZm9yIGVmZmljaWVudCByZXRyaWV2YWwgYXQgcXVlcnkgdGltZS4gV2hlbiBgZmlsZWAgaXMgc2V0LCB0aGUgc2VhcmNoIGVuZHBvaW50IHNlYXJjaGVzIG92ZXIgYWxsIHRoZSBkb2N1bWVudHMgaW4gdGhlIGdpdmVuIGZpbGUgYW5kIHJldHVybnMgdXAgdG8gdGhlIGBtYXhfcmVyYW5rYCBudW1iZXIgb2YgZG9jdW1lbnRzLiBUaGVzZSBkb2N1bWVudHMgd2lsbCBiZSByZXR1cm5lZCBhbG9uZyB3aXRoIHRoZWlyIHNlYXJjaCBzY29yZXMuCgogICAgICAgIFRoZSBzaW1pbGFyaXR5IHNjb3JlIGlzIGEgcG9zaXRpdmUgc2NvcmUgdGhhdCB1c3VhbGx5IHJhbmdlcyBmcm9tIDAgdG8gMzAwIChidXQgY2FuIHNvbWV0aW1lcyBnbyBoaWdoZXIpLCB3aGVyZSBhIHNjb3JlIGFib3ZlIDIwMCB1c3VhbGx5IG1lYW5zIHRoZSBkb2N1bWVudCBpcyBzZW1hbnRpY2FsbHkgc2ltaWxhciB0byB0aGUgcXVlcnkuCiAgICAgIHBhcmFtZXRlcnM6CiAgICAgICAgLSBpbjogcGF0aAogICAgICAgICAgbmFtZTogZW5naW5lX2lkCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgZXhhbXBsZTogZGF2aW5jaQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBJRCBvZiB0aGUgZW5naW5lIHRvIHVzZSBmb3IgdGhpcyByZXF1ZXN0LiAgWW91IGNhbiBzZWxlY3Qgb25lIG9mIGBhZGFgLCBgYmFiYmFnZWAsIGBjdXJpZWAsIG9yIGBkYXZpbmNpYC4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVTZWFyY2hSZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZVNlYXJjaFJlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIHNlYXJjaAogICAgICAgIGdyb3VwOiBzZWFyY2hlcwogICAgICAgIHBhdGg6IGNyZWF0ZQogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvZW5naW5lcy9kYXZpbmNpL3NlYXJjaCBcCiAgICAgICAgICAgICAgLUggIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiIgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJyBcCiAgICAgICAgICAgICAgLWQgJ3sKICAgICAgICAgICAgICAiZG9jdW1lbnRzIjogWyJXaGl0ZSBIb3VzZSIsICJob3NwaXRhbCIsICJzY2hvb2wiXSwKICAgICAgICAgICAgICAicXVlcnkiOiAidGhlIHByZXNpZGVudCIKICAgICAgICAgICAgfScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuRW5naW5lKCJkYXZpbmNpIikuc2VhcmNoKAogICAgICAgICAgICAgIGRvY3VtZW50cz1bIldoaXRlIEhvdXNlIiwgImhvc3BpdGFsIiwgInNjaG9vbCJdLAogICAgICAgICAgICAgIHF1ZXJ5PSJ0aGUgcHJlc2lkZW50IgogICAgICAgICAgICApCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuY3JlYXRlU2VhcmNoKCJkYXZpbmNpIiwgewogICAgICAgICAgICAgIGRvY3VtZW50czogWyJXaGl0ZSBIb3VzZSIsICJob3NwaXRhbCIsICJzY2hvb2wiXSwKICAgICAgICAgICAgICBxdWVyeTogInRoZSBwcmVzaWRlbnQiLAogICAgICAgICAgICB9KTsKICAgICAgICBwYXJhbWV0ZXJzOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJkb2N1bWVudHMiOiBbCiAgICAgICAgICAgICAgIldoaXRlIEhvdXNlIiwKICAgICAgICAgICAgICAiaG9zcGl0YWwiLAogICAgICAgICAgICAgICJzY2hvb2wiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJxdWVyeSI6ICJ0aGUgcHJlc2lkZW50IgogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJkb2N1bWVudCI6IDAsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogInNlYXJjaF9yZXN1bHQiLAogICAgICAgICAgICAgICAgInNjb3JlIjogMjE1LjQxMgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImRvY3VtZW50IjogMSwKICAgICAgICAgICAgICAgICJvYmplY3QiOiAic2VhcmNoX3Jlc3VsdCIsCiAgICAgICAgICAgICAgICAic2NvcmUiOiA0MC4zMTYKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJkb2N1bWVudCI6IDIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogInNlYXJjaF9yZXN1bHQiLAogICAgICAgICAgICAgICAgInNjb3JlIjogIDU1LjIyNgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm9iamVjdCI6ICJsaXN0IgogICAgICAgICAgfQoKICAvZmlsZXM6CiAgICBnZXQ6CiAgICAgIG9wZXJhdGlvbklkOiBsaXN0RmlsZXMKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogUmV0dXJucyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHVzZXIncyBvcmdhbml6YXRpb24uCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvTGlzdEZpbGVzUmVzcG9uc2UnCiAgICAgIHgtb2FpTWV0YToKICAgICAgICBuYW1lOiBMaXN0IGZpbGVzCiAgICAgICAgZ3JvdXA6IGZpbGVzCiAgICAgICAgcGF0aDogbGlzdAogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvZmlsZXMgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJwogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIG9wZW5haS5GaWxlLmxpc3QoKQogICAgICAgICAgbm9kZS5qczogfAogICAgICAgICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb24sIE9wZW5BSUFwaSB9ID0gcmVxdWlyZSgib3BlbmFpIik7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7CiAgICAgICAgICAgICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG9wZW5haSA9IG5ldyBPcGVuQUlBcGkoY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3BlbmFpLmxpc3RGaWxlcygpOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmaWxlLWNjZERackMzaVpWTmlRVmVFQTZaNjZ3ZiIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbGUiLAogICAgICAgICAgICAgICAgImJ5dGVzIjogMTc1LAogICAgICAgICAgICAgICAgImNyZWF0ZWRfYXQiOiAxNjEzNjc3Mzg1LAogICAgICAgICAgICAgICAgImZpbGVuYW1lIjogInRyYWluLmpzb25sIiwKICAgICAgICAgICAgICAgICJwdXJwb3NlIjogInNlYXJjaCIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmaWxlLVhqR3hTM0tURzB1Tm1OT0szNjJpSnVhMyIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbGUiLAogICAgICAgICAgICAgICAgImJ5dGVzIjogMTQwLAogICAgICAgICAgICAgICAgImNyZWF0ZWRfYXQiOiAxNjEzNzc5MTIxLAogICAgICAgICAgICAgICAgImZpbGVuYW1lIjogInB1cHB5Lmpzb25sIiwKICAgICAgICAgICAgICAgICJwdXJwb3NlIjogInNlYXJjaCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJvYmplY3QiOiAibGlzdCIKICAgICAgICAgIH0KICAgIHBvc3Q6CiAgICAgIG9wZXJhdGlvbklkOiBjcmVhdGVGaWxlCiAgICAgIHRhZ3M6CiAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IHwKICAgICAgICBVcGxvYWQgYSBmaWxlIHRoYXQgY29udGFpbnMgZG9jdW1lbnQocykgdG8gYmUgdXNlZCBhY3Jvc3MgdmFyaW91cyBlbmRwb2ludHMvZmVhdHVyZXMuIEN1cnJlbnRseSwgdGhlIHNpemUgb2YgYWxsIHRoZSBmaWxlcyB1cGxvYWRlZCBieSBvbmUgb3JnYW5pemF0aW9uIGNhbiBiZSB1cCB0byAxIEdCLiBQbGVhc2UgY29udGFjdCB1cyBpZiB5b3UgbmVlZCB0byBpbmNyZWFzZSB0aGUgc3RvcmFnZSBsaW1pdC4KCiAgICAgIHJlcXVlc3RCb2R5OgogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgY29udGVudDoKICAgICAgICAgIG11bHRpcGFydC9mb3JtLWRhdGE6CiAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlRmlsZVJlcXVlc3QnCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvT3BlbkFJRmlsZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IFVwbG9hZCBmaWxlCiAgICAgICAgZ3JvdXA6IGZpbGVzCiAgICAgICAgcGF0aDogdXBsb2FkCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9maWxlcyBcCiAgICAgICAgICAgICAgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVkiIFwKICAgICAgICAgICAgICAtRiBwdXJwb3NlPSJmaW5lLXR1bmUiIFwKICAgICAgICAgICAgICAtRiBmaWxlPSdAbXlkYXRhLmpzb25sJwoKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuRmlsZS5jcmVhdGUoCiAgICAgICAgICAgICAgZmlsZT1vcGVuKCJteWRhdGEuanNvbmwiLCAicmIiKSwKICAgICAgICAgICAgICBwdXJwb3NlPSdmaW5lLXR1bmUnCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKCJmcyIpOwogICAgICAgICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb24sIE9wZW5BSUFwaSB9ID0gcmVxdWlyZSgib3BlbmFpIik7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7CiAgICAgICAgICAgICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG9wZW5haSA9IG5ldyBPcGVuQUlBcGkoY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3BlbmFpLmNyZWF0ZUZpbGUoCiAgICAgICAgICAgICAgZnMuY3JlYXRlUmVhZFN0cmVhbSgibXlkYXRhLmpzb25sIiksCiAgICAgICAgICAgICAgImZpbmUtdHVuZSIKICAgICAgICAgICAgKTsKICAgICAgICByZXNwb25zZTogfAogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMiLAogICAgICAgICAgICAib2JqZWN0IjogImZpbGUiLAogICAgICAgICAgICAiYnl0ZXMiOiAxNDAsCiAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxMzc3OTEyMSwKICAgICAgICAgICAgImZpbGVuYW1lIjogIm15ZGF0YS5qc29ubCIsCiAgICAgICAgICAgICJwdXJwb3NlIjogImZpbmUtdHVuZSIKICAgICAgICAgIH0KCiAgL2ZpbGVzL3tmaWxlX2lkfToKICAgIGRlbGV0ZToKICAgICAgb3BlcmF0aW9uSWQ6IGRlbGV0ZUZpbGUKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogRGVsZXRlIGEgZmlsZS4KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBmaWxlX2lkCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgSUQgb2YgdGhlIGZpbGUgdG8gdXNlIGZvciB0aGlzIHJlcXVlc3QKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246IE9LCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9EZWxldGVGaWxlUmVzcG9uc2UnCiAgICAgIHgtb2FpTWV0YToKICAgICAgICBuYW1lOiBEZWxldGUgZmlsZQogICAgICAgIGdyb3VwOiBmaWxlcwogICAgICAgIHBhdGg6IGRlbGV0ZQogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvZmlsZXMvZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMgXAogICAgICAgICAgICAgIC1YIERFTEVURSBcCiAgICAgICAgICAgICAgLUggJ0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVknCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKICAgICAgICAgICAgb3BlbmFpLkZpbGUuZGVsZXRlKCJmaWxlLVhqR3hTM0tURzB1Tm1OT0szNjJpSnVhMyIpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuZGVsZXRlRmlsZSgiZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMiKTsKICAgICAgICByZXNwb25zZTogfAogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMiLAogICAgICAgICAgICAib2JqZWN0IjogImZpbGUiLAogICAgICAgICAgICAiZGVsZXRlZCI6IHRydWUKICAgICAgICAgIH0KICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IHJldHJpZXZlRmlsZQogICAgICB0YWdzOgogICAgICAtIE9wZW5BSQogICAgICBzdW1tYXJ5OiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgZmlsZS4KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBmaWxlX2lkCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgSUQgb2YgdGhlIGZpbGUgdG8gdXNlIGZvciB0aGlzIHJlcXVlc3QKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246IE9LCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9PcGVuQUlGaWxlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogUmV0cmlldmUgZmlsZQogICAgICAgIGdyb3VwOiBmaWxlcwogICAgICAgIHBhdGg6IHJldHJpZXZlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9maWxlcy9maWxlLVhqR3hTM0tURzB1Tm1OT0szNjJpSnVhMyBcCiAgICAgICAgICAgICAgLUggJ0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVknCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKICAgICAgICAgICAgb3BlbmFpLkZpbGUucmV0cmlldmUoImZpbGUtWGpHeFMzS1RHMHVObU5PSzM2MmlKdWEzIikKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5yZXRyaWV2ZUZpbGUoImZpbGUtWGpHeFMzS1RHMHVObU5PSzM2MmlKdWEzIik7CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImZpbGUtWGpHeFMzS1RHMHVObU5PSzM2MmlKdWEzIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJmaWxlIiwKICAgICAgICAgICAgImJ5dGVzIjogMTQwLAogICAgICAgICAgICAiY3JlYXRlZF9hdCI6IDE2MTM3Nzk2NTcsCiAgICAgICAgICAgICJmaWxlbmFtZSI6ICJteWRhdGEuanNvbmwiLAogICAgICAgICAgICAicHVycG9zZSI6ICJmaW5lLXR1bmUiCiAgICAgICAgICB9CgogIC9maWxlcy97ZmlsZV9pZH0vY29udGVudDoKICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IGRvd25sb2FkRmlsZQogICAgICB0YWdzOgogICAgICAtIE9wZW5BSQogICAgICBzdW1tYXJ5OiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUKICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBmaWxlX2lkCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgSUQgb2YgdGhlIGZpbGUgdG8gdXNlIGZvciB0aGlzIHJlcXVlc3QKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246IE9LCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogUmV0cmlldmUgZmlsZSBjb250ZW50CiAgICAgICAgZ3JvdXA6IGZpbGVzCiAgICAgICAgcGF0aDogcmV0cmlldmUtY29udGVudAogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvZmlsZXMvZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMvY29udGVudCBcCiAgICAgICAgICAgICAgLUggJ0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVknID4gZmlsZS5qc29ubAogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIGNvbnRlbnQgPSBvcGVuYWkuRmlsZS5kb3dubG9hZCgiZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMiKQogICAgICAgICAgbm9kZS5qczogfAogICAgICAgICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb24sIE9wZW5BSUFwaSB9ID0gcmVxdWlyZSgib3BlbmFpIik7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7CiAgICAgICAgICAgICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG9wZW5haSA9IG5ldyBPcGVuQUlBcGkoY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3BlbmFpLmRvd25sb2FkRmlsZSgiZmlsZS1Yakd4UzNLVEcwdU5tTk9LMzYyaUp1YTMiKTsKCiAgL2Fuc3dlcnM6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlQW5zd2VyCiAgICAgIGRlcHJlY2F0ZWQ6IHRydWUKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogfAogICAgICAgIEFuc3dlcnMgdGhlIHNwZWNpZmllZCBxdWVzdGlvbiB1c2luZyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRzIGFuZCBleGFtcGxlcy4KCiAgICAgICAgVGhlIGVuZHBvaW50IGZpcnN0IFtzZWFyY2hlc10oL2RvY3MvYXBpLXJlZmVyZW5jZS9zZWFyY2hlcykgb3ZlciBwcm92aWRlZCBkb2N1bWVudHMgb3IgZmlsZXMgdG8gZmluZCByZWxldmFudCBjb250ZXh0LiBUaGUgcmVsZXZhbnQgY29udGV4dCBpcyBjb21iaW5lZCB3aXRoIHRoZSBwcm92aWRlZCBleGFtcGxlcyBhbmQgcXVlc3Rpb24gdG8gY3JlYXRlIHRoZSBwcm9tcHQgZm9yIFtjb21wbGV0aW9uXSgvZG9jcy9hcGktcmVmZXJlbmNlL2NvbXBsZXRpb25zKS4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVBbnN3ZXJSZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZUFuc3dlclJlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ3JlYXRlIGFuc3dlcgogICAgICAgIGdyb3VwOiBhbnN3ZXJzCiAgICAgICAgcGF0aDogY3JlYXRlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9hbnN3ZXJzIFwKICAgICAgICAgICAgICAtWCBQT1NUIFwKICAgICAgICAgICAgICAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWSIgXAogICAgICAgICAgICAgIC1IICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFwKICAgICAgICAgICAgICAtZCAnewogICAgICAgICAgICAgICAgImRvY3VtZW50cyI6IFsiUHVwcHkgQSBpcyBoYXBweS4iLCAiUHVwcHkgQiBpcyBzYWQuIl0sCiAgICAgICAgICAgICAgICAicXVlc3Rpb24iOiAid2hpY2ggcHVwcHkgaXMgaGFwcHk/IiwKICAgICAgICAgICAgICAgICJzZWFyY2hfbW9kZWwiOiAiYWRhIiwKICAgICAgICAgICAgICAgICJtb2RlbCI6ICJjdXJpZSIsCiAgICAgICAgICAgICAgICAiZXhhbXBsZXNfY29udGV4dCI6ICJJbiAyMDE3LCBVLlMuIGxpZmUgZXhwZWN0YW5jeSB3YXMgNzguNiB5ZWFycy4iLAogICAgICAgICAgICAgICAgImV4YW1wbGVzIjogW1siV2hhdCBpcyBodW1hbiBsaWZlIGV4cGVjdGFuY3kgaW4gdGhlIFVuaXRlZCBTdGF0ZXM/IiwiNzggeWVhcnMuIl1dLAogICAgICAgICAgICAgICAgIm1heF90b2tlbnMiOiA1LAogICAgICAgICAgICAgICAgInN0b3AiOiBbIlxuIiwgIjx8ZW5kb2Z0ZXh0fD4iXQogICAgICAgICAgICAgIH0nCgogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIG9wZW5haS5BbnN3ZXIuY3JlYXRlKAogICAgICAgICAgICAgIHNlYXJjaF9tb2RlbD0iYWRhIiwKICAgICAgICAgICAgICBtb2RlbD0iY3VyaWUiLAogICAgICAgICAgICAgIHF1ZXN0aW9uPSJ3aGljaCBwdXBweSBpcyBoYXBweT8iLAogICAgICAgICAgICAgIGRvY3VtZW50cz1bIlB1cHB5IEEgaXMgaGFwcHkuIiwgIlB1cHB5IEIgaXMgc2FkLiJdLAogICAgICAgICAgICAgIGV4YW1wbGVzX2NvbnRleHQ9IkluIDIwMTcsIFUuUy4gbGlmZSBleHBlY3RhbmN5IHdhcyA3OC42IHllYXJzLiIsCiAgICAgICAgICAgICAgZXhhbXBsZXM9W1siV2hhdCBpcyBodW1hbiBsaWZlIGV4cGVjdGFuY3kgaW4gdGhlIFVuaXRlZCBTdGF0ZXM/IiwiNzggeWVhcnMuIl1dLAogICAgICAgICAgICAgIG1heF90b2tlbnM9NSwKICAgICAgICAgICAgICBzdG9wPVsiXG4iLCAiPHxlbmRvZnRleHR8PiJdLAogICAgICAgICAgICApCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuY3JlYXRlQW5zd2VyKHsKICAgICAgICAgICAgICBzZWFyY2hfbW9kZWw6ICJhZGEiLAogICAgICAgICAgICAgIG1vZGVsOiAiY3VyaWUiLAogICAgICAgICAgICAgIHF1ZXN0aW9uOiAid2hpY2ggcHVwcHkgaXMgaGFwcHk/IiwKICAgICAgICAgICAgICBkb2N1bWVudHM6IFsiUHVwcHkgQSBpcyBoYXBweS4iLCAiUHVwcHkgQiBpcyBzYWQuIl0sCiAgICAgICAgICAgICAgZXhhbXBsZXNfY29udGV4dDogIkluIDIwMTcsIFUuUy4gbGlmZSBleHBlY3RhbmN5IHdhcyA3OC42IHllYXJzLiIsCiAgICAgICAgICAgICAgZXhhbXBsZXM6IFtbIldoYXQgaXMgaHVtYW4gbGlmZSBleHBlY3RhbmN5IGluIHRoZSBVbml0ZWQgU3RhdGVzPyIsIjc4IHllYXJzLiJdXSwKICAgICAgICAgICAgICBtYXhfdG9rZW5zOiA1LAogICAgICAgICAgICAgIHN0b3A6IFsiXG4iLCAiPHxlbmRvZnRleHR8PiJdLAogICAgICAgICAgICB9KTsKICAgICAgICBwYXJhbWV0ZXJzOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJkb2N1bWVudHMiOiBbIlB1cHB5IEEgaXMgaGFwcHkuIiwgIlB1cHB5IEIgaXMgc2FkLiJdLAogICAgICAgICAgICAicXVlc3Rpb24iOiAid2hpY2ggcHVwcHkgaXMgaGFwcHk/IiwKICAgICAgICAgICAgInNlYXJjaF9tb2RlbCI6ICJhZGEiLAogICAgICAgICAgICAibW9kZWwiOiAiY3VyaWUiLAogICAgICAgICAgICAiZXhhbXBsZXNfY29udGV4dCI6ICJJbiAyMDE3LCBVLlMuIGxpZmUgZXhwZWN0YW5jeSB3YXMgNzguNiB5ZWFycy4iLAogICAgICAgICAgICAiZXhhbXBsZXMiOiBbWyJXaGF0IGlzIGh1bWFuIGxpZmUgZXhwZWN0YW5jeSBpbiB0aGUgVW5pdGVkIFN0YXRlcz8iLCI3OCB5ZWFycy4iXV0sCiAgICAgICAgICAgICJtYXhfdG9rZW5zIjogNSwKICAgICAgICAgICAgInN0b3AiOiBbIlxuIiwgIjx8ZW5kb2Z0ZXh0fD4iXQogICAgICAgICAgfQogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJhbnN3ZXJzIjogWwogICAgICAgICAgICAgICJwdXBweSBBLiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImNvbXBsZXRpb24iOiAiY21wbC0yZXVWYTFrbUtVdUxwU1g2MDBNNDExMjVNbzlOSSIsCiAgICAgICAgICAgICJtb2RlbCI6ICJjdXJpZToyMDIwLTA1LTAzIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJhbnN3ZXIiLAogICAgICAgICAgICAic2VhcmNoX21vZGVsIjogImFkYSIsCiAgICAgICAgICAgICJzZWxlY3RlZF9kb2N1bWVudHMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImRvY3VtZW50IjogMCwKICAgICAgICAgICAgICAgICJ0ZXh0IjogIlB1cHB5IEEgaXMgaGFwcHkuICIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJkb2N1bWVudCI6IDEsCiAgICAgICAgICAgICAgICAidGV4dCI6ICJQdXBweSBCIGlzIHNhZC4gIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQoKICAvY2xhc3NpZmljYXRpb25zOgogICAgcG9zdDoKICAgICAgb3BlcmF0aW9uSWQ6IGNyZWF0ZUNsYXNzaWZpY2F0aW9uCiAgICAgIGRlcHJlY2F0ZWQ6IHRydWUKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogfAogICAgICAgIENsYXNzaWZpZXMgdGhlIHNwZWNpZmllZCBgcXVlcnlgIHVzaW5nIHByb3ZpZGVkIGV4YW1wbGVzLgoKICAgICAgICBUaGUgZW5kcG9pbnQgZmlyc3QgW3NlYXJjaGVzXSgvZG9jcy9hcGktcmVmZXJlbmNlL3NlYXJjaGVzKSBvdmVyIHRoZSBsYWJlbGVkIGV4YW1wbGVzCiAgICAgICAgdG8gc2VsZWN0IHRoZSBvbmVzIG1vc3QgcmVsZXZhbnQgZm9yIHRoZSBwYXJ0aWN1bGFyIHF1ZXJ5LiBUaGVuLCB0aGUgcmVsZXZhbnQgZXhhbXBsZXMKICAgICAgICBhcmUgY29tYmluZWQgd2l0aCB0aGUgcXVlcnkgdG8gY29uc3RydWN0IGEgcHJvbXB0IHRvIHByb2R1Y2UgdGhlIGZpbmFsIGxhYmVsIHZpYSB0aGUKICAgICAgICBbY29tcGxldGlvbnNdKC9kb2NzL2FwaS1yZWZlcmVuY2UvY29tcGxldGlvbnMpIGVuZHBvaW50LgoKICAgICAgICBMYWJlbGVkIGV4YW1wbGVzIGNhbiBiZSBwcm92aWRlZCB2aWEgYW4gdXBsb2FkZWQgYGZpbGVgLCBvciBleHBsaWNpdGx5IGxpc3RlZCBpbiB0aGUKICAgICAgICByZXF1ZXN0IHVzaW5nIHRoZSBgZXhhbXBsZXNgIHBhcmFtZXRlciBmb3IgcXVpY2sgdGVzdHMgYW5kIHNtYWxsIHNjYWxlIHVzZSBjYXNlcy4KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVDbGFzc2lmaWNhdGlvblJlcXVlc3QnCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlYXRlQ2xhc3NpZmljYXRpb25SZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IENyZWF0ZSBjbGFzc2lmaWNhdGlvbgogICAgICAgIGdyb3VwOiBjbGFzc2lmaWNhdGlvbnMKICAgICAgICBwYXRoOiBjcmVhdGUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2NsYXNzaWZpY2F0aW9ucyBcCiAgICAgICAgICAgICAgLVggUE9TVCBcCiAgICAgICAgICAgICAgLUggIkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVkiIFwKICAgICAgICAgICAgICAtSCAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcCiAgICAgICAgICAgICAgLWQgJ3sKICAgICAgICAgICAgICAgICJleGFtcGxlcyI6IFsKICAgICAgICAgICAgICAgICAgWyJBIGhhcHB5IG1vbWVudCIsICJQb3NpdGl2ZSJdLAogICAgICAgICAgICAgICAgICBbIkkgYW0gc2FkLiIsICJOZWdhdGl2ZSJdLAogICAgICAgICAgICAgICAgICBbIkkgYW0gZmVlbGluZyBhd2Vzb21lIiwgIlBvc2l0aXZlIl1dLAogICAgICAgICAgICAgICAgInF1ZXJ5IjogIkl0IGlzIGEgcmFpbmluZyBkYXkgOigiLAogICAgICAgICAgICAgICAgInNlYXJjaF9tb2RlbCI6ICJhZGEiLAogICAgICAgICAgICAgICAgIm1vZGVsIjogImN1cmllIiwKICAgICAgICAgICAgICAgICJsYWJlbHMiOlsiUG9zaXRpdmUiLCAiTmVnYXRpdmUiLCAiTmV1dHJhbCJdCiAgICAgICAgICAgICAgfScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuQ2xhc3NpZmljYXRpb24uY3JlYXRlKAogICAgICAgICAgICAgIHNlYXJjaF9tb2RlbD0iYWRhIiwKICAgICAgICAgICAgICBtb2RlbD0iY3VyaWUiLAogICAgICAgICAgICAgIGV4YW1wbGVzPVsKICAgICAgICAgICAgICAgIFsiQSBoYXBweSBtb21lbnQiLCAiUG9zaXRpdmUiXSwKICAgICAgICAgICAgICAgIFsiSSBhbSBzYWQuIiwgIk5lZ2F0aXZlIl0sCiAgICAgICAgICAgICAgICBbIkkgYW0gZmVlbGluZyBhd2Vzb21lIiwgIlBvc2l0aXZlIl0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHF1ZXJ5PSJJdCBpcyBhIHJhaW5pbmcgZGF5IDooIiwKICAgICAgICAgICAgICBsYWJlbHM9WyJQb3NpdGl2ZSIsICJOZWdhdGl2ZSIsICJOZXV0cmFsIl0sCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5jcmVhdGVDbGFzc2lmaWNhdGlvbih7CiAgICAgICAgICAgICAgc2VhcmNoX21vZGVsOiAiYWRhIiwKICAgICAgICAgICAgICBtb2RlbDogImN1cmllIiwKICAgICAgICAgICAgICBleGFtcGxlczogWwogICAgICAgICAgICAgICAgWyJBIGhhcHB5IG1vbWVudCIsICJQb3NpdGl2ZSJdLAogICAgICAgICAgICAgICAgWyJJIGFtIHNhZC4iLCAiTmVnYXRpdmUiXSwKICAgICAgICAgICAgICAgIFsiSSBhbSBmZWVsaW5nIGF3ZXNvbWUiLCAiUG9zaXRpdmUiXQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgcXVlcnk6Ikl0IGlzIGEgcmFpbmluZyBkYXkgOigiLAogICAgICAgICAgICAgIGxhYmVsczogWyJQb3NpdGl2ZSIsICJOZWdhdGl2ZSIsICJOZXV0cmFsIl0sCiAgICAgICAgICAgIH0pOwogICAgICAgIHBhcmFtZXRlcnM6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImV4YW1wbGVzIjogWwogICAgICAgICAgICAgIFsiQSBoYXBweSBtb21lbnQiLCAiUG9zaXRpdmUiXSwKICAgICAgICAgICAgICBbIkkgYW0gc2FkLiIsICJOZWdhdGl2ZSJdLAogICAgICAgICAgICAgIFsiSSBhbSBmZWVsaW5nIGF3ZXNvbWUiLCAiUG9zaXRpdmUiXQogICAgICAgICAgICBdLAogICAgICAgICAgICAibGFiZWxzIjogWyJQb3NpdGl2ZSIsICJOZWdhdGl2ZSIsICJOZXV0cmFsIl0sCiAgICAgICAgICAgICJxdWVyeSI6ICJJdCBpcyBhIHJhaW5pbmcgZGF5IDooIiwKICAgICAgICAgICAgInNlYXJjaF9tb2RlbCI6ICJhZGEiLAogICAgICAgICAgICAibW9kZWwiOiAiY3VyaWUiCiAgICAgICAgICB9CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImNvbXBsZXRpb24iOiAiY21wbC0yZXVON2xVVlowZDRSS2JRcVJWNzlJaWlFNk0xZiIsCiAgICAgICAgICAgICJsYWJlbCI6ICJOZWdhdGl2ZSIsCiAgICAgICAgICAgICJtb2RlbCI6ICJjdXJpZToyMDIwLTA1LTAzIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJjbGFzc2lmaWNhdGlvbiIsCiAgICAgICAgICAgICJzZWFyY2hfbW9kZWwiOiAiYWRhIiwKICAgICAgICAgICAgInNlbGVjdGVkX2V4YW1wbGVzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJkb2N1bWVudCI6IDEsCiAgICAgICAgICAgICAgICAibGFiZWwiOiAiTmVnYXRpdmUiLAogICAgICAgICAgICAgICAgInRleHQiOiAiSSBhbSBzYWQuIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImRvY3VtZW50IjogMCwKICAgICAgICAgICAgICAgICJsYWJlbCI6ICJQb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAidGV4dCI6ICJBIGhhcHB5IG1vbWVudCIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJkb2N1bWVudCI6IDIsCiAgICAgICAgICAgICAgICAibGFiZWwiOiAiUG9zaXRpdmUiLAogICAgICAgICAgICAgICAgInRleHQiOiAiSSBhbSBmZWVsaW5nIGF3ZXNvbWUiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CgogIC9maW5lLXR1bmVzOgogICAgcG9zdDoKICAgICAgb3BlcmF0aW9uSWQ6IGNyZWF0ZUZpbmVUdW5lCiAgICAgIHRhZ3M6CiAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IHwKICAgICAgICBDcmVhdGVzIGEgam9iIHRoYXQgZmluZS10dW5lcyBhIHNwZWNpZmllZCBtb2RlbCBmcm9tIGEgZ2l2ZW4gZGF0YXNldC4KCiAgICAgICAgUmVzcG9uc2UgaW5jbHVkZXMgZGV0YWlscyBvZiB0aGUgZW5xdWV1ZWQgam9iIGluY2x1ZGluZyBqb2Igc3RhdHVzIGFuZCB0aGUgbmFtZSBvZiB0aGUgZmluZS10dW5lZCBtb2RlbHMgb25jZSBjb21wbGV0ZS4KCiAgICAgICAgW0xlYXJuIG1vcmUgYWJvdXQgRmluZS10dW5pbmddKC9kb2NzL2d1aWRlcy9maW5lLXR1bmluZykKICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVhdGVGaW5lVHVuZVJlcXVlc3QnCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRmluZVR1bmUnCiAgICAgIHgtb2FpTWV0YToKICAgICAgICBuYW1lOiBDcmVhdGUgZmluZS10dW5lCiAgICAgICAgZ3JvdXA6IGZpbmUtdHVuZXMKICAgICAgICBwYXRoOiBjcmVhdGUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2ZpbmUtdHVuZXMgXAogICAgICAgICAgICAgIC1YIFBPU1QgXAogICAgICAgICAgICAgIC1IICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24iIFwKICAgICAgICAgICAgICAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWSIgXAogICAgICAgICAgICAgIC1kICd7CiAgICAgICAgICAgICAgInRyYWluaW5nX2ZpbGUiOiAiZmlsZS1YR2ludWpibEhQd0dMU3p0ejhjUFM4WFkiCiAgICAgICAgICAgIH0nCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKICAgICAgICAgICAgb3BlbmFpLkZpbmVUdW5lLmNyZWF0ZSh0cmFpbmluZ19maWxlPSJmaWxlLVhHaW51amJsSFB3R0xTenR6OGNQUzhYWSIpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuY3JlYXRlRmluZVR1bmUoewogICAgICAgICAgICAgIHRyYWluaW5nX2ZpbGU6ICJmaWxlLVhHaW51amJsSFB3R0xTenR6OGNQUzhYWSIsCiAgICAgICAgICAgIH0pOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJmdC1BRjFXb1JxZDNhSkFIc3FjOU5ZN2lMOEYiLAogICAgICAgICAgICAib2JqZWN0IjogImZpbmUtdHVuZSIsCiAgICAgICAgICAgICJtb2RlbCI6ICJjdXJpZSIsCiAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzM1MiwKICAgICAgICAgICAgImV2ZW50cyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbmUtdHVuZS1ldmVudCIsCiAgICAgICAgICAgICAgICAiY3JlYXRlZF9hdCI6IDE2MTQ4MDczNTIsCiAgICAgICAgICAgICAgICAibGV2ZWwiOiAiaW5mbyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJKb2IgZW5xdWV1ZWQuIFdhaXRpbmcgZm9yIGpvYnMgYWhlYWQgdG8gY29tcGxldGUuIFF1ZXVlIG51bWJlcjogMC4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZmluZV90dW5lZF9tb2RlbCI6IG51bGwsCiAgICAgICAgICAgICJoeXBlcnBhcmFtcyI6IHsKICAgICAgICAgICAgICAiYmF0Y2hfc2l6ZSI6IDQsCiAgICAgICAgICAgICAgImxlYXJuaW5nX3JhdGVfbXVsdGlwbGllciI6IDAuMSwKICAgICAgICAgICAgICAibl9lcG9jaHMiOiA0LAogICAgICAgICAgICAgICJwcm9tcHRfbG9zc193ZWlnaHQiOiAwLjEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvcmdhbml6YXRpb25faWQiOiAib3JnLS4uLiIsCiAgICAgICAgICAgICJyZXN1bHRfZmlsZXMiOiBbXSwKICAgICAgICAgICAgInN0YXR1cyI6ICJwZW5kaW5nIiwKICAgICAgICAgICAgInZhbGlkYXRpb25fZmlsZXMiOiBbXSwKICAgICAgICAgICAgInRyYWluaW5nX2ZpbGVzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmaWxlLVhHaW51amJsSFB3R0xTenR6OGNQUzhYWSIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbGUiLAogICAgICAgICAgICAgICAgImJ5dGVzIjogMTU0NzI3NiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxMDA2MjI4MSwKICAgICAgICAgICAgICAgICJmaWxlbmFtZSI6ICJteS1kYXRhLXRyYWluLmpzb25sIiwKICAgICAgICAgICAgICAgICJwdXJwb3NlIjogImZpbmUtdHVuZS10cmFpbiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ1cGRhdGVkX2F0IjogMTYxNDgwNzM1MiwKICAgICAgICAgIH0KICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IGxpc3RGaW5lVHVuZXMKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogfAogICAgICAgIExpc3QgeW91ciBvcmdhbml6YXRpb24ncyBmaW5lLXR1bmluZyBqb2JzCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvTGlzdEZpbmVUdW5lc1Jlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogTGlzdCBmaW5lLXR1bmVzCiAgICAgICAgZ3JvdXA6IGZpbmUtdHVuZXMKICAgICAgICBwYXRoOiBsaXN0CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9maW5lLXR1bmVzIFwKICAgICAgICAgICAgICAtSCAnQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuRmluZVR1bmUubGlzdCgpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkubGlzdEZpbmVUdW5lcygpOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmdC1BRjFXb1JxZDNhSkFIc3FjOU5ZN2lMOEYiLAogICAgICAgICAgICAgICAgIm9iamVjdCI6ICJmaW5lLXR1bmUiLAogICAgICAgICAgICAgICAgIm1vZGVsIjogImN1cmllIiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzM1MiwKICAgICAgICAgICAgICAgICJmaW5lX3R1bmVkX21vZGVsIjogbnVsbCwKICAgICAgICAgICAgICAgICJoeXBlcnBhcmFtcyI6IHsgLi4uIH0sCiAgICAgICAgICAgICAgICAib3JnYW5pemF0aW9uX2lkIjogIm9yZy0uLi4iLAogICAgICAgICAgICAgICAgInJlc3VsdF9maWxlcyI6IFtdLAogICAgICAgICAgICAgICAgInN0YXR1cyI6ICJwZW5kaW5nIiwKICAgICAgICAgICAgICAgICJ2YWxpZGF0aW9uX2ZpbGVzIjogW10sCiAgICAgICAgICAgICAgICAidHJhaW5pbmdfZmlsZXMiOiBbIHsgLi4uIH0gXSwKICAgICAgICAgICAgICAgICJ1cGRhdGVkX2F0IjogMTYxNDgwNzM1MiwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsgLi4uIH0sCiAgICAgICAgICAgICAgeyAuLi4gfQogICAgICAgICAgICBdCiAgICAgICAgICB9CgogIC9maW5lLXR1bmVzL3tmaW5lX3R1bmVfaWR9OgogICAgZ2V0OgogICAgICBvcGVyYXRpb25JZDogcmV0cmlldmVGaW5lVHVuZQogICAgICB0YWdzOgogICAgICAtIE9wZW5BSQogICAgICBzdW1tYXJ5OiB8CiAgICAgICAgR2V0cyBpbmZvIGFib3V0IHRoZSBmaW5lLXR1bmUgam9iLgoKICAgICAgICBbTGVhcm4gbW9yZSBhYm91dCBGaW5lLXR1bmluZ10oL2RvY3MvZ3VpZGVzL2ZpbmUtdHVuaW5nKQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gaW46IHBhdGgKICAgICAgICAgIG5hbWU6IGZpbmVfdHVuZV9pZAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIGV4YW1wbGU6CiAgICAgICAgICAgICAgZnQtQUYxV29ScWQzYUpBSHNxYzlOWTdpTDhGCiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgSUQgb2YgdGhlIGZpbmUtdHVuZSBqb2IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246IE9LCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9GaW5lVHVuZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IFJldHJpZXZlIGZpbmUtdHVuZQogICAgICAgIGdyb3VwOiBmaW5lLXR1bmVzCiAgICAgICAgcGF0aDogcmV0cmlldmUKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2ZpbmUtdHVuZXMvZnQtQUYxV29ScWQzYUpBSHNxYzlOWTdpTDhGIFwKICAgICAgICAgICAgICAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWSIKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuRmluZVR1bmUucmV0cmlldmUoaWQ9ImZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RiIpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkucmV0cmlldmVGaW5lVHVuZSgiZnQtQUYxV29ScWQzYUpBSHNxYzlOWTdpTDhGIik7CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RiIsCiAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lIiwKICAgICAgICAgICAgIm1vZGVsIjogImN1cmllIiwKICAgICAgICAgICAgImNyZWF0ZWRfYXQiOiAxNjE0ODA3MzUyLAogICAgICAgICAgICAiZXZlbnRzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzM1MiwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkpvYiBlbnF1ZXVlZC4gV2FpdGluZyBmb3Igam9icyBhaGVhZCB0byBjb21wbGV0ZS4gUXVldWUgbnVtYmVyOiAwLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzM1NiwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkpvYiBzdGFydGVkLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzg2MSwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIlVwbG9hZGVkIHNuYXBzaG90OiBjdXJpZTpmdC1hY21lY28tMjAyMS0wMy0wMy0yMS00NC0yMC4iCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbmUtdHVuZS1ldmVudCIsCiAgICAgICAgICAgICAgICAiY3JlYXRlZF9hdCI6IDE2MTQ4MDc4NjQsCiAgICAgICAgICAgICAgICAibGV2ZWwiOiAiaW5mbyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJVcGxvYWRlZCByZXN1bHQgZmlsZXM6IGZpbGUtUVFtNlpwcWROd0FhVkMzYVN6NXNXd0xULiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzg2NCwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkpvYiBzdWNjZWVkZWQuIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImZpbmVfdHVuZWRfbW9kZWwiOiAiY3VyaWU6ZnQtYWNtZWNvLTIwMjEtMDMtMDMtMjEtNDQtMjAiLAogICAgICAgICAgICAiaHlwZXJwYXJhbXMiOiB7CiAgICAgICAgICAgICAgImJhdGNoX3NpemUiOiA0LAogICAgICAgICAgICAgICJsZWFybmluZ19yYXRlX211bHRpcGxpZXIiOiAwLjEsCiAgICAgICAgICAgICAgIm5fZXBvY2hzIjogNCwKICAgICAgICAgICAgICAicHJvbXB0X2xvc3Nfd2VpZ2h0IjogMC4xLAogICAgICAgICAgICB9LAogICAgICAgICAgICAib3JnYW5pemF0aW9uX2lkIjogIm9yZy0uLi4iLAogICAgICAgICAgICAicmVzdWx0X2ZpbGVzIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmaWxlLVFRbTZacHFkTndBYVZDM2FTejVzV3dMVCIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbGUiLAogICAgICAgICAgICAgICAgImJ5dGVzIjogODE1MDksCiAgICAgICAgICAgICAgICAiY3JlYXRlZF9hdCI6IDE2MTQ4MDc4NjMsCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiOiAiY29tcGlsZWRfcmVzdWx0cy5jc3YiLAogICAgICAgICAgICAgICAgInB1cnBvc2UiOiAiZmluZS10dW5lLXJlc3VsdHMiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAic3RhdHVzIjogInN1Y2NlZWRlZCIsCiAgICAgICAgICAgICJ2YWxpZGF0aW9uX2ZpbGVzIjogW10sCiAgICAgICAgICAgICJ0cmFpbmluZ19maWxlcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiZmlsZS1YR2ludWpibEhQd0dMU3p0ejhjUFM4WFkiLAogICAgICAgICAgICAgICAgIm9iamVjdCI6ICJmaWxlIiwKICAgICAgICAgICAgICAgICJieXRlcyI6IDE1NDcyNzYsCiAgICAgICAgICAgICAgICAiY3JlYXRlZF9hdCI6IDE2MTAwNjIyODEsCiAgICAgICAgICAgICAgICAiZmlsZW5hbWUiOiAibXktZGF0YS10cmFpbi5qc29ubCIsCiAgICAgICAgICAgICAgICAicHVycG9zZSI6ICJmaW5lLXR1bmUtdHJhaW4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidXBkYXRlZF9hdCI6IDE2MTQ4MDc4NjUsCiAgICAgICAgICB9CgogIC9maW5lLXR1bmVzL3tmaW5lX3R1bmVfaWR9L2NhbmNlbDoKICAgIHBvc3Q6CiAgICAgIG9wZXJhdGlvbklkOiBjYW5jZWxGaW5lVHVuZQogICAgICB0YWdzOgogICAgICAtIE9wZW5BSQogICAgICBzdW1tYXJ5OiB8CiAgICAgICAgSW1tZWRpYXRlbHkgY2FuY2VsIGEgZmluZS10dW5lIGpvYi4KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBmaW5lX3R1bmVfaWQKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBleGFtcGxlOgogICAgICAgICAgICAgIGZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIElEIG9mIHRoZSBmaW5lLXR1bmUgam9iIHRvIGNhbmNlbAogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0ZpbmVUdW5lJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogQ2FuY2VsIGZpbmUtdHVuZQogICAgICAgIGdyb3VwOiBmaW5lLXR1bmVzCiAgICAgICAgcGF0aDogY2FuY2VsCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9maW5lLXR1bmVzL2Z0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4Ri9jYW5jZWwgXAogICAgICAgICAgICAgIC1YIFBPU1QgXAogICAgICAgICAgICAgIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZIgogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIG9wZW5haS5GaW5lVHVuZS5jYW5jZWwoaWQ9ImZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RiIpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuY2FuY2VsRmluZVR1bmUoImZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RiIpOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJmdC14aHJwQmJ2VlV6WUdvOG9VTzFGWTRuSTciLAogICAgICAgICAgICAib2JqZWN0IjogImZpbmUtdHVuZSIsCiAgICAgICAgICAgICJtb2RlbCI6ICJjdXJpZSIsCiAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzc3MCwKICAgICAgICAgICAgImV2ZW50cyI6IFsgeyAuLi4gfSBdLAogICAgICAgICAgICAiZmluZV90dW5lZF9tb2RlbCI6IG51bGwsCiAgICAgICAgICAgICJoeXBlcnBhcmFtcyI6IHsgLi4uIH0sCiAgICAgICAgICAgICJvcmdhbml6YXRpb25faWQiOiAib3JnLS4uLiIsCiAgICAgICAgICAgICJyZXN1bHRfZmlsZXMiOiBbXSwKICAgICAgICAgICAgInN0YXR1cyI6ICJjYW5jZWxsZWQiLAogICAgICAgICAgICAidmFsaWRhdGlvbl9maWxlcyI6IFtdLAogICAgICAgICAgICAidHJhaW5pbmdfZmlsZXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogImZpbGUtWEdpbnVqYmxIUHdHTFN6dHo4Y1BTOFhZIiwKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmlsZSIsCiAgICAgICAgICAgICAgICAiYnl0ZXMiOiAxNTQ3Mjc2LAogICAgICAgICAgICAgICAgImNyZWF0ZWRfYXQiOiAxNjEwMDYyMjgxLAogICAgICAgICAgICAgICAgImZpbGVuYW1lIjogIm15LWRhdGEtdHJhaW4uanNvbmwiLAogICAgICAgICAgICAgICAgInB1cnBvc2UiOiAiZmluZS10dW5lLXRyYWluIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInVwZGF0ZWRfYXQiOiAxNjE0ODA3Nzg5LAogICAgICAgICAgfQoKICAvZmluZS10dW5lcy97ZmluZV90dW5lX2lkfS9ldmVudHM6CiAgICBnZXQ6CiAgICAgIG9wZXJhdGlvbklkOiBsaXN0RmluZVR1bmVFdmVudHMKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogfAogICAgICAgIEdldCBmaW5lLWdyYWluZWQgc3RhdHVzIHVwZGF0ZXMgZm9yIGEgZmluZS10dW5lIGpvYi4KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBmaW5lX3R1bmVfaWQKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBleGFtcGxlOgogICAgICAgICAgICAgIGZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIElEIG9mIHRoZSBmaW5lLXR1bmUgam9iIHRvIGdldCBldmVudHMgZm9yLgogICAgICAgIC0gaW46IHF1ZXJ5CiAgICAgICAgICBuYW1lOiBzdHJlYW0KICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICB0eXBlOiBib29sZWFuCiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBXaGV0aGVyIHRvIHN0cmVhbSBldmVudHMgZm9yIHRoZSBmaW5lLXR1bmUgam9iLiBJZiBzZXQgdG8gdHJ1ZSwKICAgICAgICAgICAgZXZlbnRzIHdpbGwgYmUgc2VudCBhcyBkYXRhLW9ubHkKICAgICAgICAgICAgW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdCkKICAgICAgICAgICAgYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlLiBUaGUgc3RyZWFtIHdpbGwgdGVybWluYXRlIHdpdGggYQogICAgICAgICAgICBgZGF0YTogW0RPTkVdYCBtZXNzYWdlIHdoZW4gdGhlIGpvYiBpcyBmaW5pc2hlZCAoc3VjY2VlZGVkLCBjYW5jZWxsZWQsCiAgICAgICAgICAgIG9yIGZhaWxlZCkuCgogICAgICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIG9ubHkgZXZlbnRzIGdlbmVyYXRlZCBzbyBmYXIgd2lsbCBiZSByZXR1cm5lZC4KICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246IE9LCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9MaXN0RmluZVR1bmVFdmVudHNSZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IExpc3QgZmluZS10dW5lIGV2ZW50cwogICAgICAgIGdyb3VwOiBmaW5lLXR1bmVzCiAgICAgICAgcGF0aDogZXZlbnRzCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9maW5lLXR1bmVzL2Z0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4Ri9ldmVudHMgXAogICAgICAgICAgICAgIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZIgogICAgICAgICAgcHl0aG9uOiB8CiAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICBpbXBvcnQgb3BlbmFpCiAgICAgICAgICAgIG9wZW5haS5hcGlfa2V5ID0gb3MuZ2V0ZW52KCJPUEVOQUlfQVBJX0tFWSIpCiAgICAgICAgICAgIG9wZW5haS5GaW5lVHVuZS5saXN0X2V2ZW50cyhpZD0iZnQtQUYxV29ScWQzYUpBSHNxYzlOWTdpTDhGIikKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5saXN0RmluZVR1bmVFdmVudHMoImZ0LUFGMVdvUnFkM2FKQUhzcWM5Tlk3aUw4RiIpOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzM1MiwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkpvYiBlbnF1ZXVlZC4gV2FpdGluZyBmb3Igam9icyBhaGVhZCB0byBjb21wbGV0ZS4gUXVldWUgbnVtYmVyOiAwLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzM1NiwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkpvYiBzdGFydGVkLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzg2MSwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIlVwbG9hZGVkIHNuYXBzaG90OiBjdXJpZTpmdC1hY21lY28tMjAyMS0wMy0wMy0yMS00NC0yMC4iCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAib2JqZWN0IjogImZpbmUtdHVuZS1ldmVudCIsCiAgICAgICAgICAgICAgICAiY3JlYXRlZF9hdCI6IDE2MTQ4MDc4NjQsCiAgICAgICAgICAgICAgICAibGV2ZWwiOiAiaW5mbyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJVcGxvYWRlZCByZXN1bHQgZmlsZXM6IGZpbGUtUVFtNlpwcWROd0FhVkMzYVN6NXNXd0xULiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJvYmplY3QiOiAiZmluZS10dW5lLWV2ZW50IiwKICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IjogMTYxNDgwNzg2NCwKICAgICAgICAgICAgICAgICJsZXZlbCI6ICJpbmZvIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIkpvYiBzdWNjZWVkZWQuIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQoKICAvbW9kZWxzOgogICAgZ2V0OgogICAgICBvcGVyYXRpb25JZDogbGlzdE1vZGVscwogICAgICB0YWdzOgogICAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IExpc3RzIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIG1vZGVscywgYW5kIHByb3ZpZGVzIGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb25lIHN1Y2ggYXMgdGhlIG93bmVyIGFuZCBhdmFpbGFiaWxpdHkuCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBPSwogICAgICAgICAgY29udGVudDoKICAgICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvTGlzdE1vZGVsc1Jlc3BvbnNlJwogICAgICB4LW9haU1ldGE6CiAgICAgICAgbmFtZTogTGlzdCBtb2RlbHMKICAgICAgICBncm91cDogbW9kZWxzCiAgICAgICAgcGF0aDogbGlzdAogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgY3VybDogfAogICAgICAgICAgICBjdXJsIGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvbW9kZWxzIFwKICAgICAgICAgICAgICAtSCAnQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuTW9kZWwubGlzdCgpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkubGlzdE1vZGVscygpOwogICAgICAgIHJlc3BvbnNlOiB8CiAgICAgICAgICB7CiAgICAgICAgICAgICJkYXRhIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJtb2RlbC1pZC0wIiwKICAgICAgICAgICAgICAgICJvYmplY3QiOiAibW9kZWwiLAogICAgICAgICAgICAgICAgIm93bmVkX2J5IjogIm9yZ2FuaXphdGlvbi1vd25lciIsCiAgICAgICAgICAgICAgICAicGVybWlzc2lvbiI6IFsuLi5dCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAibW9kZWwtaWQtMSIsCiAgICAgICAgICAgICAgICAib2JqZWN0IjogIm1vZGVsIiwKICAgICAgICAgICAgICAgICJvd25lZF9ieSI6ICJvcmdhbml6YXRpb24tb3duZXIiLAogICAgICAgICAgICAgICAgInBlcm1pc3Npb24iOiBbLi4uXQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogIm1vZGVsLWlkLTIiLAogICAgICAgICAgICAgICAgIm9iamVjdCI6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAib3duZWRfYnkiOiAib3BlbmFpIiwKICAgICAgICAgICAgICAgICJwZXJtaXNzaW9uIjogWy4uLl0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICAib2JqZWN0IjogImxpc3QiCiAgICAgICAgICB9CgogIC9tb2RlbHMve21vZGVsfToKICAgIGdldDoKICAgICAgb3BlcmF0aW9uSWQ6IHJldHJpZXZlTW9kZWwKICAgICAgdGFnczoKICAgICAgICAtIE9wZW5BSQogICAgICBzdW1tYXJ5OiBSZXRyaWV2ZXMgYSBtb2RlbCBpbnN0YW5jZSwgcHJvdmlkaW5nIGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb2RlbCBzdWNoIGFzIHRoZSBvd25lciBhbmQgcGVybWlzc2lvbmluZy4KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBtb2RlbAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICMgaWRlYWxseSB0aGlzIHdpbGwgYmUgYW4gYWN0dWFsIElELCBzbyB0aGlzIHdpbGwgYWx3YXlzIHdvcmsgZnJvbSBicm93c2VyCiAgICAgICAgICAgIGV4YW1wbGU6CiAgICAgICAgICAgICAgdGV4dC1kYXZpbmNpLTAwMQogICAgICAgICAgZGVzY3JpcHRpb246CiAgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgbW9kZWwgdG8gdXNlIGZvciB0aGlzIHJlcXVlc3QKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246IE9LCiAgICAgICAgICBjb250ZW50OgogICAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9Nb2RlbCcKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IFJldHJpZXZlIG1vZGVsCiAgICAgICAgZ3JvdXA6IG1vZGVscwogICAgICAgIHBhdGg6IHJldHJpZXZlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9tb2RlbHMvVkFSX21vZGVsX2lkIFwKICAgICAgICAgICAgICAtSCAnQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWScKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuTW9kZWwucmV0cmlldmUoIlZBUl9tb2RlbF9pZCIpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkucmV0cmlldmVNb2RlbCgiVkFSX21vZGVsX2lkIik7CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogIlZBUl9tb2RlbF9pZCIsCiAgICAgICAgICAgICJvYmplY3QiOiAibW9kZWwiLAogICAgICAgICAgICAib3duZWRfYnkiOiAib3BlbmFpIiwKICAgICAgICAgICAgInBlcm1pc3Npb24iOiBbLi4uXQogICAgICAgICAgfQogICAgZGVsZXRlOgogICAgICBvcGVyYXRpb25JZDogZGVsZXRlTW9kZWwKICAgICAgdGFnczoKICAgICAgLSBPcGVuQUkKICAgICAgc3VtbWFyeTogRGVsZXRlIGEgZmluZS10dW5lZCBtb2RlbC4gWW91IG11c3QgaGF2ZSB0aGUgT3duZXIgcm9sZSBpbiB5b3VyIG9yZ2FuaXphdGlvbi4KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIGluOiBwYXRoCiAgICAgICAgICBuYW1lOiBtb2RlbAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIGV4YW1wbGU6IGN1cmllOmZ0LWFjbWVjby0yMDIxLTAzLTAzLTIxLTQ0LTIwCiAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIG1vZGVsIHRvIGRlbGV0ZQogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0RlbGV0ZU1vZGVsUmVzcG9uc2UnCiAgICAgIHgtb2FpTWV0YToKICAgICAgICBuYW1lOiBEZWxldGUgZmluZS10dW5lIG1vZGVsCiAgICAgICAgZ3JvdXA6IGZpbmUtdHVuZXMKICAgICAgICBwYXRoOiBkZWxldGUtbW9kZWwKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGN1cmw6IHwKICAgICAgICAgICAgY3VybCBodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL21vZGVscy9jdXJpZTpmdC1hY21lY28tMjAyMS0wMy0wMy0yMS00NC0yMCBcCiAgICAgICAgICAgICAgLVggREVMRVRFIFwKICAgICAgICAgICAgICAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWSIKICAgICAgICAgIHB5dGhvbjogfAogICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgaW1wb3J0IG9wZW5haQogICAgICAgICAgICBvcGVuYWkuYXBpX2tleSA9IG9zLmdldGVudigiT1BFTkFJX0FQSV9LRVkiKQogICAgICAgICAgICBvcGVuYWkuTW9kZWwuZGVsZXRlKCJjdXJpZTpmdC1hY21lY28tMjAyMS0wMy0wMy0yMS00NC0yMCIpCiAgICAgICAgICBub2RlLmpzOiB8CiAgICAgICAgICAgIGNvbnN0IHsgQ29uZmlndXJhdGlvbiwgT3BlbkFJQXBpIH0gPSByZXF1aXJlKCJvcGVuYWkiKTsKICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHsKICAgICAgICAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSUFwaShjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuZGVsZXRlTW9kZWwoJ2N1cmllOmZ0LWFjbWVjby0yMDIxLTAzLTAzLTIxLTQ0LTIwJyk7CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImN1cmllOmZ0LWFjbWVjby0yMDIxLTAzLTAzLTIxLTQ0LTIwIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJtb2RlbCIsCiAgICAgICAgICAgICJkZWxldGVkIjogdHJ1ZQogICAgICAgICAgfQoKICAvbW9kZXJhdGlvbnM6CiAgICBwb3N0OgogICAgICBvcGVyYXRpb25JZDogY3JlYXRlTW9kZXJhdGlvbgogICAgICB0YWdzOgogICAgICAgIC0gT3BlbkFJCiAgICAgIHN1bW1hcnk6IENsYXNzaWZpZXMgaWYgdGV4dCB2aW9sYXRlcyBPcGVuQUkncyBDb250ZW50IFBvbGljeQogICAgICByZXF1ZXN0Qm9keToKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZU1vZGVyYXRpb25SZXF1ZXN0JwogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogT0sKICAgICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWF0ZU1vZGVyYXRpb25SZXNwb25zZScKICAgICAgeC1vYWlNZXRhOgogICAgICAgIG5hbWU6IENyZWF0ZSBtb2RlcmF0aW9uCiAgICAgICAgZ3JvdXA6IG1vZGVyYXRpb25zCiAgICAgICAgcGF0aDogY3JlYXRlCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBjdXJsOiB8CiAgICAgICAgICAgIGN1cmwgaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9tb2RlcmF0aW9ucyBcCiAgICAgICAgICAgICAgLUggJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicgXAogICAgICAgICAgICAgIC1IICdBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJyBcCiAgICAgICAgICAgICAgLWQgJ3sKICAgICAgICAgICAgICAiaW5wdXQiOiAiSSB3YW50IHRvIGtpbGwgdGhlbS4iCiAgICAgICAgICAgIH0nCiAgICAgICAgICBweXRob246IHwKICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgIGltcG9ydCBvcGVuYWkKICAgICAgICAgICAgb3BlbmFpLmFwaV9rZXkgPSBvcy5nZXRlbnYoIk9QRU5BSV9BUElfS0VZIikKICAgICAgICAgICAgb3BlbmFpLk1vZGVyYXRpb24uY3JlYXRlKAogICAgICAgICAgICAgIGlucHV0PSJJIHdhbnQgdG8ga2lsbCB0aGVtLiIsCiAgICAgICAgICAgICkKICAgICAgICAgIG5vZGUuanM6IHwKICAgICAgICAgICAgY29uc3QgeyBDb25maWd1cmF0aW9uLCBPcGVuQUlBcGkgfSA9IHJlcXVpcmUoIm9wZW5haSIpOwogICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oewogICAgICAgICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBvcGVuYWkgPSBuZXcgT3BlbkFJQXBpKGNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9wZW5haS5jcmVhdGVNb2RlcmF0aW9uKHsKICAgICAgICAgICAgICBpbnB1dDogIkkgd2FudCB0byBraWxsIHRoZW0uIiwKICAgICAgICAgICAgfSk7CiAgICAgICAgcGFyYW1ldGVyczogfAogICAgICAgICAgewogICAgICAgICAgICAiaW5wdXQiOiAiSSB3YW50IHRvIGtpbGwgdGhlbS4iCiAgICAgICAgICB9CiAgICAgICAgcmVzcG9uc2U6IHwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogIm1vZHItNU1Xb0xPIiwKICAgICAgICAgICAgIm1vZGVsIjogInRleHQtbW9kZXJhdGlvbi0wMDEiLAogICAgICAgICAgICAicmVzdWx0cyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiY2F0ZWdvcmllcyI6IHsKICAgICAgICAgICAgICAgICAgImhhdGUiOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgImhhdGUvdGhyZWF0ZW5pbmciOiB0cnVlLAogICAgICAgICAgICAgICAgICAic2VsZi1oYXJtIjogZmFsc2UsCiAgICAgICAgICAgICAgICAgICJzZXh1YWwiOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgInNleHVhbC9taW5vcnMiOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgInZpb2xlbmNlIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgInZpb2xlbmNlL2dyYXBoaWMiOiBmYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjYXRlZ29yeV9zY29yZXMiOiB7CiAgICAgICAgICAgICAgICAgICJoYXRlIjogMC4yMjcxNDEwNTI0ODQ1MTIzMywKICAgICAgICAgICAgICAgICAgImhhdGUvdGhyZWF0ZW5pbmciOiAwLjQxMzI0NDc4Mzg3ODMyNjQsCiAgICAgICAgICAgICAgICAgICJzZWxmLWhhcm0iOiAwLjAwNTIzMjM5MTg3ODk2MjUxNywKICAgICAgICAgICAgICAgICAgInNleHVhbCI6IDAuMDE0MDczNDEwMDcxNDMyNTksCiAgICAgICAgICAgICAgICAgICJzZXh1YWwvbWlub3JzIjogMC4wMDM4NTIyMjU4NDAwOTE3MDUzLAogICAgICAgICAgICAgICAgICAidmlvbGVuY2UiOiAwLjkyMjMxNzc0MzMwMTM5MTYsCiAgICAgICAgICAgICAgICAgICJ2aW9sZW5jZS9ncmFwaGljIjogMC4wMzY4NjUxOTcxMjIwOTcwMTUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZmxhZ2dlZCI6IHRydWUKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KCmNvbXBvbmVudHM6CiAgc2NoZW1hczoKICAgIExpc3RFbmdpbmVzUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGRhdGE6CiAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9FbmdpbmUnCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gb2JqZWN0CiAgICAgICAgLSBkYXRhCgogICAgTGlzdE1vZGVsc1Jlc3BvbnNlOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICBvYmplY3Q6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBkYXRhOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvTW9kZWwnCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gb2JqZWN0CiAgICAgICAgLSBkYXRhCgogICAgRGVsZXRlTW9kZWxSZXNwb25zZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBvYmplY3Q6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBkZWxldGVkOgogICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIGlkCiAgICAgICAgLSBvYmplY3QKICAgICAgICAtIGRlbGV0ZWQKCiAgICBDcmVhdGVDb21wbGV0aW9uUmVxdWVzdDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbW9kZWw6ICZtb2RlbF9jb25maWd1cmF0aW9uCiAgICAgICAgICBkZXNjcmlwdGlvbjogSUQgb2YgdGhlIG1vZGVsIHRvIHVzZS4gWW91IGNhbiB1c2UgdGhlIFtMaXN0IG1vZGVsc10oL2RvY3MvYXBpLXJlZmVyZW5jZS9tb2RlbHMvbGlzdCkgQVBJIHRvIHNlZSBhbGwgb2YgeW91ciBhdmFpbGFibGUgbW9kZWxzLCBvciBzZWUgb3VyIFtNb2RlbCBvdmVydmlld10oL2RvY3MvbW9kZWxzL292ZXJ2aWV3KSBmb3IgZGVzY3JpcHRpb25zIG9mIHRoZW0uCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBwcm9tcHQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogJmNvbXBsZXRpb25zX3Byb21wdF9kZXNjcmlwdGlvbiB8CiAgICAgICAgICAgIFRoZSBwcm9tcHQocykgdG8gZ2VuZXJhdGUgY29tcGxldGlvbnMgZm9yLCBlbmNvZGVkIGFzIGEgc3RyaW5nLCBhcnJheSBvZiBzdHJpbmdzLCBhcnJheSBvZiB0b2tlbnMsIG9yIGFycmF5IG9mIHRva2VuIGFycmF5cy4KCiAgICAgICAgICAgIE5vdGUgdGhhdCA8fGVuZG9mdGV4dHw+IGlzIHRoZSBkb2N1bWVudCBzZXBhcmF0b3IgdGhhdCB0aGUgbW9kZWwgc2VlcyBkdXJpbmcgdHJhaW5pbmcsIHNvIGlmIGEgcHJvbXB0IGlzIG5vdCBzcGVjaWZpZWQgdGhlIG1vZGVsIHdpbGwgZ2VuZXJhdGUgYXMgaWYgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGRvY3VtZW50LgogICAgICAgICAgZGVmYXVsdDogJzx8ZW5kb2Z0ZXh0fD4nCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgb25lT2Y6CiAgICAgICAgICAgIC0gdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZGVmYXVsdDogJycKICAgICAgICAgICAgICBleGFtcGxlOiAiVGhpcyBpcyBhIHRlc3QuIgogICAgICAgICAgICAtIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICcnCiAgICAgICAgICAgICAgICBleGFtcGxlOiAiVGhpcyBpcyBhIHRlc3QuIgogICAgICAgICAgICAtIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgbWluSXRlbXM6IDEKICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgICAgICBleGFtcGxlOiAiWzEyMTIsIDMxOCwgMjU3LCAxMzMyLCAxM10iCiAgICAgICAgICAgIC0gdHlwZTogYXJyYXkKICAgICAgICAgICAgICBtaW5JdGVtczogMQogICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgIG1pbkl0ZW1zOiAxCiAgICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICAgIGV4YW1wbGU6ICJbWzEyMTIsIDMxOCwgMjU3LCAxMzMyLCAxM11dIgogICAgICAgIHN1ZmZpeDoKICAgICAgICAgIGRlc2NyaXB0aW9uOgogICAgICAgICAgICBUaGUgc3VmZml4IHRoYXQgY29tZXMgYWZ0ZXIgYSBjb21wbGV0aW9uIG9mIGluc2VydGVkIHRleHQuCiAgICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiAidGVzdC4iCiAgICAgICAgbWF4X3Rva2VuczoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIG1pbmltdW06IDAKICAgICAgICAgIGRlZmF1bHQ6IDE2CiAgICAgICAgICBleGFtcGxlOiAxNgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAmY29tcGxldGlvbnNfbWF4X3Rva2Vuc19kZXNjcmlwdGlvbiB8CiAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBbdG9rZW5zXSgvdG9rZW5pemVyKSB0byBnZW5lcmF0ZSBpbiB0aGUgY29tcGxldGlvbi4KCiAgICAgICAgICAgIFRoZSB0b2tlbiBjb3VudCBvZiB5b3VyIHByb21wdCBwbHVzIGBtYXhfdG9rZW5zYCBjYW5ub3QgZXhjZWVkIHRoZSBtb2RlbCdzIGNvbnRleHQgbGVuZ3RoLiBNb3N0IG1vZGVscyBoYXZlIGEgY29udGV4dCBsZW5ndGggb2YgMjA0OCB0b2tlbnMgKGV4Y2VwdCBmb3IgdGhlIG5ld2VzdCBtb2RlbHMsIHdoaWNoIHN1cHBvcnQgNDA5NikuCiAgICAgICAgdGVtcGVyYXR1cmU6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIG1pbmltdW06IDAKICAgICAgICAgIG1heGltdW06IDIKICAgICAgICAgIGRlZmF1bHQ6IDEKICAgICAgICAgIGV4YW1wbGU6IDEKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogJmNvbXBsZXRpb25zX3RlbXBlcmF0dXJlX2Rlc2NyaXB0aW9uIHwKICAgICAgICAgICAgV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlcyBsaWtlIDAuOCB3aWxsIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZSBpdCBtb3JlIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuCgogICAgICAgICAgICBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGFsdGVyaW5nIHRoaXMgb3IgYHRvcF9wYCBidXQgbm90IGJvdGguCiAgICAgICAgdG9wX3A6CiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIG1pbmltdW06IDAKICAgICAgICAgIG1heGltdW06IDEKICAgICAgICAgIGRlZmF1bHQ6IDEKICAgICAgICAgIGV4YW1wbGU6IDEKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogJmNvbXBsZXRpb25zX3RvcF9wX2Rlc2NyaXB0aW9uIHwKICAgICAgICAgICAgQW4gYWx0ZXJuYXRpdmUgdG8gc2FtcGxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgY2FsbGVkIG51Y2xldXMgc2FtcGxpbmcsIHdoZXJlIHRoZSBtb2RlbCBjb25zaWRlcnMgdGhlIHJlc3VsdHMgb2YgdGhlIHRva2VucyB3aXRoIHRvcF9wIHByb2JhYmlsaXR5IG1hc3MuIFNvIDAuMSBtZWFucyBvbmx5IHRoZSB0b2tlbnMgY29tcHJpc2luZyB0aGUgdG9wIDEwJSBwcm9iYWJpbGl0eSBtYXNzIGFyZSBjb25zaWRlcmVkLgoKICAgICAgICAgICAgV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIGB0ZW1wZXJhdHVyZWAgYnV0IG5vdCBib3RoLgogICAgICAgIG46CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICBtaW5pbXVtOiAxCiAgICAgICAgICBtYXhpbXVtOiAxMjgKICAgICAgICAgIGRlZmF1bHQ6IDEKICAgICAgICAgIGV4YW1wbGU6IDEKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogJmNvbXBsZXRpb25zX2NvbXBsZXRpb25zX2Rlc2NyaXB0aW9uIHwKICAgICAgICAgICAgSG93IG1hbnkgY29tcGxldGlvbnMgdG8gZ2VuZXJhdGUgZm9yIGVhY2ggcHJvbXB0LgoKICAgICAgICAgICAgKipOb3RlOioqIEJlY2F1c2UgdGhpcyBwYXJhbWV0ZXIgZ2VuZXJhdGVzIG1hbnkgY29tcGxldGlvbnMsIGl0IGNhbiBxdWlja2x5IGNvbnN1bWUgeW91ciB0b2tlbiBxdW90YS4gVXNlIGNhcmVmdWxseSBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgcmVhc29uYWJsZSBzZXR0aW5ncyBmb3IgYG1heF90b2tlbnNgIGFuZCBgc3RvcGAuCiAgICAgICAgc3RyZWFtOgogICAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgICAgV2hldGhlciB0byBzdHJlYW0gYmFjayBwYXJ0aWFsIHByb2dyZXNzLiBJZiBzZXQsIHRva2VucyB3aWxsIGJlIHNlbnQgYXMgZGF0YS1vbmx5IFtzZXJ2ZXItc2VudCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXQpCiAgICAgICAgICAgIGFzIHRoZXkgYmVjb21lIGF2YWlsYWJsZSwgd2l0aCB0aGUgc3RyZWFtIHRlcm1pbmF0ZWQgYnkgYSBgZGF0YTogW0RPTkVdYCBtZXNzYWdlLgogICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgICAgbG9ncHJvYnM6ICZjb21wbGV0aW9uc19sb2dwcm9ic19jb25maWd1cmF0aW9uCiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICBtaW5pbXVtOiAwCiAgICAgICAgICBtYXhpbXVtOiA1CiAgICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246ICZjb21wbGV0aW9uc19sb2dwcm9ic19kZXNjcmlwdGlvbiB8CiAgICAgICAgICAgIEluY2x1ZGUgdGhlIGxvZyBwcm9iYWJpbGl0aWVzIG9uIHRoZSBgbG9ncHJvYnNgIG1vc3QgbGlrZWx5IHRva2VucywgYXMgd2VsbCB0aGUgY2hvc2VuIHRva2Vucy4gRm9yIGV4YW1wbGUsIGlmIGBsb2dwcm9ic2AgaXMgNSwgdGhlIEFQSSB3aWxsIHJldHVybiBhIGxpc3Qgb2YgdGhlIDUgbW9zdCBsaWtlbHkgdG9rZW5zLiBUaGUgQVBJIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgYGxvZ3Byb2JgIG9mIHRoZSBzYW1wbGVkIHRva2VuLCBzbyB0aGVyZSBtYXkgYmUgdXAgdG8gYGxvZ3Byb2JzKzFgIGVsZW1lbnRzIGluIHRoZSByZXNwb25zZS4KCiAgICAgICAgICAgIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBgbG9ncHJvYnNgIGlzIDUuIElmIHlvdSBuZWVkIG1vcmUgdGhhbiB0aGlzLCBwbGVhc2UgY29udGFjdCB1cyB0aHJvdWdoIG91ciBbSGVscCBjZW50ZXJdKGh0dHBzOi8vaGVscC5vcGVuYWkuY29tKSBhbmQgZGVzY3JpYmUgeW91ciB1c2UgY2FzZS4KICAgICAgICBlY2hvOgogICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICAgICAgZGVmYXVsdDogZmFsc2UKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogJmNvbXBsZXRpb25zX2VjaG9fZGVzY3JpcHRpb24gPgogICAgICAgICAgICBFY2hvIGJhY2sgdGhlIHByb21wdCBpbiBhZGRpdGlvbiB0byB0aGUgY29tcGxldGlvbgogICAgICAgIHN0b3A6CiAgICAgICAgICBkZXNjcmlwdGlvbjogJmNvbXBsZXRpb25zX3N0b3BfZGVzY3JpcHRpb24gPgogICAgICAgICAgICBVcCB0byA0IHNlcXVlbmNlcyB3aGVyZSB0aGUgQVBJIHdpbGwgc3RvcCBnZW5lcmF0aW5nIGZ1cnRoZXIgdG9rZW5zLiBUaGUgcmV0dXJuZWQgdGV4dCB3aWxsIG5vdCBjb250YWluIHRoZSBzdG9wIHNlcXVlbmNlLgogICAgICAgICAgZGVmYXVsdDogbnVsbAogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIG9uZU9mOgogICAgICAgICAgICAtIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGRlZmF1bHQ6IDx8ZW5kb2Z0ZXh0fD4KICAgICAgICAgICAgICBleGFtcGxlOiAiXG4iCiAgICAgICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgICAgLSB0eXBlOiBhcnJheQogICAgICAgICAgICAgIG1pbkl0ZW1zOiAxCiAgICAgICAgICAgICAgbWF4SXRlbXM6IDQKICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgZXhhbXBsZTogJ1siXG4iXScKICAgICAgICBwcmVzZW5jZV9wZW5hbHR5OgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgICAgICBtaW5pbXVtOiAtMgogICAgICAgICAgbWF4aW11bTogMgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAmY29tcGxldGlvbnNfcHJlc2VuY2VfcGVuYWx0eV9kZXNjcmlwdGlvbiB8CiAgICAgICAgICAgIE51bWJlciBiZXR3ZWVuIC0yLjAgYW5kIDIuMC4gUG9zaXRpdmUgdmFsdWVzIHBlbmFsaXplIG5ldyB0b2tlbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFwcGVhciBpbiB0aGUgdGV4dCBzbyBmYXIsIGluY3JlYXNpbmcgdGhlIG1vZGVsJ3MgbGlrZWxpaG9vZCB0byB0YWxrIGFib3V0IG5ldyB0b3BpY3MuCgogICAgICAgICAgICBbU2VlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnJlcXVlbmN5IGFuZCBwcmVzZW5jZSBwZW5hbHRpZXMuXSgvZG9jcy9hcGktcmVmZXJlbmNlL3BhcmFtZXRlci1kZXRhaWxzKQogICAgICAgIGZyZXF1ZW5jeV9wZW5hbHR5OgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgICAgICBtaW5pbXVtOiAtMgogICAgICAgICAgbWF4aW11bTogMgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAmY29tcGxldGlvbnNfZnJlcXVlbmN5X3BlbmFsdHlfZGVzY3JpcHRpb24gfAogICAgICAgICAgICBOdW1iZXIgYmV0d2VlbiAtMi4wIGFuZCAyLjAuIFBvc2l0aXZlIHZhbHVlcyBwZW5hbGl6ZSBuZXcgdG9rZW5zIGJhc2VkIG9uIHRoZWlyIGV4aXN0aW5nIGZyZXF1ZW5jeSBpbiB0aGUgdGV4dCBzbyBmYXIsIGRlY3JlYXNpbmcgdGhlIG1vZGVsJ3MgbGlrZWxpaG9vZCB0byByZXBlYXQgdGhlIHNhbWUgbGluZSB2ZXJiYXRpbS4KCiAgICAgICAgICAgIFtTZWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBmcmVxdWVuY3kgYW5kIHByZXNlbmNlIHBlbmFsdGllcy5dKC9kb2NzL2FwaS1yZWZlcmVuY2UvcGFyYW1ldGVyLWRldGFpbHMpCiAgICAgICAgYmVzdF9vZjoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGRlZmF1bHQ6IDEKICAgICAgICAgIG1pbmltdW06IDAKICAgICAgICAgIG1heGltdW06IDIwCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246ICZjb21wbGV0aW9uc19iZXN0X29mX2Rlc2NyaXB0aW9uIHwKICAgICAgICAgICAgR2VuZXJhdGVzIGBiZXN0X29mYCBjb21wbGV0aW9ucyBzZXJ2ZXItc2lkZSBhbmQgcmV0dXJucyB0aGUgImJlc3QiICh0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QgbG9nIHByb2JhYmlsaXR5IHBlciB0b2tlbikuIFJlc3VsdHMgY2Fubm90IGJlIHN0cmVhbWVkLgoKICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggYG5gLCBgYmVzdF9vZmAgY29udHJvbHMgdGhlIG51bWJlciBvZiBjYW5kaWRhdGUgY29tcGxldGlvbnMgYW5kIGBuYCBzcGVjaWZpZXMgaG93IG1hbnkgdG8gcmV0dXJuIOKAkyBgYmVzdF9vZmAgbXVzdCBiZSBncmVhdGVyIHRoYW4gYG5gLgoKICAgICAgICAgICAgKipOb3RlOioqIEJlY2F1c2UgdGhpcyBwYXJhbWV0ZXIgZ2VuZXJhdGVzIG1hbnkgY29tcGxldGlvbnMsIGl0IGNhbiBxdWlja2x5IGNvbnN1bWUgeW91ciB0b2tlbiBxdW90YS4gVXNlIGNhcmVmdWxseSBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgcmVhc29uYWJsZSBzZXR0aW5ncyBmb3IgYG1heF90b2tlbnNgIGFuZCBgc3RvcGAuCiAgICAgICAgbG9naXRfYmlhczogJmNvbXBsZXRpb25zX2xvZ2l0X2JpYXMKICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgeC1vYWlUeXBlTGFiZWw6IG1hcAogICAgICAgICAgZGVmYXVsdDogbnVsbAogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAmY29tcGxldGlvbnNfbG9naXRfYmlhc19kZXNjcmlwdGlvbiB8CiAgICAgICAgICAgIE1vZGlmeSB0aGUgbGlrZWxpaG9vZCBvZiBzcGVjaWZpZWQgdG9rZW5zIGFwcGVhcmluZyBpbiB0aGUgY29tcGxldGlvbi4KCiAgICAgICAgICAgIEFjY2VwdHMgYSBqc29uIG9iamVjdCB0aGF0IG1hcHMgdG9rZW5zIChzcGVjaWZpZWQgYnkgdGhlaXIgdG9rZW4gSUQgaW4gdGhlIEdQVCB0b2tlbml6ZXIpIHRvIGFuIGFzc29jaWF0ZWQgYmlhcyB2YWx1ZSBmcm9tIC0xMDAgdG8gMTAwLiBZb3UgY2FuIHVzZSB0aGlzIFt0b2tlbml6ZXIgdG9vbF0oL3Rva2VuaXplcj92aWV3PWJwZSkgKHdoaWNoIHdvcmtzIGZvciBib3RoIEdQVC0yIGFuZCBHUFQtMykgdG8gY29udmVydCB0ZXh0IHRvIHRva2VuIElEcy4gTWF0aGVtYXRpY2FsbHksIHRoZSBiaWFzIGlzIGFkZGVkIHRvIHRoZSBsb2dpdHMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCBwcmlvciB0byBzYW1wbGluZy4gVGhlIGV4YWN0IGVmZmVjdCB3aWxsIHZhcnkgcGVyIG1vZGVsLCBidXQgdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEgc2hvdWxkIGRlY3JlYXNlIG9yIGluY3JlYXNlIGxpa2VsaWhvb2Qgb2Ygc2VsZWN0aW9uOyB2YWx1ZXMgbGlrZSAtMTAwIG9yIDEwMCBzaG91bGQgcmVzdWx0IGluIGEgYmFuIG9yIGV4Y2x1c2l2ZSBzZWxlY3Rpb24gb2YgdGhlIHJlbGV2YW50IHRva2VuLgoKICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91IGNhbiBwYXNzIGB7IjUwMjU2IjogLTEwMH1gIHRvIHByZXZlbnQgdGhlIDx8ZW5kb2Z0ZXh0fD4gdG9rZW4gZnJvbSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgICAgdXNlcjogJmVuZF91c2VyX3BhcmFtX2NvbmZpZ3VyYXRpb24KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZXhhbXBsZTogdXNlci0xMjM0CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBBIHVuaXF1ZSBpZGVudGlmaWVyIHJlcHJlc2VudGluZyB5b3VyIGVuZC11c2VyLCB3aGljaCBjYW4gaGVscCBPcGVuQUkgdG8gbW9uaXRvciBhbmQgZGV0ZWN0IGFidXNlLiBbTGVhcm4gbW9yZV0oL2RvY3MvZ3VpZGVzL3NhZmV0eS1iZXN0LXByYWN0aWNlcy9lbmQtdXNlci1pZHMpLgogICAgICByZXF1aXJlZDoKICAgICAgICAtIG1vZGVsCiAgICAKICAgIENyZWF0ZUNvbXBsZXRpb25SZXNwb25zZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBvYmplY3Q6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBjcmVhdGVkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgIG1vZGVsOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgY2hvaWNlczoKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgdGV4dDoKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGluZGV4OgogICAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICAgIGxvZ3Byb2JzOgogICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICAgICAgdG9rZW5zOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgdG9rZW5fbG9ncHJvYnM6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgICAgICAgICB0b3BfbG9ncHJvYnM6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgICAgICAgICB0ZXh0X29mZnNldDoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICAgIGZpbmlzaF9yZWFzb246CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICB1c2FnZToKICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgcHJvbXB0X3Rva2VuczoKICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgIGNvbXBsZXRpb25fdG9rZW5zOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgICAgdG90YWxfdG9rZW5zOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIHJlcXVpcmVkOiAKICAgICAgICAgICAgLSBwcm9tcHRfdG9rZW5zCiAgICAgICAgICAgIC0gY29tcGxldGlvbl90b2tlbnMKICAgICAgICAgICAgLSB0b3RhbF90b2tlbnMKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gaWQKICAgICAgICAtIG9iamVjdAogICAgICAgIC0gY3JlYXRlZAogICAgICAgIC0gbW9kZWwKICAgICAgICAtIGNob2ljZXMKCiAgICBDaGF0Q29tcGxldGlvblJlcXVlc3RNZXNzYWdlOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICByb2xlOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBlbnVtOiBbInN5c3RlbSIsICJ1c2VyIiwgImFzc2lzdGFudCJdCiAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIHJvbGUgb2YgdGhlIGF1dGhvciBvZiB0aGlzIG1lc3NhZ2UuCiAgICAgICAgY29udGVudDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZQogICAgICAgIG5hbWU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgbmFtZSBvZiB0aGUgdXNlciBpbiBhIG11bHRpLXVzZXIgY2hhdAogICAgICByZXF1aXJlZDogCiAgICAgICAgLSByb2xlCiAgICAgICAgLSBjb250ZW50CgogICAgQ2hhdENvbXBsZXRpb25SZXNwb25zZU1lc3NhZ2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHJvbGU6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGVudW06IFsic3lzdGVtIiwgInVzZXIiLCAiYXNzaXN0YW50Il0KICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgcm9sZSBvZiB0aGUgYXV0aG9yIG9mIHRoaXMgbWVzc2FnZS4KICAgICAgICBjb250ZW50OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlCiAgICAgIHJlcXVpcmVkOiAKICAgICAgICAtIHJvbGUKICAgICAgICAtIGNvbnRlbnQKCiAgICBDcmVhdGVDaGF0Q29tcGxldGlvblJlcXVlc3Q6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG1vZGVsOgogICAgICAgICAgZGVzY3JpcHRpb246IElEIG9mIHRoZSBtb2RlbCB0byB1c2UuIEN1cnJlbnRseSwgb25seSBgZ3B0LTMuNS10dXJib2AgYW5kIGBncHQtMy41LXR1cmJvLTAzMDFgIGFyZSBzdXBwb3J0ZWQuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBtZXNzYWdlczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgbWVzc2FnZXMgdG8gZ2VuZXJhdGUgY2hhdCBjb21wbGV0aW9ucyBmb3IsIGluIHRoZSBbY2hhdCBmb3JtYXRdKC9kb2NzL2d1aWRlcy9jaGF0L2ludHJvZHVjdGlvbikuCiAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgbWluSXRlbXM6IDEKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ2hhdENvbXBsZXRpb25SZXF1ZXN0TWVzc2FnZScKICAgICAgICB0ZW1wZXJhdHVyZToKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgbWluaW11bTogMAogICAgICAgICAgbWF4aW11bTogMgogICAgICAgICAgZGVmYXVsdDogMQogICAgICAgICAgZXhhbXBsZTogMQogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAqY29tcGxldGlvbnNfdGVtcGVyYXR1cmVfZGVzY3JpcHRpb24KICAgICAgICB0b3BfcDoKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgbWluaW11bTogMAogICAgICAgICAgbWF4aW11bTogMQogICAgICAgICAgZGVmYXVsdDogMQogICAgICAgICAgZXhhbXBsZTogMQogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAqY29tcGxldGlvbnNfdG9wX3BfZGVzY3JpcHRpb24KICAgICAgICBuOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgbWluaW11bTogMQogICAgICAgICAgbWF4aW11bTogMTI4CiAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgICBleGFtcGxlOiAxCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IEhvdyBtYW55IGNoYXQgY29tcGxldGlvbiBjaG9pY2VzIHRvIGdlbmVyYXRlIGZvciBlYWNoIGlucHV0IG1lc3NhZ2UuCiAgICAgICAgc3RyZWFtOgogICAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgICAgSWYgc2V0LCBwYXJ0aWFsIG1lc3NhZ2UgZGVsdGFzIHdpbGwgYmUgc2VudCwgbGlrZSBpbiBDaGF0R1BULiBUb2tlbnMgd2lsbCBiZSBzZW50IGFzIGRhdGEtb25seSBbc2VydmVyLXNlbnQgZXZlbnRzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2VydmVyLXNlbnRfZXZlbnRzL1VzaW5nX3NlcnZlci1zZW50X2V2ZW50cyNFdmVudF9zdHJlYW1fZm9ybWF0KQogICAgICAgICAgICBhcyB0aGV5IGJlY29tZSBhdmFpbGFibGUsIHdpdGggdGhlIHN0cmVhbSB0ZXJtaW5hdGVkIGJ5IGEgYGRhdGE6IFtET05FXWAgbWVzc2FnZS4KICAgICAgICAgIHR5cGU6IGJvb2xlYW4KICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZWZhdWx0OiBmYWxzZQogICAgICAgIHN0b3A6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBVcCB0byA0IHNlcXVlbmNlcyB3aGVyZSB0aGUgQVBJIHdpbGwgc3RvcCBnZW5lcmF0aW5nIGZ1cnRoZXIgdG9rZW5zLgogICAgICAgICAgZGVmYXVsdDogbnVsbAogICAgICAgICAgb25lT2Y6CiAgICAgICAgICAgIC0gdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgICAgLSB0eXBlOiBhcnJheQogICAgICAgICAgICAgIG1pbkl0ZW1zOiAxCiAgICAgICAgICAgICAgbWF4SXRlbXM6IDQKICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIG1heF90b2tlbnM6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdG9rZW5zIGFsbG93ZWQgZm9yIHRoZSBnZW5lcmF0ZWQgYW5zd2VyLiBCeSBkZWZhdWx0LCB0aGUgbnVtYmVyIG9mIHRva2VucyB0aGUgbW9kZWwgY2FuIHJldHVybiB3aWxsIGJlICg0MDk2IC0gcHJvbXB0IHRva2VucykuCiAgICAgICAgICBkZWZhdWx0OiBpbmYKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICBwcmVzZW5jZV9wZW5hbHR5OgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgICAgICBtaW5pbXVtOiAtMgogICAgICAgICAgbWF4aW11bTogMgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAqY29tcGxldGlvbnNfcHJlc2VuY2VfcGVuYWx0eV9kZXNjcmlwdGlvbgogICAgICAgIGZyZXF1ZW5jeV9wZW5hbHR5OgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgICAgICBtaW5pbXVtOiAtMgogICAgICAgICAgbWF4aW11bTogMgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiAqY29tcGxldGlvbnNfZnJlcXVlbmN5X3BlbmFsdHlfZGVzY3JpcHRpb24KICAgICAgICBsb2dpdF9iaWFzOgogICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICB4LW9haVR5cGVMYWJlbDogbWFwCiAgICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgTW9kaWZ5IHRoZSBsaWtlbGlob29kIG9mIHNwZWNpZmllZCB0b2tlbnMgYXBwZWFyaW5nIGluIHRoZSBjb21wbGV0aW9uLgoKICAgICAgICAgICAgQWNjZXB0cyBhIGpzb24gb2JqZWN0IHRoYXQgbWFwcyB0b2tlbnMgKHNwZWNpZmllZCBieSB0aGVpciB0b2tlbiBJRCBpbiB0aGUgdG9rZW5pemVyKSB0byBhbiBhc3NvY2lhdGVkIGJpYXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMC4gTWF0aGVtYXRpY2FsbHksIHRoZSBiaWFzIGlzIGFkZGVkIHRvIHRoZSBsb2dpdHMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCBwcmlvciB0byBzYW1wbGluZy4gVGhlIGV4YWN0IGVmZmVjdCB3aWxsIHZhcnkgcGVyIG1vZGVsLCBidXQgdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEgc2hvdWxkIGRlY3JlYXNlIG9yIGluY3JlYXNlIGxpa2VsaWhvb2Qgb2Ygc2VsZWN0aW9uOyB2YWx1ZXMgbGlrZSAtMTAwIG9yIDEwMCBzaG91bGQgcmVzdWx0IGluIGEgYmFuIG9yIGV4Y2x1c2l2ZSBzZWxlY3Rpb24gb2YgdGhlIHJlbGV2YW50IHRva2VuLgogICAgICAgIHVzZXI6ICplbmRfdXNlcl9wYXJhbV9jb25maWd1cmF0aW9uCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbW9kZWwKICAgICAgICAtIG1lc3NhZ2VzCgogICAgQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXNwb25zZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBvYmplY3Q6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBjcmVhdGVkOgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgIG1vZGVsOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgY2hvaWNlczoKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgaW5kZXg6CiAgICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgICAgbWVzc2FnZToKICAgICAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DaGF0Q29tcGxldGlvblJlc3BvbnNlTWVzc2FnZScKICAgICAgICAgICAgICBmaW5pc2hfcmVhc29uOgogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgdXNhZ2U6CiAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIHByb21wdF90b2tlbnM6CiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICBjb21wbGV0aW9uX3Rva2VuczoKICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgIHRvdGFsX3Rva2VuczoKICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICByZXF1aXJlZDogCiAgICAgICAgICAgIC0gcHJvbXB0X3Rva2VucwogICAgICAgICAgICAtIGNvbXBsZXRpb25fdG9rZW5zCiAgICAgICAgICAgIC0gdG90YWxfdG9rZW5zCiAgICAgIHJlcXVpcmVkOiAKICAgICAgICAtIGlkCiAgICAgICAgLSBvYmplY3QKICAgICAgICAtIGNyZWF0ZWQKICAgICAgICAtIG1vZGVsCiAgICAgICAgLSBjaG9pY2VzCgogICAgQ3JlYXRlRWRpdFJlcXVlc3Q6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG1vZGVsOgogICAgICAgICAgZGVzY3JpcHRpb246IElEIG9mIHRoZSBtb2RlbCB0byB1c2UuIFlvdSBjYW4gdXNlIHRoZSBgdGV4dC1kYXZpbmNpLWVkaXQtMDAxYCBvciBgY29kZS1kYXZpbmNpLWVkaXQtMDAxYCBtb2RlbCB3aXRoIHRoaXMgZW5kcG9pbnQuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBpbnB1dDoKICAgICAgICAgIGRlc2NyaXB0aW9uOgogICAgICAgICAgICBUaGUgaW5wdXQgdGV4dCB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGVkaXQuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlZmF1bHQ6ICcnCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZXhhbXBsZTogIldoYXQgZGF5IG9mIHRoZSB3ZWsgaXMgaXQ/IgogICAgICAgIGluc3RydWN0aW9uOgogICAgICAgICAgZGVzY3JpcHRpb246CiAgICAgICAgICAgIFRoZSBpbnN0cnVjdGlvbiB0aGF0IHRlbGxzIHRoZSBtb2RlbCBob3cgdG8gZWRpdCB0aGUgcHJvbXB0LgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiAiRml4IHRoZSBzcGVsbGluZyBtaXN0YWtlcy4iCiAgICAgICAgbjoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIG1pbmltdW06IDEKICAgICAgICAgIG1heGltdW06IDIwCiAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgICBleGFtcGxlOiAxCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246CiAgICAgICAgICAgIEhvdyBtYW55IGVkaXRzIHRvIGdlbmVyYXRlIGZvciB0aGUgaW5wdXQgYW5kIGluc3RydWN0aW9uLgogICAgICAgIHRlbXBlcmF0dXJlOgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBtaW5pbXVtOiAwCiAgICAgICAgICBtYXhpbXVtOiAyCiAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgICBleGFtcGxlOiAxCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246ICpjb21wbGV0aW9uc190ZW1wZXJhdHVyZV9kZXNjcmlwdGlvbgogICAgICAgIHRvcF9wOgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBtaW5pbXVtOiAwCiAgICAgICAgICBtYXhpbXVtOiAxCiAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgICBleGFtcGxlOiAxCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246ICpjb21wbGV0aW9uc190b3BfcF9kZXNjcmlwdGlvbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIG1vZGVsCiAgICAgICAgLSBpbnN0cnVjdGlvbgoKICAgIENyZWF0ZUVkaXRSZXNwb25zZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgb2JqZWN0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgY3JlYXRlZDoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICBjaG9pY2VzOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICB0ZXh0OgogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgaW5kZXg6CiAgICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgICAgbG9ncHJvYnM6CiAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICB0b2tlbnM6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICB0b2tlbl9sb2dwcm9iczoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICAgICAgICAgIHRvcF9sb2dwcm9iczoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICAgIHRleHRfb2Zmc2V0OgogICAgICAgICAgICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgICAgZmluaXNoX3JlYXNvbjoKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIHVzYWdlOgogICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBwcm9tcHRfdG9rZW5zOgogICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgICAgY29tcGxldGlvbl90b2tlbnM6CiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICB0b3RhbF90b2tlbnM6CiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgcmVxdWlyZWQ6IAogICAgICAgICAgICAtIHByb21wdF90b2tlbnMKICAgICAgICAgICAgLSBjb21wbGV0aW9uX3Rva2VucwogICAgICAgICAgICAtIHRvdGFsX3Rva2VucwogICAgICByZXF1aXJlZDogCiAgICAgICAgLSBvYmplY3QKICAgICAgICAtIGNyZWF0ZWQKICAgICAgICAtIGNob2ljZXMKICAgICAgICAtIHVzYWdlCgogICAgQ3JlYXRlSW1hZ2VSZXF1ZXN0OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICBwcm9tcHQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBkZXNpcmVkIGltYWdlKHMpLiBUaGUgbWF4aW11bSBsZW5ndGggaXMgMTAwMCBjaGFyYWN0ZXJzLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiAiQSBjdXRlIGJhYnkgc2VhIG90dGVyIgogICAgICAgIG46ICZpbWFnZXNfbgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgbWluaW11bTogMQogICAgICAgICAgbWF4aW11bTogMTAKICAgICAgICAgIGRlZmF1bHQ6IDEKICAgICAgICAgIGV4YW1wbGU6IDEKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIG51bWJlciBvZiBpbWFnZXMgdG8gZ2VuZXJhdGUuIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMC4KICAgICAgICBzaXplOiAmaW1hZ2VzX3NpemUKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZW51bTogWyIyNTZ4MjU2IiwgIjUxMng1MTIiLCAiMTAyNHgxMDI0Il0KICAgICAgICAgIGRlZmF1bHQ6ICIxMDI0eDEwMjQiCiAgICAgICAgICBleGFtcGxlOiAiMTAyNHgxMDI0IgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGltYWdlcy4gTXVzdCBiZSBvbmUgb2YgYDI1NngyNTZgLCBgNTEyeDUxMmAsIG9yIGAxMDI0eDEwMjRgLgogICAgICAgIHJlc3BvbnNlX2Zvcm1hdDogJmltYWdlc19yZXNwb25zZV9mb3JtYXQKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZW51bTogWyJ1cmwiLCAiYjY0X2pzb24iXQogICAgICAgICAgZGVmYXVsdDogInVybCIKICAgICAgICAgIGV4YW1wbGU6ICJ1cmwiCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGdlbmVyYXRlZCBpbWFnZXMgYXJlIHJldHVybmVkLiBNdXN0IGJlIG9uZSBvZiBgdXJsYCBvciBgYjY0X2pzb25gLgogICAgICAgIHVzZXI6ICplbmRfdXNlcl9wYXJhbV9jb25maWd1cmF0aW9uCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gcHJvbXB0CgogICAgSW1hZ2VzUmVzcG9uc2U6CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgY3JlYXRlZDoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICBkYXRhOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICB1cmw6CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICBiNjRfanNvbjoKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXF1aXJlZDoKICAgICAgICAtIGNyZWF0ZWQKICAgICAgICAtIGRhdGEKCiAgICBDcmVhdGVJbWFnZUVkaXRSZXF1ZXN0OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICBpbWFnZToKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgaW1hZ2UgdG8gZWRpdC4gTXVzdCBiZSBhIHZhbGlkIFBORyBmaWxlLCBsZXNzIHRoYW4gNE1CLCBhbmQgc3F1YXJlLiBJZiBtYXNrIGlzIG5vdCBwcm92aWRlZCwgaW1hZ2UgbXVzdCBoYXZlIHRyYW5zcGFyZW5jeSwgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHRoZSBtYXNrLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBmb3JtYXQ6IGJpbmFyeQogICAgICAgIG1hc2s6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQW4gYWRkaXRpb25hbCBpbWFnZSB3aG9zZSBmdWxseSB0cmFuc3BhcmVudCBhcmVhcyAoZS5nLiB3aGVyZSBhbHBoYSBpcyB6ZXJvKSBpbmRpY2F0ZSB3aGVyZSBgaW1hZ2VgIHNob3VsZCBiZSBlZGl0ZWQuIE11c3QgYmUgYSB2YWxpZCBQTkcgZmlsZSwgbGVzcyB0aGFuIDRNQiwgYW5kIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9ucyBhcyBgaW1hZ2VgLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBmb3JtYXQ6IGJpbmFyeQogICAgICAgIHByb21wdDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBBIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGRlc2lyZWQgaW1hZ2UocykuIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyAxMDAwIGNoYXJhY3RlcnMuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGV4YW1wbGU6ICJBIGN1dGUgYmFieSBzZWEgb3R0ZXIgd2VhcmluZyBhIGJlcmV0IgogICAgICAgIG46ICppbWFnZXNfbgogICAgICAgIHNpemU6ICppbWFnZXNfc2l6ZQogICAgICAgIHJlc3BvbnNlX2Zvcm1hdDogKmltYWdlc19yZXNwb25zZV9mb3JtYXQKICAgICAgICB1c2VyOiAqZW5kX3VzZXJfcGFyYW1fY29uZmlndXJhdGlvbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIHByb21wdAogICAgICAgIC0gaW1hZ2UKCiAgICBDcmVhdGVJbWFnZVZhcmlhdGlvblJlcXVlc3Q6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGltYWdlOgogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBpbWFnZSB0byB1c2UgYXMgdGhlIGJhc2lzIGZvciB0aGUgdmFyaWF0aW9uKHMpLiBNdXN0IGJlIGEgdmFsaWQgUE5HIGZpbGUsIGxlc3MgdGhhbiA0TUIsIGFuZCBzcXVhcmUuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGZvcm1hdDogYmluYXJ5CiAgICAgICAgbjogKmltYWdlc19uCiAgICAgICAgc2l6ZTogKmltYWdlc19zaXplCiAgICAgICAgcmVzcG9uc2VfZm9ybWF0OiAqaW1hZ2VzX3Jlc3BvbnNlX2Zvcm1hdAogICAgICAgIHVzZXI6ICplbmRfdXNlcl9wYXJhbV9jb25maWd1cmF0aW9uCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gaW1hZ2UKCiAgICBDcmVhdGVNb2RlcmF0aW9uUmVxdWVzdDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgaW5wdXQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGlucHV0IHRleHQgdG8gY2xhc3NpZnkKICAgICAgICAgIG9uZU9mOgogICAgICAgICAgICAtIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGRlZmF1bHQ6ICcnCiAgICAgICAgICAgICAgZXhhbXBsZTogIkkgd2FudCB0byBraWxsIHRoZW0uIgogICAgICAgICAgICAtIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICcnCiAgICAgICAgICAgICAgICBleGFtcGxlOiAiSSB3YW50IHRvIGtpbGwgdGhlbS4iCiAgICAgICAgbW9kZWw6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUd28gY29udGVudCBtb2RlcmF0aW9ucyBtb2RlbHMgYXJlIGF2YWlsYWJsZTogYHRleHQtbW9kZXJhdGlvbi1zdGFibGVgIGFuZCBgdGV4dC1tb2RlcmF0aW9uLWxhdGVzdGAuCgogICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBgdGV4dC1tb2RlcmF0aW9uLWxhdGVzdGAgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZ3JhZGVkIG92ZXIgdGltZS4gVGhpcyBlbnN1cmVzIHlvdSBhcmUgYWx3YXlzIHVzaW5nIG91ciBtb3N0IGFjY3VyYXRlIG1vZGVsLiBJZiB5b3UgdXNlIGB0ZXh0LW1vZGVyYXRpb24tc3RhYmxlYCwgd2Ugd2lsbCBwcm92aWRlIGFkdmFuY2VkIG5vdGljZSBiZWZvcmUgdXBkYXRpbmcgdGhlIG1vZGVsLiBBY2N1cmFjeSBvZiBgdGV4dC1tb2RlcmF0aW9uLXN0YWJsZWAgbWF5IGJlIHNsaWdodGx5IGxvd2VyIHRoYW4gZm9yIGB0ZXh0LW1vZGVyYXRpb24tbGF0ZXN0YC4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbnVsbGFibGU6IGZhbHNlCiAgICAgICAgICBkZWZhdWx0OiAidGV4dC1tb2RlcmF0aW9uLWxhdGVzdCIKICAgICAgICAgIGV4YW1wbGU6ICJ0ZXh0LW1vZGVyYXRpb24tc3RhYmxlIgogICAgICByZXF1aXJlZDoKICAgICAgICAtIGlucHV0CgogICAgQ3JlYXRlTW9kZXJhdGlvblJlc3BvbnNlOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIG1vZGVsOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgcmVzdWx0czoKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgZmxhZ2dlZDoKICAgICAgICAgICAgICAgIHR5cGU6IGJvb2xlYW4KICAgICAgICAgICAgICBjYXRlZ29yaWVzOgogICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICBoYXRlOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IGJvb2xlYW4KICAgICAgICAgICAgICAgICAgaGF0ZS90aHJlYXRlbmluZzoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBib29sZWFuCiAgICAgICAgICAgICAgICAgIHNlbGYtaGFybToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBib29sZWFuCiAgICAgICAgICAgICAgICAgIHNleHVhbDoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBib29sZWFuCiAgICAgICAgICAgICAgICAgIHNleHVhbC9taW5vcnM6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICAgICAgICAgICAgICB2aW9sZW5jZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBib29sZWFuCiAgICAgICAgICAgICAgICAgIHZpb2xlbmNlL2dyYXBoaWM6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IAogICAgICAgICAgICAgICAgICAtIGhhdGUKICAgICAgICAgICAgICAgICAgLSBoYXRlL3RocmVhdGVuaW5nCiAgICAgICAgICAgICAgICAgIC0gc2VsZi1oYXJtCiAgICAgICAgICAgICAgICAgIC0gc2V4dWFsCiAgICAgICAgICAgICAgICAgIC0gc2V4dWFsL21pbm9ycwogICAgICAgICAgICAgICAgICAtIHZpb2xlbmNlCiAgICAgICAgICAgICAgICAgIC0gdmlvbGVuY2UvZ3JhcGhpYwogICAgICAgICAgICAgIGNhdGVnb3J5X3Njb3JlczoKICAgICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICAgICAgaGF0ZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICAgICAgICAgaGF0ZS90aHJlYXRlbmluZzoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICAgICAgICAgc2VsZi1oYXJtOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgICAgICAgICBzZXh1YWw6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICAgICAgICAgIHNleHVhbC9taW5vcnM6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICAgICAgICAgIHZpb2xlbmNlOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgICAgICAgICB2aW9sZW5jZS9ncmFwaGljOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IAogICAgICAgICAgICAgICAgICAtIGhhdGUKICAgICAgICAgICAgICAgICAgLSBoYXRlL3RocmVhdGVuaW5nCiAgICAgICAgICAgICAgICAgIC0gc2VsZi1oYXJtCiAgICAgICAgICAgICAgICAgIC0gc2V4dWFsCiAgICAgICAgICAgICAgICAgIC0gc2V4dWFsL21pbm9ycwogICAgICAgICAgICAgICAgICAtIHZpb2xlbmNlCiAgICAgICAgICAgICAgICAgIC0gdmlvbGVuY2UvZ3JhcGhpYwogICAgICAgICAgICByZXF1aXJlZDogCiAgICAgICAgICAgICAgLSBmbGFnZ2VkCiAgICAgICAgICAgICAgLSBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgLSBjYXRlZ29yeV9zY29yZXMKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gaWQKICAgICAgICAtIG1vZGVsCiAgICAgICAgLSByZXN1bHRzCgogICAgQ3JlYXRlU2VhcmNoUmVxdWVzdDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgcXVlcnk6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUXVlcnkgdG8gc2VhcmNoIGFnYWluc3QgdGhlIGRvY3VtZW50cy4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZXhhbXBsZTogInRoZSBwcmVzaWRlbnQiCiAgICAgICAgICBtaW5MZW5ndGg6IDEKICAgICAgICBkb2N1bWVudHM6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBVcCB0byAyMDAgZG9jdW1lbnRzIHRvIHNlYXJjaCBvdmVyLCBwcm92aWRlZCBhcyBhIGxpc3Qgb2Ygc3RyaW5ncy4KCiAgICAgICAgICAgIFRoZSBtYXhpbXVtIGRvY3VtZW50IGxlbmd0aCAoaW4gdG9rZW5zKSBpcyAyMDM0IG1pbnVzIHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIHRoZSBxdWVyeS4KCiAgICAgICAgICAgIFlvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgYGRvY3VtZW50c2Agb3IgYSBgZmlsZWAsIGJ1dCBub3QgYm90aC4KICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBtaW5JdGVtczogMQogICAgICAgICAgbWF4SXRlbXM6IDIwMAogICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGV4YW1wbGU6ICJbJ1doaXRlIEhvdXNlJywgJ2hvc3BpdGFsJywgJ3NjaG9vbCddIgogICAgICAgIGZpbGU6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgSUQgb2YgYW4gdXBsb2FkZWQgZmlsZSB0aGF0IGNvbnRhaW5zIGRvY3VtZW50cyB0byBzZWFyY2ggb3Zlci4KCiAgICAgICAgICAgIFlvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgYGRvY3VtZW50c2Agb3IgYSBgZmlsZWAsIGJ1dCBub3QgYm90aC4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBtYXhfcmVyYW5rOgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byBiZSByZS1yYW5rZWQgYW5kIHJldHVybmVkIGJ5IHNlYXJjaC4KCiAgICAgICAgICAgIFRoaXMgZmxhZyBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGBmaWxlYCBpcyBzZXQuCiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICBtaW5pbXVtOiAxCiAgICAgICAgICBkZWZhdWx0OiAyMDAKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgcmV0dXJuX21ldGFkYXRhOiAmcmV0dXJuX21ldGFkYXRhX2NvbmZpZ3VyYXRpb24KICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIEEgc3BlY2lhbCBib29sZWFuIGZsYWcgZm9yIHNob3dpbmcgbWV0YWRhdGEuIElmIHNldCB0byBgdHJ1ZWAsIGVhY2ggZG9jdW1lbnQgZW50cnkgaW4gdGhlIHJldHVybmVkIEpTT04gd2lsbCBjb250YWluIGEgIm1ldGFkYXRhIiBmaWVsZC4KCiAgICAgICAgICAgIFRoaXMgZmxhZyBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGBmaWxlYCBpcyBzZXQuCiAgICAgICAgICB0eXBlOiBib29sZWFuCiAgICAgICAgICBkZWZhdWx0OiBmYWxzZQogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICB1c2VyOiAqZW5kX3VzZXJfcGFyYW1fY29uZmlndXJhdGlvbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIHF1ZXJ5CgogICAgQ3JlYXRlU2VhcmNoUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIG1vZGVsOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZGF0YToKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgb2JqZWN0OgogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZG9jdW1lbnQ6CiAgICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgICAgc2NvcmU6CiAgICAgICAgICAgICAgICB0eXBlOiBudW1iZXIKCiAgICBMaXN0RmlsZXNSZXNwb25zZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgb2JqZWN0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZGF0YToKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL09wZW5BSUZpbGUnCiAgICAgIHJlcXVpcmVkOiAKICAgICAgICAtIG9iamVjdAogICAgICAgIC0gZGF0YQoKICAgIENyZWF0ZUZpbGVSZXF1ZXN0OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgZmlsZToKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIE5hbWUgb2YgdGhlIFtKU09OIExpbmVzXShodHRwczovL2pzb25saW5lcy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvKSBmaWxlIHRvIGJlIHVwbG9hZGVkLgoKICAgICAgICAgICAgSWYgdGhlIGBwdXJwb3NlYCBpcyBzZXQgdG8gImZpbmUtdHVuZSIsIGVhY2ggbGluZSBpcyBhIEpTT04gcmVjb3JkIHdpdGggInByb21wdCIgYW5kICJjb21wbGV0aW9uIiBmaWVsZHMgcmVwcmVzZW50aW5nIHlvdXIgW3RyYWluaW5nIGV4YW1wbGVzXSgvZG9jcy9ndWlkZXMvZmluZS10dW5pbmcvcHJlcGFyZS10cmFpbmluZy1kYXRhKS4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZm9ybWF0OiBiaW5hcnkKICAgICAgICBwdXJwb3NlOgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIGludGVuZGVkIHB1cnBvc2Ugb2YgdGhlIHVwbG9hZGVkIGRvY3VtZW50cy4KCiAgICAgICAgICAgIFVzZSAiZmluZS10dW5lIiBmb3IgW0ZpbmUtdHVuaW5nXSgvZG9jcy9hcGktcmVmZXJlbmNlL2ZpbmUtdHVuZXMpLiBUaGlzIGFsbG93cyB1cyB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0IG9mIHRoZSB1cGxvYWRlZCBmaWxlLgoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXF1aXJlZDoKICAgICAgICAtIGZpbGUKICAgICAgICAtIHB1cnBvc2UKCiAgICBEZWxldGVGaWxlUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgb2JqZWN0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZGVsZXRlZDoKICAgICAgICAgIHR5cGU6IGJvb2xlYW4KICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gaWQKICAgICAgICAtIG9iamVjdAogICAgICAgIC0gZGVsZXRlZAoKICAgIENyZWF0ZUFuc3dlclJlcXVlc3Q6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKICAgICAgcHJvcGVydGllczoKICAgICAgICBtb2RlbDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJRCBvZiB0aGUgbW9kZWwgdG8gdXNlIGZvciBjb21wbGV0aW9uLiBZb3UgY2FuIHNlbGVjdCBvbmUgb2YgYGFkYWAsIGBiYWJiYWdlYCwgYGN1cmllYCwgb3IgYGRhdmluY2lgLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgcXVlc3Rpb246CiAgICAgICAgICBkZXNjcmlwdGlvbjogUXVlc3Rpb24gdG8gZ2V0IGFuc3dlcmVkLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBtaW5MZW5ndGg6IDEKICAgICAgICAgIGV4YW1wbGU6ICJXaGF0IGlzIHRoZSBjYXBpdGFsIG9mIEphcGFuPyIKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBMaXN0IG9mIChxdWVzdGlvbiwgYW5zd2VyKSBwYWlycyB0aGF0IHdpbGwgaGVscCBzdGVlciB0aGUgbW9kZWwgdG93YXJkcyB0aGUgdG9uZSBhbmQgYW5zd2VyIGZvcm1hdCB5b3UnZCBsaWtlLiBXZSByZWNvbW1lbmQgYWRkaW5nIDIgdG8gMyBleGFtcGxlcy4KICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBtaW5JdGVtczogMQogICAgICAgICAgbWF4SXRlbXM6IDIwMAogICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICAgIG1pbkl0ZW1zOiAyCiAgICAgICAgICAgIG1heEl0ZW1zOiAyCiAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIG1pbkxlbmd0aDogMQogICAgICAgICAgZXhhbXBsZTogIltbJ1doYXQgaXMgdGhlIGNhcGl0YWwgb2YgQ2FuYWRhPycsICdPdHRhd2EnXSwgWydXaGljaCBwcm92aW5jZSBpcyBPdHRhd2EgaW4/JywgJ09udGFyaW8nXV0iCiAgICAgICAgZXhhbXBsZXNfY29udGV4dDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBBIHRleHQgc25pcHBldCBjb250YWluaW5nIHRoZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGFuc3dlcnMgZm9yIHRoZSBgZXhhbXBsZXNgIHlvdSBwcm92aWRlLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiAiT3R0YXdhLCBDYW5hZGEncyBjYXBpdGFsLCBpcyBsb2NhdGVkIGluIHRoZSBlYXN0IG9mIHNvdXRoZXJuIE9udGFyaW8sIG5lYXIgdGhlIGNpdHkgb2YgTW9udHLDqWFsIGFuZCB0aGUgVS5TLiBib3JkZXIuIgogICAgICAgIGRvY3VtZW50czoKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIExpc3Qgb2YgZG9jdW1lbnRzIGZyb20gd2hpY2ggdGhlIGFuc3dlciBmb3IgdGhlIGlucHV0IGBxdWVzdGlvbmAgc2hvdWxkIGJlIGRlcml2ZWQuIElmIHRoaXMgaXMgYW4gZW1wdHkgbGlzdCwgdGhlIHF1ZXN0aW9uIHdpbGwgYmUgYW5zd2VyZWQgYmFzZWQgb24gdGhlIHF1ZXN0aW9uLWFuc3dlciBleGFtcGxlcy4KCiAgICAgICAgICAgIFlvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgYGRvY3VtZW50c2Agb3IgYSBgZmlsZWAsIGJ1dCBub3QgYm90aC4KICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBtYXhJdGVtczogMjAwCiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiAiWydKYXBhbiBpcyBhbiBpc2xhbmQgY291bnRyeSBpbiBFYXN0IEFzaWEsIGxvY2F0ZWQgaW4gdGhlIG5vcnRod2VzdCBQYWNpZmljIE9jZWFuLicsICdUb2t5byBpcyB0aGUgY2FwaXRhbCBhbmQgbW9zdCBwb3B1bG91cyBwcmVmZWN0dXJlIG9mIEphcGFuLiddIgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBmaWxlOgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIElEIG9mIGFuIHVwbG9hZGVkIGZpbGUgdGhhdCBjb250YWlucyBkb2N1bWVudHMgdG8gc2VhcmNoIG92ZXIuIFNlZSBbdXBsb2FkIGZpbGVdKC9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvdXBsb2FkKSBmb3IgaG93IHRvIHVwbG9hZCBhIGZpbGUgb2YgdGhlIGRlc2lyZWQgZm9ybWF0IGFuZCBwdXJwb3NlLgoKICAgICAgICAgICAgWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgZG9jdW1lbnRzYCBvciBhIGBmaWxlYCwgYnV0IG5vdCBib3RoLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIHNlYXJjaF9tb2RlbDogJnNlYXJjaF9tb2RlbF9jb25maWd1cmF0aW9uCiAgICAgICAgICBkZXNjcmlwdGlvbjogSUQgb2YgdGhlIG1vZGVsIHRvIHVzZSBmb3IgW1NlYXJjaF0oL2RvY3MvYXBpLXJlZmVyZW5jZS9zZWFyY2hlcy9jcmVhdGUpLiBZb3UgY2FuIHNlbGVjdCBvbmUgb2YgYGFkYWAsIGBiYWJiYWdlYCwgYGN1cmllYCwgb3IgYGRhdmluY2lgLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBkZWZhdWx0OiBhZGEKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgbWF4X3JlcmFuazoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIGJlIHJhbmtlZCBieSBbU2VhcmNoXSgvZG9jcy9hcGktcmVmZXJlbmNlL3NlYXJjaGVzL2NyZWF0ZSkgd2hlbiB1c2luZyBgZmlsZWAuIFNldHRpbmcgaXQgdG8gYSBoaWdoZXIgdmFsdWUgbGVhZHMgdG8gaW1wcm92ZWQgYWNjdXJhY3kgYnV0IHdpdGggaW5jcmVhc2VkIGxhdGVuY3kgYW5kIGNvc3QuCiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICBkZWZhdWx0OiAyMDAKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgdGVtcGVyYXR1cmU6CiAgICAgICAgICBkZXNjcmlwdGlvbjogV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlcyBsaWtlIDAuOCB3aWxsIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZSBpdCBtb3JlIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuCiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIGRlZmF1bHQ6IDAKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgbG9ncHJvYnM6ICZjb250ZXh0X2NvbXBsZXRpb25zX2xvZ3Byb2JzX2NvbmZpZ3VyYXRpb24KICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIG1pbmltdW06IDAKICAgICAgICAgIG1heGltdW06IDUKICAgICAgICAgIGRlZmF1bHQ6IG51bGwKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBJbmNsdWRlIHRoZSBsb2cgcHJvYmFiaWxpdGllcyBvbiB0aGUgYGxvZ3Byb2JzYCBtb3N0IGxpa2VseSB0b2tlbnMsIGFzIHdlbGwgdGhlIGNob3NlbiB0b2tlbnMuIEZvciBleGFtcGxlLCBpZiBgbG9ncHJvYnNgIGlzIDUsIHRoZSBBUEkgd2lsbCByZXR1cm4gYSBsaXN0IG9mIHRoZSA1IG1vc3QgbGlrZWx5IHRva2Vucy4gVGhlIEFQSSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIGBsb2dwcm9iYCBvZiB0aGUgc2FtcGxlZCB0b2tlbiwgc28gdGhlcmUgbWF5IGJlIHVwIHRvIGBsb2dwcm9icysxYCBlbGVtZW50cyBpbiB0aGUgcmVzcG9uc2UuCgogICAgICAgICAgICBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYGxvZ3Byb2JzYCBpcyA1LiBJZiB5b3UgbmVlZCBtb3JlIHRoYW4gdGhpcywgcGxlYXNlIGNvbnRhY3QgdXMgdGhyb3VnaCBvdXIgW0hlbHAgY2VudGVyXShodHRwczovL2hlbHAub3BlbmFpLmNvbSkgYW5kIGRlc2NyaWJlIHlvdXIgdXNlIGNhc2UuCgogICAgICAgICAgICBXaGVuIGBsb2dwcm9ic2AgaXMgc2V0LCBgY29tcGxldGlvbmAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIGludG8gYGV4cGFuZGAgdG8gZ2V0IHRoZSBsb2dwcm9icy4KICAgICAgICBtYXhfdG9rZW5zOgogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBtYXhpbXVtIG51bWJlciBvZiB0b2tlbnMgYWxsb3dlZCBmb3IgdGhlIGdlbmVyYXRlZCBhbnN3ZXIKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGRlZmF1bHQ6IDE2CiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIHN0b3A6CiAgICAgICAgICBkZXNjcmlwdGlvbjogKmNvbXBsZXRpb25zX3N0b3BfZGVzY3JpcHRpb24KICAgICAgICAgIGRlZmF1bHQ6IG51bGwKICAgICAgICAgIG9uZU9mOgogICAgICAgICAgICAtIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGRlZmF1bHQ6IDx8ZW5kb2Z0ZXh0fD4KICAgICAgICAgICAgICBleGFtcGxlOiAiXG4iCiAgICAgICAgICAgIC0gdHlwZTogYXJyYXkKICAgICAgICAgICAgICBtaW5JdGVtczogMQogICAgICAgICAgICAgIG1heEl0ZW1zOiA0CiAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIGV4YW1wbGU6ICdbIlxuIl0nCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIG46CiAgICAgICAgICBkZXNjcmlwdGlvbjogSG93IG1hbnkgYW5zd2VycyB0byBnZW5lcmF0ZSBmb3IgZWFjaCBxdWVzdGlvbi4KICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIG1pbmltdW06IDEKICAgICAgICAgIG1heGltdW06IDEwCiAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIGxvZ2l0X2JpYXM6ICpjb21wbGV0aW9uc19sb2dpdF9iaWFzCiAgICAgICAgcmV0dXJuX21ldGFkYXRhOiAqcmV0dXJuX21ldGFkYXRhX2NvbmZpZ3VyYXRpb24KICAgICAgICByZXR1cm5fcHJvbXB0OiAmcmV0dXJuX3Byb21wdF9jb25maWd1cmF0aW9uCiAgICAgICAgICBkZXNjcmlwdGlvbjogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHJldHVybmVkIEpTT04gd2lsbCBpbmNsdWRlIGEgInByb21wdCIgZmllbGQgY29udGFpbmluZyB0aGUgZmluYWwgcHJvbXB0IHRoYXQgd2FzIHVzZWQgdG8gcmVxdWVzdCBhIGNvbXBsZXRpb24uIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgogICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICAgICAgZGVmYXVsdDogZmFsc2UKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgZXhwYW5kOiAmZXhwYW5kX2NvbmZpZ3VyYXRpb24KICAgICAgICAgIGRlc2NyaXB0aW9uOiBJZiBhbiBvYmplY3QgbmFtZSBpcyBpbiB0aGUgbGlzdCwgd2UgcHJvdmlkZSB0aGUgZnVsbCBpbmZvcm1hdGlvbiBvZiB0aGUgb2JqZWN0OyBvdGhlcndpc2UsIHdlIG9ubHkgcHJvdmlkZSB0aGUgb2JqZWN0IElELiBDdXJyZW50bHkgd2Ugc3VwcG9ydCBgY29tcGxldGlvbmAgYW5kIGBmaWxlYCBvYmplY3RzIGZvciBleHBhbnNpb24uCiAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgaXRlbXM6IHt9CiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgICAgZGVmYXVsdDogW10KICAgICAgICB1c2VyOiAqZW5kX3VzZXJfcGFyYW1fY29uZmlndXJhdGlvbgogICAgICByZXF1aXJlZDoKICAgICAgICAtIG1vZGVsCiAgICAgICAgLSBxdWVzdGlvbgogICAgICAgIC0gZXhhbXBsZXMKICAgICAgICAtIGV4YW1wbGVzX2NvbnRleHQKCiAgICBDcmVhdGVBbnN3ZXJSZXNwb25zZToKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgb2JqZWN0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgbW9kZWw6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBzZWFyY2hfbW9kZWw6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBjb21wbGV0aW9uOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgYW5zd2VyczoKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgc2VsZWN0ZWRfZG9jdW1lbnRzOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICBkb2N1bWVudDoKICAgICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgICAgICB0ZXh0OgogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgQ3JlYXRlQ2xhc3NpZmljYXRpb25SZXF1ZXN0OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbW9kZWw6ICptb2RlbF9jb25maWd1cmF0aW9uCiAgICAgICAgcXVlcnk6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUXVlcnkgdG8gYmUgY2xhc3NpZmllZC4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbWluTGVuZ3RoOiAxCiAgICAgICAgICBleGFtcGxlOiAiVGhlIHBsb3QgaXMgbm90IHZlcnkgYXR0cmFjdGl2ZS4iCiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBBIGxpc3Qgb2YgZXhhbXBsZXMgd2l0aCBsYWJlbHMsIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgoKICAgICAgICAgICAgYFtbIlRoZSBtb3ZpZSBpcyBzbyBpbnRlcmVzdGluZy4iLCAiUG9zaXRpdmUiXSwgWyJJdCBpcyBxdWl0ZSBib3JpbmcuIiwgIk5lZ2F0aXZlIl0sIC4uLl1gCgogICAgICAgICAgICBBbGwgdGhlIGxhYmVsIHN0cmluZ3Mgd2lsbCBiZSBub3JtYWxpemVkIHRvIGJlIGNhcGl0YWxpemVkLgoKICAgICAgICAgICAgWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgZXhhbXBsZXNgIG9yIGBmaWxlYCwgYnV0IG5vdCBib3RoLgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIG1pbkl0ZW1zOiAyCiAgICAgICAgICBtYXhJdGVtczogMjAwCiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgbWluSXRlbXM6IDIKICAgICAgICAgICAgbWF4SXRlbXM6IDIKICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgbWluTGVuZ3RoOiAxCiAgICAgICAgICBleGFtcGxlOiAiW1snRG8gbm90IHNlZSB0aGlzIGZpbG0uJywgJ05lZ2F0aXZlJ10sIFsnU21hcnQsIHByb3ZvY2F0aXZlIGFuZCBibGlzdGVyaW5nbHkgZnVubnkuJywgJ1Bvc2l0aXZlJ11dIgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBmaWxlOgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIElEIG9mIHRoZSB1cGxvYWRlZCBmaWxlIHRoYXQgY29udGFpbnMgdHJhaW5pbmcgZXhhbXBsZXMuIFNlZSBbdXBsb2FkIGZpbGVdKC9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvdXBsb2FkKSBmb3IgaG93IHRvIHVwbG9hZCBhIGZpbGUgb2YgdGhlIGRlc2lyZWQgZm9ybWF0IGFuZCBwdXJwb3NlLgoKICAgICAgICAgICAgWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgZXhhbXBsZXNgIG9yIGBmaWxlYCwgYnV0IG5vdCBib3RoLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIGxhYmVsczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgc2V0IG9mIGNhdGVnb3JpZXMgYmVpbmcgY2xhc3NpZmllZC4gSWYgbm90IHNwZWNpZmllZCwgY2FuZGlkYXRlIGxhYmVscyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29sbGVjdGVkIGZyb20gdGhlIGV4YW1wbGVzIHlvdSBwcm92aWRlLiBBbGwgdGhlIGxhYmVsIHN0cmluZ3Mgd2lsbCBiZSBub3JtYWxpemVkIHRvIGJlIGNhcGl0YWxpemVkLgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIG1pbkl0ZW1zOiAyCiAgICAgICAgICBtYXhJdGVtczogMjAwCiAgICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBleGFtcGxlOiBbIlBvc2l0aXZlIiwgIk5lZ2F0aXZlIl0KICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgc2VhcmNoX21vZGVsOiAqc2VhcmNoX21vZGVsX2NvbmZpZ3VyYXRpb24KICAgICAgICB0ZW1wZXJhdHVyZToKICAgICAgICAgIGRlc2NyaXB0aW9uOgogICAgICAgICAgICBXaGF0IHNhbXBsaW5nIHRlbXBlcmF0dXJlIHRvIHVzZSwgYmV0d2VlbiAwIGFuZCAyLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGwgbWFrZSB0aGUgb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmUgZm9jdXNlZCBhbmQgZGV0ZXJtaW5pc3RpYy4KICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgbWluaW11bTogMAogICAgICAgICAgbWF4aW11bTogMgogICAgICAgICAgZGVmYXVsdDogMAogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICAgIGV4YW1wbGU6IDAKICAgICAgICBsb2dwcm9iczogKmNvbnRleHRfY29tcGxldGlvbnNfbG9ncHJvYnNfY29uZmlndXJhdGlvbgogICAgICAgIG1heF9leGFtcGxlczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXhhbXBsZXMgdG8gYmUgcmFua2VkIGJ5IFtTZWFyY2hdKC9kb2NzL2FwaS1yZWZlcmVuY2Uvc2VhcmNoZXMvY3JlYXRlKSB3aGVuIHVzaW5nIGBmaWxlYC4gU2V0dGluZyBpdCB0byBhIGhpZ2hlciB2YWx1ZSBsZWFkcyB0byBpbXByb3ZlZCBhY2N1cmFjeSBidXQgd2l0aCBpbmNyZWFzZWQgbGF0ZW5jeSBhbmQgY29zdC4KICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGRlZmF1bHQ6IDIwMAogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBsb2dpdF9iaWFzOiAqY29tcGxldGlvbnNfbG9naXRfYmlhcwogICAgICAgIHJldHVybl9wcm9tcHQ6ICpyZXR1cm5fcHJvbXB0X2NvbmZpZ3VyYXRpb24KICAgICAgICByZXR1cm5fbWV0YWRhdGE6ICpyZXR1cm5fbWV0YWRhdGFfY29uZmlndXJhdGlvbgogICAgICAgIGV4cGFuZDogKmV4cGFuZF9jb25maWd1cmF0aW9uCiAgICAgICAgdXNlcjogKmVuZF91c2VyX3BhcmFtX2NvbmZpZ3VyYXRpb24KICAgICAgcmVxdWlyZWQ6CiAgICAgICAgLSBtb2RlbAogICAgICAgIC0gcXVlcnkKCiAgICBDcmVhdGVDbGFzc2lmaWNhdGlvblJlc3BvbnNlOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICBvYmplY3Q6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBtb2RlbDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIHNlYXJjaF9tb2RlbDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGNvbXBsZXRpb246CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBsYWJlbDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIHNlbGVjdGVkX2V4YW1wbGVzOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICBkb2N1bWVudDoKICAgICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgICAgICB0ZXh0OgogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgbGFiZWw6CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCiAgICBDcmVhdGVGaW5lVHVuZVJlcXVlc3Q6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHRyYWluaW5nX2ZpbGU6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgSUQgb2YgYW4gdXBsb2FkZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHRyYWluaW5nIGRhdGEuCgogICAgICAgICAgICBTZWUgW3VwbG9hZCBmaWxlXSgvZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzL3VwbG9hZCkgZm9yIGhvdyB0byB1cGxvYWQgYSBmaWxlLgoKICAgICAgICAgICAgWW91ciBkYXRhc2V0IG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgSlNPTkwgZmlsZSwgd2hlcmUgZWFjaCB0cmFpbmluZwogICAgICAgICAgICBleGFtcGxlIGlzIGEgSlNPTiBvYmplY3Qgd2l0aCB0aGUga2V5cyAicHJvbXB0IiBhbmQgImNvbXBsZXRpb24iLgogICAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBtdXN0IHVwbG9hZCB5b3VyIGZpbGUgd2l0aCB0aGUgcHVycG9zZSBgZmluZS10dW5lYC4KCiAgICAgICAgICAgIFNlZSB0aGUgW2ZpbmUtdHVuaW5nIGd1aWRlXSgvZG9jcy9ndWlkZXMvZmluZS10dW5pbmcvY3JlYXRpbmctdHJhaW5pbmctZGF0YSkgZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZXhhbXBsZTogImZpbGUtYWpTUkVsczU5V0JidmdTekpTVld4TUNCIgogICAgICAgIHZhbGlkYXRpb25fZmlsZToKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIFRoZSBJRCBvZiBhbiB1cGxvYWRlZCBmaWxlIHRoYXQgY29udGFpbnMgdmFsaWRhdGlvbiBkYXRhLgoKICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgdGhpcyBmaWxlLCB0aGUgZGF0YSBpcyB1c2VkIHRvIGdlbmVyYXRlIHZhbGlkYXRpb24KICAgICAgICAgICAgbWV0cmljcyBwZXJpb2RpY2FsbHkgZHVyaW5nIGZpbmUtdHVuaW5nLiBUaGVzZSBtZXRyaWNzIGNhbiBiZSB2aWV3ZWQgaW4KICAgICAgICAgICAgdGhlIFtmaW5lLXR1bmluZyByZXN1bHRzIGZpbGVdKC9kb2NzL2d1aWRlcy9maW5lLXR1bmluZy9hbmFseXppbmcteW91ci1maW5lLXR1bmVkLW1vZGVsKS4KICAgICAgICAgICAgWW91ciB0cmFpbiBhbmQgdmFsaWRhdGlvbiBkYXRhIHNob3VsZCBiZSBtdXR1YWxseSBleGNsdXNpdmUuCgogICAgICAgICAgICBZb3VyIGRhdGFzZXQgbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBKU09OTCBmaWxlLCB3aGVyZSBlYWNoIHZhbGlkYXRpb24KICAgICAgICAgICAgZXhhbXBsZSBpcyBhIEpTT04gb2JqZWN0IHdpdGggdGhlIGtleXMgInByb21wdCIgYW5kICJjb21wbGV0aW9uIi4KICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgbXVzdCB1cGxvYWQgeW91ciBmaWxlIHdpdGggdGhlIHB1cnBvc2UgYGZpbmUtdHVuZWAuCgogICAgICAgICAgICBTZWUgdGhlIFtmaW5lLXR1bmluZyBndWlkZV0oL2RvY3MvZ3VpZGVzL2ZpbmUtdHVuaW5nL2NyZWF0aW5nLXRyYWluaW5nLWRhdGEpIGZvciBtb3JlIGRldGFpbHMuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgICBleGFtcGxlOiAiZmlsZS1YalNSRWxzNTlXQmJ2Z1N6SlNWV3hNQ2EiCiAgICAgICAgbW9kZWw6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYmFzZSBtb2RlbCB0byBmaW5lLXR1bmUuIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiAiYWRhIiwKICAgICAgICAgICAgImJhYmJhZ2UiLCAiY3VyaWUiLCAiZGF2aW5jaSIsIG9yIGEgZmluZS10dW5lZCBtb2RlbCBjcmVhdGVkIGFmdGVyIDIwMjItMDQtMjEuCiAgICAgICAgICAgIFRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlc2UgbW9kZWxzLCBzZWUgdGhlCiAgICAgICAgICAgIFtNb2RlbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscykgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgIGRlZmF1bHQ6ICJjdXJpZSIKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBuX2Vwb2NoczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZXBvY2hzIHRvIHRyYWluIHRoZSBtb2RlbCBmb3IuIEFuIGVwb2NoIHJlZmVycyB0byBvbmUKICAgICAgICAgICAgZnVsbCBjeWNsZSB0aHJvdWdoIHRoZSB0cmFpbmluZyBkYXRhc2V0LgogICAgICAgICAgZGVmYXVsdDogNAogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBiYXRjaF9zaXplOgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIGJhdGNoIHNpemUgdG8gdXNlIGZvciB0cmFpbmluZy4gVGhlIGJhdGNoIHNpemUgaXMgdGhlIG51bWJlciBvZgogICAgICAgICAgICB0cmFpbmluZyBleGFtcGxlcyB1c2VkIHRvIHRyYWluIGEgc2luZ2xlIGZvcndhcmQgYW5kIGJhY2t3YXJkIHBhc3MuCgogICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYmF0Y2ggc2l6ZSB3aWxsIGJlIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdG8gYmUKICAgICAgICAgICAgfjAuMiUgb2YgdGhlIG51bWJlciBvZiBleGFtcGxlcyBpbiB0aGUgdHJhaW5pbmcgc2V0LCBjYXBwZWQgYXQgMjU2IC0KICAgICAgICAgICAgaW4gZ2VuZXJhbCwgd2UndmUgZm91bmQgdGhhdCBsYXJnZXIgYmF0Y2ggc2l6ZXMgdGVuZCB0byB3b3JrIGJldHRlcgogICAgICAgICAgICBmb3IgbGFyZ2VyIGRhdGFzZXRzLgogICAgICAgICAgZGVmYXVsdDogbnVsbAogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBsZWFybmluZ19yYXRlX211bHRpcGxpZXI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgbGVhcm5pbmcgcmF0ZSBtdWx0aXBsaWVyIHRvIHVzZSBmb3IgdHJhaW5pbmcuCiAgICAgICAgICAgIFRoZSBmaW5lLXR1bmluZyBsZWFybmluZyByYXRlIGlzIHRoZSBvcmlnaW5hbCBsZWFybmluZyByYXRlIHVzZWQgZm9yCiAgICAgICAgICAgIHByZXRyYWluaW5nIG11bHRpcGxpZWQgYnkgdGhpcyB2YWx1ZS4KCiAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBsZWFybmluZyByYXRlIG11bHRpcGxpZXIgaXMgdGhlIDAuMDUsIDAuMSwgb3IgMC4yCiAgICAgICAgICAgIGRlcGVuZGluZyBvbiBmaW5hbCBgYmF0Y2hfc2l6ZWAgKGxhcmdlciBsZWFybmluZyByYXRlcyB0ZW5kIHRvCiAgICAgICAgICAgIHBlcmZvcm0gYmV0dGVyIHdpdGggbGFyZ2VyIGJhdGNoIHNpemVzKS4gV2UgcmVjb21tZW5kIGV4cGVyaW1lbnRpbmcKICAgICAgICAgICAgd2l0aCB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAuMDIgdG8gMC4yIHRvIHNlZSB3aGF0IHByb2R1Y2VzIHRoZSBiZXN0CiAgICAgICAgICAgIHJlc3VsdHMuCiAgICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgcHJvbXB0X2xvc3Nfd2VpZ2h0OgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIHdlaWdodCB0byB1c2UgZm9yIGxvc3Mgb24gdGhlIHByb21wdCB0b2tlbnMuIFRoaXMgY29udHJvbHMgaG93CiAgICAgICAgICAgIG11Y2ggdGhlIG1vZGVsIHRyaWVzIHRvIGxlYXJuIHRvIGdlbmVyYXRlIHRoZSBwcm9tcHQgKGFzIGNvbXBhcmVkCiAgICAgICAgICAgIHRvIHRoZSBjb21wbGV0aW9uIHdoaWNoIGFsd2F5cyBoYXMgYSB3ZWlnaHQgb2YgMS4wKSwgYW5kIGNhbiBhZGQKICAgICAgICAgICAgYSBzdGFiaWxpemluZyBlZmZlY3QgdG8gdHJhaW5pbmcgd2hlbiBjb21wbGV0aW9ucyBhcmUgc2hvcnQuCgogICAgICAgICAgICBJZiBwcm9tcHRzIGFyZSBleHRyZW1lbHkgbG9uZyAocmVsYXRpdmUgdG8gY29tcGxldGlvbnMpLCBpdCBtYXkgbWFrZQogICAgICAgICAgICBzZW5zZSB0byByZWR1Y2UgdGhpcyB3ZWlnaHQgc28gYXMgdG8gYXZvaWQgb3Zlci1wcmlvcml0aXppbmcKICAgICAgICAgICAgbGVhcm5pbmcgdGhlIHByb21wdC4KICAgICAgICAgIGRlZmF1bHQ6IDAuMDEKICAgICAgICAgIHR5cGU6IG51bWJlcgogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBjb21wdXRlX2NsYXNzaWZpY2F0aW9uX21ldHJpY3M6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBJZiBzZXQsIHdlIGNhbGN1bGF0ZSBjbGFzc2lmaWNhdGlvbi1zcGVjaWZpYyBtZXRyaWNzIHN1Y2ggYXMgYWNjdXJhY3kKICAgICAgICAgICAgYW5kIEYtMSBzY29yZSB1c2luZyB0aGUgdmFsaWRhdGlvbiBzZXQgYXQgdGhlIGVuZCBvZiBldmVyeSBlcG9jaC4KICAgICAgICAgICAgVGhlc2UgbWV0cmljcyBjYW4gYmUgdmlld2VkIGluIHRoZSBbcmVzdWx0cyBmaWxlXSgvZG9jcy9ndWlkZXMvZmluZS10dW5pbmcvYW5hbHl6aW5nLXlvdXItZmluZS10dW5lZC1tb2RlbCkuCgogICAgICAgICAgICBJbiBvcmRlciB0byBjb21wdXRlIGNsYXNzaWZpY2F0aW9uIG1ldHJpY3MsIHlvdSBtdXN0IHByb3ZpZGUgYQogICAgICAgICAgICBgdmFsaWRhdGlvbl9maWxlYC4gQWRkaXRpb25hbGx5LCB5b3UgbXVzdAogICAgICAgICAgICBzcGVjaWZ5IGBjbGFzc2lmaWNhdGlvbl9uX2NsYXNzZXNgIGZvciBtdWx0aWNsYXNzIGNsYXNzaWZpY2F0aW9uIG9yCiAgICAgICAgICAgIGBjbGFzc2lmaWNhdGlvbl9wb3NpdGl2ZV9jbGFzc2AgZm9yIGJpbmFyeSBjbGFzc2lmaWNhdGlvbi4KICAgICAgICAgIHR5cGU6IGJvb2xlYW4KICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIGNsYXNzaWZpY2F0aW9uX25fY2xhc3NlczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgY2xhc3NlcyBpbiBhIGNsYXNzaWZpY2F0aW9uIHRhc2suCgogICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgbXVsdGljbGFzcyBjbGFzc2lmaWNhdGlvbi4KICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgIGRlZmF1bHQ6IG51bGwKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgY2xhc3NpZmljYXRpb25fcG9zaXRpdmVfY2xhc3M6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgcG9zaXRpdmUgY2xhc3MgaW4gYmluYXJ5IGNsYXNzaWZpY2F0aW9uLgoKICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHRvIGdlbmVyYXRlIHByZWNpc2lvbiwgcmVjYWxsLCBhbmQgRjEKICAgICAgICAgICAgbWV0cmljcyB3aGVuIGRvaW5nIGJpbmFyeSBjbGFzc2lmaWNhdGlvbi4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZGVmYXVsdDogbnVsbAogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBjbGFzc2lmaWNhdGlvbl9iZXRhczoKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIElmIHRoaXMgaXMgcHJvdmlkZWQsIHdlIGNhbGN1bGF0ZSBGLWJldGEgc2NvcmVzIGF0IHRoZSBzcGVjaWZpZWQKICAgICAgICAgICAgYmV0YSB2YWx1ZXMuIFRoZSBGLWJldGEgc2NvcmUgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBGLTEgc2NvcmUuCiAgICAgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIGZvciBiaW5hcnkgY2xhc3NpZmljYXRpb24uCgogICAgICAgICAgICBXaXRoIGEgYmV0YSBvZiAxIChpLmUuIHRoZSBGLTEgc2NvcmUpLCBwcmVjaXNpb24gYW5kIHJlY2FsbCBhcmUKICAgICAgICAgICAgZ2l2ZW4gdGhlIHNhbWUgd2VpZ2h0LiBBIGxhcmdlciBiZXRhIHNjb3JlIHB1dHMgbW9yZSB3ZWlnaHQgb24KICAgICAgICAgICAgcmVjYWxsIGFuZCBsZXNzIG9uIHByZWNpc2lvbi4gQSBzbWFsbGVyIGJldGEgc2NvcmUgcHV0cyBtb3JlIHdlaWdodAogICAgICAgICAgICBvbiBwcmVjaXNpb24gYW5kIGxlc3Mgb24gcmVjYWxsLgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgIGV4YW1wbGU6IFswLjYsIDEsIDEuNSwgMl0KICAgICAgICAgIGRlZmF1bHQ6IG51bGwKICAgICAgICAgIG51bGxhYmxlOiB0cnVlCiAgICAgICAgc3VmZml4OgogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgQSBzdHJpbmcgb2YgdXAgdG8gNDAgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8geW91ciBmaW5lLXR1bmVkIG1vZGVsIG5hbWUuCgogICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBgc3VmZml4YCBvZiAiY3VzdG9tLW1vZGVsLW5hbWUiIHdvdWxkIHByb2R1Y2UgYSBtb2RlbCBuYW1lIGxpa2UgYGFkYTpmdC15b3VyLW9yZzpjdXN0b20tbW9kZWwtbmFtZS0yMDIyLTAyLTE1LTA0LTIxLTA0YC4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbWluTGVuZ3RoOiAxCiAgICAgICAgICBtYXhMZW5ndGg6IDQwCiAgICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICByZXF1aXJlZDoKICAgICAgICAtIHRyYWluaW5nX2ZpbGUKCiAgICBMaXN0RmluZVR1bmVzUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGRhdGE6CiAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9GaW5lVHVuZScKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gb2JqZWN0CiAgICAgICAgLSBkYXRhCgogICAgTGlzdEZpbmVUdW5lRXZlbnRzUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGRhdGE6CiAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9GaW5lVHVuZUV2ZW50JwogICAgICByZXF1aXJlZDogCiAgICAgICAgLSBvYmplY3QKICAgICAgICAtIGRhdGEKCiAgICBDcmVhdGVFbWJlZGRpbmdSZXF1ZXN0OgogICAgICB0eXBlOiBvYmplY3QKICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgbW9kZWw6ICptb2RlbF9jb25maWd1cmF0aW9uCiAgICAgICAgaW5wdXQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBJbnB1dCB0ZXh0IHRvIGdldCBlbWJlZGRpbmdzIGZvciwgZW5jb2RlZCBhcyBhIHN0cmluZyBvciBhcnJheSBvZiB0b2tlbnMuIFRvIGdldCBlbWJlZGRpbmdzIGZvciBtdWx0aXBsZSBpbnB1dHMgaW4gYSBzaW5nbGUgcmVxdWVzdCwgcGFzcyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGFycmF5IG9mIHRva2VuIGFycmF5cy4gRWFjaCBpbnB1dCBtdXN0IG5vdCBleGNlZWQgODE5MiB0b2tlbnMgaW4gbGVuZ3RoLgogICAgICAgICAgZXhhbXBsZTogIlRoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgdGhlIGxhenkgZG9nIgogICAgICAgICAgb25lT2Y6CiAgICAgICAgICAgIC0gdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZGVmYXVsdDogJycKICAgICAgICAgICAgICBleGFtcGxlOiAiVGhpcyBpcyBhIHRlc3QuIgogICAgICAgICAgICAtIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICcnCiAgICAgICAgICAgICAgICBleGFtcGxlOiAiVGhpcyBpcyBhIHRlc3QuIgogICAgICAgICAgICAtIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgbWluSXRlbXM6IDEKICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICAgICAgICBleGFtcGxlOiAiWzEyMTIsIDMxOCwgMjU3LCAxMzMyLCAxM10iCiAgICAgICAgICAgIC0gdHlwZTogYXJyYXkKICAgICAgICAgICAgICBtaW5JdGVtczogMQogICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgIG1pbkl0ZW1zOiAxCiAgICAgICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICAgIGV4YW1wbGU6ICJbWzEyMTIsIDMxOCwgMjU3LCAxMzMyLCAxM11dIgogICAgICAgIHVzZXI6ICplbmRfdXNlcl9wYXJhbV9jb25maWd1cmF0aW9uCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gbW9kZWwKICAgICAgICAtIGlucHV0CgogICAgQ3JlYXRlRW1iZWRkaW5nUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIG1vZGVsOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZGF0YToKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgaW5kZXg6CiAgICAgICAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICAgICAgb2JqZWN0OgogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZW1iZWRkaW5nOgogICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgICB0eXBlOiBudW1iZXIKICAgICAgICAgICAgcmVxdWlyZWQ6IAogICAgICAgICAgICAgIC0gaW5kZXgKICAgICAgICAgICAgICAtIG9iamVjdAogICAgICAgICAgICAgIC0gZW1iZWRkaW5nCiAgICAgICAgdXNhZ2U6CiAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIHByb21wdF90b2tlbnM6CiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICB0b3RhbF90b2tlbnM6CiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgcmVxdWlyZWQ6IAogICAgICAgICAgICAtIHByb21wdF90b2tlbnMKICAgICAgICAgICAgLSB0b3RhbF90b2tlbnMKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gb2JqZWN0CiAgICAgICAgLSBtb2RlbAogICAgICAgIC0gZGF0YQogICAgICAgIC0gdXNhZ2UKCiAgICBDcmVhdGVUcmFuc2NyaXB0aW9uUmVxdWVzdDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGZpbGU6IAogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIGF1ZGlvIGZpbGUgdG8gdHJhbnNjcmliZSwgaW4gb25lIG9mIHRoZXNlIGZvcm1hdHM6IG1wMywgbXA0LCBtcGVnLCBtcGdhLCBtNGEsIHdhdiwgb3Igd2VibS4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgZm9ybWF0OiBiaW5hcnkKICAgICAgICBtb2RlbDogCiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBJRCBvZiB0aGUgbW9kZWwgdG8gdXNlLiBPbmx5IGB3aGlzcGVyLTFgIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBwcm9tcHQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBBbiBvcHRpb25hbCB0ZXh0IHRvIGd1aWRlIHRoZSBtb2RlbCdzIHN0eWxlIG9yIGNvbnRpbnVlIGEgcHJldmlvdXMgYXVkaW8gc2VnbWVudC4gVGhlIFtwcm9tcHRdKC9kb2NzL2d1aWRlcy9zcGVlY2gtdG8tdGV4dC9wcm9tcHRpbmcpIHNob3VsZCBtYXRjaCB0aGUgYXVkaW8gbGFuZ3VhZ2UuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICByZXNwb25zZV9mb3JtYXQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSB0cmFuc2NyaXB0IG91dHB1dCwgaW4gb25lIG9mIHRoZXNlIG9wdGlvbnM6IGpzb24sIHRleHQsIHNydCwgdmVyYm9zZV9qc29uLCBvciB2dHQuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlZmF1bHQ6IGpzb24KICAgICAgICB0ZW1wZXJhdHVyZToKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIFRoZSBzYW1wbGluZyB0ZW1wZXJhdHVyZSwgYmV0d2VlbiAwIGFuZCAxLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGwgbWFrZSB0aGUgb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmUgZm9jdXNlZCBhbmQgZGV0ZXJtaW5pc3RpYy4gSWYgc2V0IHRvIDAsIHRoZSBtb2RlbCB3aWxsIHVzZSBbbG9nIHByb2JhYmlsaXR5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb2dfcHJvYmFiaWxpdHkpIHRvIGF1dG9tYXRpY2FsbHkgaW5jcmVhc2UgdGhlIHRlbXBlcmF0dXJlIHVudGlsIGNlcnRhaW4gdGhyZXNob2xkcyBhcmUgaGl0LgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgICAgbGFuZ3VhZ2U6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGF1ZGlvLiBTdXBwbHlpbmcgdGhlIGlucHV0IGxhbmd1YWdlIGluIFtJU08tNjM5LTFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfSVNPXzYzOS0xX2NvZGVzKSBmb3JtYXQgd2lsbCBpbXByb3ZlIGFjY3VyYWN5IGFuZCBsYXRlbmN5LgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gZmlsZQogICAgICAgIC0gbW9kZWwKCiAgICAjIE5vdGU6IFRoaXMgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG5vbi1kZWZhdWx0IHJlc3BvbnNlIGZvcm1hdCB0eXBlcy4gCiAgICBDcmVhdGVUcmFuc2NyaXB0aW9uUmVzcG9uc2U6CiAgICAgIHR5cGU6IG9iamVjdAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIHRleHQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gdGV4dAoKICAgIENyZWF0ZVRyYW5zbGF0aW9uUmVxdWVzdDoKICAgICAgdHlwZTogb2JqZWN0CiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGZpbGU6IAogICAgICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICAgICAgVGhlIGF1ZGlvIGZpbGUgdG8gdHJhbnNsYXRlLCBpbiBvbmUgb2YgdGhlc2UgZm9ybWF0czogbXAzLCBtcDQsIG1wZWcsIG1wZ2EsIG00YSwgd2F2LCBvciB3ZWJtLgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICBmb3JtYXQ6IGJpbmFyeQogICAgICAgIG1vZGVsOiAKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIElEIG9mIHRoZSBtb2RlbCB0byB1c2UuIE9ubHkgYHdoaXNwZXItMWAgaXMgY3VycmVudGx5IGF2YWlsYWJsZS4KICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIHByb21wdDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIEFuIG9wdGlvbmFsIHRleHQgdG8gZ3VpZGUgdGhlIG1vZGVsJ3Mgc3R5bGUgb3IgY29udGludWUgYSBwcmV2aW91cyBhdWRpbyBzZWdtZW50LiBUaGUgW3Byb21wdF0oL2RvY3MvZ3VpZGVzL3NwZWVjaC10by10ZXh0L3Byb21wdGluZykgc2hvdWxkIGJlIGluIEVuZ2xpc2guCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICByZXNwb25zZV9mb3JtYXQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSB0cmFuc2NyaXB0IG91dHB1dCwgaW4gb25lIG9mIHRoZXNlIG9wdGlvbnM6IGpzb24sIHRleHQsIHNydCwgdmVyYm9zZV9qc29uLCBvciB2dHQuCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIGRlZmF1bHQ6IGpzb24KICAgICAgICB0ZW1wZXJhdHVyZToKICAgICAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgICAgIFRoZSBzYW1wbGluZyB0ZW1wZXJhdHVyZSwgYmV0d2VlbiAwIGFuZCAxLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGwgbWFrZSB0aGUgb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmUgZm9jdXNlZCBhbmQgZGV0ZXJtaW5pc3RpYy4gSWYgc2V0IHRvIDAsIHRoZSBtb2RlbCB3aWxsIHVzZSBbbG9nIHByb2JhYmlsaXR5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb2dfcHJvYmFiaWxpdHkpIHRvIGF1dG9tYXRpY2FsbHkgaW5jcmVhc2UgdGhlIHRlbXBlcmF0dXJlIHVudGlsIGNlcnRhaW4gdGhyZXNob2xkcyBhcmUgaGl0LgogICAgICAgICAgdHlwZTogbnVtYmVyCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgIHJlcXVpcmVkOgogICAgICAgIC0gZmlsZQogICAgICAgIC0gbW9kZWwKCiAgICAjIE5vdGU6IFRoaXMgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG5vbi1kZWZhdWx0IHJlc3BvbnNlIGZvcm1hdCB0eXBlcy4gCiAgICBDcmVhdGVUcmFuc2xhdGlvblJlc3BvbnNlOgogICAgICB0eXBlOiBvYmplY3QKICAgICAgcHJvcGVydGllczoKICAgICAgICB0ZXh0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIHJlcXVpcmVkOiAKICAgICAgICAtIHRleHQKCiAgICBFbmdpbmU6CiAgICAgIHRpdGxlOiBFbmdpbmUKICAgICAgcHJvcGVydGllczoKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGNyZWF0ZWQ6CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgICBudWxsYWJsZTogdHJ1ZQogICAgICAgIHJlYWR5OgogICAgICAgICAgdHlwZTogYm9vbGVhbgogICAgICByZXF1aXJlZDogCiAgICAgICAgLSBpZAogICAgICAgIC0gb2JqZWN0CiAgICAgICAgLSBjcmVhdGVkCiAgICAgICAgLSByZWFkeQoKICAgIE1vZGVsOgogICAgICB0aXRsZTogTW9kZWwKICAgICAgcHJvcGVydGllczoKICAgICAgICBpZDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGNyZWF0ZWQ6CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgb3duZWRfYnk6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gaWQKICAgICAgICAtIG9iamVjdAogICAgICAgIC0gY3JlYXRlZAogICAgICAgIC0gb3duZWRfYnkKCiAgICBPcGVuQUlGaWxlOgogICAgICB0aXRsZTogT3BlbkFJRmlsZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgb2JqZWN0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgYnl0ZXM6CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgY3JlYXRlZF9hdDoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICBmaWxlbmFtZToKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIHB1cnBvc2U6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBzdGF0dXM6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBzdGF0dXNfZGV0YWlsczoKICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgcmVxdWlyZWQ6IAogICAgICAgIC0gaWQKICAgICAgICAtIG9iamVjdAogICAgICAgIC0gYnl0ZXMKICAgICAgICAtIGNyZWF0ZWRfYXQKICAgICAgICAtIGZpbGVuYW1lCiAgICAgICAgLSBwdXJwb3NlCgogICAgRmluZVR1bmU6CiAgICAgIHRpdGxlOiBGaW5lVHVuZQogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIGlkOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgb2JqZWN0OgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgY3JlYXRlZF9hdDoKICAgICAgICAgIHR5cGU6IGludGVnZXIKICAgICAgICB1cGRhdGVkX2F0OgogICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgIG1vZGVsOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZmluZV90dW5lZF9tb2RlbDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgbnVsbGFibGU6IHRydWUKICAgICAgICBvcmdhbml6YXRpb25faWQ6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBzdGF0dXM6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBoeXBlcnBhcmFtczoKICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgIHRyYWluaW5nX2ZpbGVzOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvT3BlbkFJRmlsZScKICAgICAgICB2YWxpZGF0aW9uX2ZpbGVzOgogICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvT3BlbkFJRmlsZScKICAgICAgICByZXN1bHRfZmlsZXM6CiAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9PcGVuQUlGaWxlJwogICAgICAgIGV2ZW50czoKICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0ZpbmVUdW5lRXZlbnQnCiAgICAgIHJlcXVpcmVkOiAKICAgICAgICAtIGlkCiAgICAgICAgLSBvYmplY3QKICAgICAgICAtIGNyZWF0ZWRfYXQKICAgICAgICAtIHVwZGF0ZWRfYXQKICAgICAgICAtIG1vZGVsCiAgICAgICAgLSBmaW5lX3R1bmVkX21vZGVsCiAgICAgICAgLSBvcmdhbml6YXRpb25faWQKICAgICAgICAtIHN0YXR1cwogICAgICAgIC0gaHlwZXJwYXJhbXMKICAgICAgICAtIHRyYWluaW5nX2ZpbGVzCiAgICAgICAgLSB2YWxpZGF0aW9uX2ZpbGVzCiAgICAgICAgLSByZXN1bHRfZmlsZXMKCiAgICBGaW5lVHVuZUV2ZW50OgogICAgICB0aXRsZTogRmluZVR1bmVFdmVudAogICAgICBwcm9wZXJ0aWVzOgogICAgICAgIG9iamVjdDoKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIGNyZWF0ZWRfYXQ6CiAgICAgICAgICB0eXBlOiBpbnRlZ2VyCiAgICAgICAgbGV2ZWw6CiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIHJlcXVpcmVkOiAKICAgICAgICAtIG9iamVjdAogICAgICAgIC0gY3JlYXRlZF9hdAogICAgICAgIC0gbGV2ZWwKICAgICAgICAtIG1lc3NhZ2UKCngtb2FpTWV0YToKICBncm91cHM6CiAgICAtIGlkOiBtb2RlbHMKICAgICAgdGl0bGU6IE1vZGVscwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIExpc3QgYW5kIGRlc2NyaWJlIHRoZSB2YXJpb3VzIG1vZGVscyBhdmFpbGFibGUgaW4gdGhlIEFQSS4gWW91IGNhbiByZWZlciB0byB0aGUgW01vZGVsc10oL2RvY3MvbW9kZWxzKSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCBtb2RlbHMgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS4KICAgIC0gaWQ6IGNvbXBsZXRpb25zCiAgICAgIHRpdGxlOiBDb21wbGV0aW9ucwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdpdmVuIGEgcHJvbXB0LCB0aGUgbW9kZWwgd2lsbCByZXR1cm4gb25lIG9yIG1vcmUgcHJlZGljdGVkIGNvbXBsZXRpb25zLCBhbmQgY2FuIGFsc28gcmV0dXJuIHRoZSBwcm9iYWJpbGl0aWVzIG9mIGFsdGVybmF0aXZlIHRva2VucyBhdCBlYWNoIHBvc2l0aW9uLgogICAgLSBpZDogY2hhdAogICAgICB0aXRsZTogQ2hhdAogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdpdmVuIGEgY2hhdCBjb252ZXJzYXRpb24sIHRoZSBtb2RlbCB3aWxsIHJldHVybiBhIGNoYXQgY29tcGxldGlvbiByZXNwb25zZS4KICAgIC0gaWQ6IGVkaXRzCiAgICAgIHRpdGxlOiBFZGl0cwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdpdmVuIGEgcHJvbXB0IGFuZCBhbiBpbnN0cnVjdGlvbiwgdGhlIG1vZGVsIHdpbGwgcmV0dXJuIGFuIGVkaXRlZCB2ZXJzaW9uIG9mIHRoZSBwcm9tcHQuCiAgICAtIGlkOiBpbWFnZXMKICAgICAgdGl0bGU6IEltYWdlcwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdpdmVuIGEgcHJvbXB0IGFuZC9vciBhbiBpbnB1dCBpbWFnZSwgdGhlIG1vZGVsIHdpbGwgZ2VuZXJhdGUgYSBuZXcgaW1hZ2UuCgogICAgICAgIFJlbGF0ZWQgZ3VpZGU6IFtJbWFnZSBnZW5lcmF0aW9uXSgvZG9jcy9ndWlkZXMvaW1hZ2VzKQogICAgLSBpZDogZW1iZWRkaW5ncwogICAgICB0aXRsZTogRW1iZWRkaW5ncwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdldCBhIHZlY3RvciByZXByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIGlucHV0IHRoYXQgY2FuIGJlIGVhc2lseSBjb25zdW1lZCBieSBtYWNoaW5lIGxlYXJuaW5nIG1vZGVscyBhbmQgYWxnb3JpdGhtcy4KCiAgICAgICAgUmVsYXRlZCBndWlkZTogW0VtYmVkZGluZ3NdKC9kb2NzL2d1aWRlcy9lbWJlZGRpbmdzKQogICAgLSBpZDogYXVkaW8KICAgICAgdGl0bGU6IEF1ZGlvCiAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgTGVhcm4gaG93IHRvIHR1cm4gYXVkaW8gaW50byB0ZXh0LgoKICAgICAgICBSZWxhdGVkIGd1aWRlOiBbU3BlZWNoIHRvIHRleHRdKC9kb2NzL2d1aWRlcy9zcGVlY2gtdG8tdGV4dCkKICAgIC0gaWQ6IGZpbGVzCiAgICAgIHRpdGxlOiBGaWxlcwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEZpbGVzIGFyZSB1c2VkIHRvIHVwbG9hZCBkb2N1bWVudHMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGZlYXR1cmVzIGxpa2UgW0ZpbmUtdHVuaW5nXSgvZG9jcy9hcGktcmVmZXJlbmNlL2ZpbmUtdHVuZXMpLgogICAgLSBpZDogZmluZS10dW5lcwogICAgICB0aXRsZTogRmluZS10dW5lcwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIE1hbmFnZSBmaW5lLXR1bmluZyBqb2JzIHRvIHRhaWxvciBhIG1vZGVsIHRvIHlvdXIgc3BlY2lmaWMgdHJhaW5pbmcgZGF0YS4KCiAgICAgICAgUmVsYXRlZCBndWlkZTogW0ZpbmUtdHVuZSBtb2RlbHNdKC9kb2NzL2d1aWRlcy9maW5lLXR1bmluZykKICAgIC0gaWQ6IG1vZGVyYXRpb25zCiAgICAgIHRpdGxlOiBNb2RlcmF0aW9ucwogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdpdmVuIGEgaW5wdXQgdGV4dCwgb3V0cHV0cyBpZiB0aGUgbW9kZWwgY2xhc3NpZmllcyBpdCBhcyB2aW9sYXRpbmcgT3BlbkFJJ3MgY29udGVudCBwb2xpY3kuCgogICAgICAgIFJlbGF0ZWQgZ3VpZGU6IFtNb2RlcmF0aW9uc10oL2RvY3MvZ3VpZGVzL21vZGVyYXRpb24pCiAgICAtIGlkOiBzZWFyY2hlcwogICAgICB0aXRsZTogU2VhcmNoZXMKICAgICAgd2FybmluZzoKICAgICAgICB0aXRsZTogVGhpcyBlbmRwb2ludCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gRGVjZW1iZXIgM3JkLCAyMDIyCiAgICAgICAgbWVzc2FnZTogV2XigJl2ZSBkZXZlbG9wZWQgbmV3IG1ldGhvZHMgd2l0aCBiZXR0ZXIgcGVyZm9ybWFuY2UuIFtMZWFybiBtb3JlXShodHRwczovL2hlbHAub3BlbmFpLmNvbS9lbi9hcnRpY2xlcy82MjcyOTUyLXNlYXJjaC10cmFuc2l0aW9uLWd1aWRlKS4KICAgICAgZGVzY3JpcHRpb246IHwKICAgICAgICBHaXZlbiBhIHF1ZXJ5IGFuZCBhIHNldCBvZiBkb2N1bWVudHMgb3IgbGFiZWxzLCB0aGUgbW9kZWwgcmFua3MgZWFjaCBkb2N1bWVudCBiYXNlZCBvbiBpdHMgc2VtYW50aWMgc2ltaWxhcml0eSB0byB0aGUgcHJvdmlkZWQgcXVlcnkuCgogICAgICAgIFJlbGF0ZWQgZ3VpZGU6IFtTZWFyY2hdKC9kb2NzL2d1aWRlcy9zZWFyY2gpCiAgICAtIGlkOiBjbGFzc2lmaWNhdGlvbnMKICAgICAgdGl0bGU6IENsYXNzaWZpY2F0aW9ucwogICAgICB3YXJuaW5nOgogICAgICAgIHRpdGxlOiBUaGlzIGVuZHBvaW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiBEZWNlbWJlciAzcmQsIDIwMjIKICAgICAgICBtZXNzYWdlOiBXZeKAmXZlIGRldmVsb3BlZCBuZXcgbWV0aG9kcyB3aXRoIGJldHRlciBwZXJmb3JtYW5jZS4gW0xlYXJuIG1vcmVdKGh0dHBzOi8vaGVscC5vcGVuYWkuY29tL2VuL2FydGljbGVzLzYyNzI5NDEtY2xhc3NpZmljYXRpb25zLXRyYW5zaXRpb24tZ3VpZGUpLgogICAgICBkZXNjcmlwdGlvbjogfAogICAgICAgIEdpdmVuIGEgcXVlcnkgYW5kIGEgc2V0IG9mIGxhYmVsZWQgZXhhbXBsZXMsIHRoZSBtb2RlbCB3aWxsIHByZWRpY3QgdGhlIG1vc3QgbGlrZWx5IGxhYmVsIGZvciB0aGUgcXVlcnkuIFVzZWZ1bCBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGFueSBNTCBjbGFzc2lmaWNhdGlvbiBvciB0ZXh0LXRvLWxhYmVsIHRhc2suCgogICAgICAgIFJlbGF0ZWQgZ3VpZGU6IFtDbGFzc2lmaWNhdGlvbl0oL2RvY3MvZ3VpZGVzL2NsYXNzaWZpY2F0aW9ucykKICAgIC0gaWQ6IGFuc3dlcnMKICAgICAgdGl0bGU6IEFuc3dlcnMKICAgICAgd2FybmluZzoKICAgICAgICB0aXRsZTogVGhpcyBlbmRwb2ludCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gRGVjZW1iZXIgM3JkLCAyMDIyCiAgICAgICAgbWVzc2FnZTogV2XigJl2ZSBkZXZlbG9wZWQgbmV3IG1ldGhvZHMgd2l0aCBiZXR0ZXIgcGVyZm9ybWFuY2UuIFtMZWFybiBtb3JlXShodHRwczovL2hlbHAub3BlbmFpLmNvbS9lbi9hcnRpY2xlcy82MjMzNzI4LWFuc3dlcnMtdHJhbnNpdGlvbi1ndWlkZSkuCiAgICAgIGRlc2NyaXB0aW9uOiB8CiAgICAgICAgR2l2ZW4gYSBxdWVzdGlvbiwgYSBzZXQgb2YgZG9jdW1lbnRzLCBhbmQgc29tZSBleGFtcGxlcywgdGhlIEFQSSBnZW5lcmF0ZXMgYW4gYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHNldCBvZiBkb2N1bWVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciBxdWVzdGlvbi1hbnN3ZXJpbmcgYXBwbGljYXRpb25zIG9uIHNvdXJjZXMgb2YgdHJ1dGgsIGxpa2UgY29tcGFueSBkb2N1bWVudGF0aW9uIG9yIGEga25vd2xlZGdlIGJhc2UuCgogICAgICAgIFJlbGF0ZWQgZ3VpZGU6IFtRdWVzdGlvbiBhbnN3ZXJpbmddKC9kb2NzL2d1aWRlcy9hbnN3ZXJzKQogICAgLSBpZDogZW5naW5lcwogICAgICB0aXRsZTogRW5naW5lcwogICAgICBkZXNjcmlwdGlvbjogVGhlc2UgZW5kcG9pbnRzIGRlc2NyaWJlIGFuZCBwcm92aWRlIGFjY2VzcyB0byB0aGUgdmFyaW91cyBlbmdpbmVzIGF2YWlsYWJsZSBpbiB0aGUgQVBJLgogICAgICB3YXJuaW5nOgogICAgICAgIHRpdGxlOiBUaGUgRW5naW5lcyBlbmRwb2ludHMgYXJlIGRlcHJlY2F0ZWQuCiAgICAgICAgbWVzc2FnZTogUGxlYXNlIHVzZSB0aGVpciByZXBsYWNlbWVudCwgW01vZGVsc10oL2RvY3MvYXBpLXJlZmVyZW5jZS9tb2RlbHMpLCBpbnN0ZWFkLiBbTGVhcm4gbW9yZV0oaHR0cHM6Ly9oZWxwLm9wZW5haS5jb20vVE9ETykuCg=="
},
"_type": "JsonSpec"
},
"description": "",
"base_classes": [
"Tool",
"JsonSpec"
]
},
"id": "dndnode_14",
"value": null
},
"selected": false,
"positionAbsolute": {
"x": 664.976178190127,
"y": -61.729227981320975
},
"dragging": false
},
{
"width": 384,
"height": 351,
"id": "dndnode_15",
"type": "genericNode",
"position": {
"x": 1659.6395547893094,
"y": 397.52506741326164
},
"data": {
"type": "JsonAgent",
"node": {
"template": {
"toolkit": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "toolkit",
"type": "BaseToolkit",
"list": false
},
"llm": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "llm",
"type": "BaseLanguageModel",
"list": false
},
"_type": "json_agent"
},
"description": "Construct a json agent from an LLM and tools.",
"base_classes": [
"AgentExecutor"
]
},
"id": "dndnode_15",
"value": null
},
"selected": false,
"positionAbsolute": {
"x": 1659.6395547893094,
"y": 397.52506741326164
},
"dragging": false
},
{
"width": 384,
"height": 673,
"id": "dndnode_17",
"type": "genericNode",
"position": {
"x": 664.5046837368179,
"y": 351.4165918614485
},
"data": {
"type": "OpenAI",
"node": {
"template": {
"cache": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "cache",
"type": "bool",
"list": false
},
"verbose": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "verbose",
"type": "bool",
"list": false
},
"client": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "client",
"type": "Any",
"list": false
},
"model_name": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": "text-davinci-003",
"password": false,
"options": [
"text-davinci-003",
"text-davinci-002",
"text-curie-001",
"text-babbage-001",
"text-ada-001"
],
"name": "model_name",
"type": "str",
"list": true
},
"temperature": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 0.7,
"password": false,
"name": "temperature",
"type": "float",
"list": false
},
"max_tokens": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"value": 256,
"password": true,
"name": "max_tokens",
"type": "int",
"list": false
},
"top_p": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "top_p",
"type": "float",
"list": false
},
"frequency_penalty": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 0,
"password": false,
"name": "frequency_penalty",
"type": "float",
"list": false
},
"presence_penalty": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 0,
"password": false,
"name": "presence_penalty",
"type": "float",
"list": false
},
"n": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "n",
"type": "int",
"list": false
},
"best_of": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 1,
"password": false,
"name": "best_of",
"type": "int",
"list": false
},
"model_kwargs": {
"required": false,
"placeholder": "",
"show": true,
"multiline": false,
"password": false,
"name": "model_kwargs",
"type": "code",
"list": false
},
"openai_api_key": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": true,
"name": "openai_api_key",
"display_name": "OpenAI API Key",
"type": "str",
"list": false
},
"batch_size": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 20,
"password": false,
"name": "batch_size",
"type": "int",
"list": false
},
"request_timeout": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "request_timeout",
"type": "Union[float, Tuple[float, float], NoneType]",
"list": false
},
"logit_bias": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"password": false,
"name": "logit_bias",
"type": "code",
"list": false
},
"max_retries": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": 6,
"password": false,
"name": "max_retries",
"type": "int",
"list": false
},
"streaming": {
"required": false,
"placeholder": "",
"show": false,
"multiline": false,
"value": false,
"password": false,
"name": "streaming",
"type": "bool",
"list": false
},
"_type": "OpenAI"
},
"description": "Generic OpenAI class that uses model name.",
"base_classes": [
"BaseLLM",
"BaseLanguageModel",
"OpenAI",
"BaseOpenAI"
]
},
"id": "dndnode_17",
"value": null
},
"selected": false,
"positionAbsolute": {
"x": 664.5046837368179,
"y": 351.4165918614485
},
"dragging": false
}
],
"edges": [
{
"source": "dndnode_14",
"sourceHandle": "JsonSpec|dndnode_14|Tool|JsonSpec",
"target": "dndnode_13",
"targetHandle": "JsonSpec|spec|dndnode_13",
"className": "animate-pulse",
"id": "reactflow__edge-dndnode_14JsonSpec|dndnode_14|Tool|JsonSpec-dndnode_13JsonSpec|spec|dndnode_13"
},
{
"source": "dndnode_13",
"sourceHandle": "JsonToolkit|dndnode_13|BaseToolkit|JsonToolkit",
"target": "dndnode_15",
"targetHandle": "BaseToolkit|toolkit|dndnode_15",
"className": "animate-pulse",
"id": "reactflow__edge-dndnode_13JsonToolkit|dndnode_13|BaseToolkit|JsonToolkit-dndnode_15BaseToolkit|toolkit|dndnode_15"
},
{
"source": "dndnode_17",
"sourceHandle": "OpenAI|dndnode_17|BaseLLM|BaseLanguageModel|OpenAI|BaseOpenAI",
"target": "dndnode_15",
"targetHandle": "BaseLanguageModel|llm|dndnode_15",
"className": "animate-pulse",
"id": "reactflow__edge-dndnode_17OpenAI|dndnode_17|BaseLLM|BaseLanguageModel|OpenAI|BaseOpenAI-dndnode_15BaseLanguageModel|llm|dndnode_15"
}
],
"viewport": {
"x": -410.91960558261724,
"y": 65.01501314449662,
"zoom": 0.8235910172675747
}
},
"chat": [
{
"message": "What are the required parameters in the request body to the completions endpoint?",
"isSend": true
},
{
"message": "The required parameters in the request body to the completions endpoint are listed in the 'required' key of the 'requestBody' key.",
"isSend": false,
"thought": "\u001b[1m> Entering new JsonAgent chain...\u001b[0m\n\u001b[32;1m\u001b[1;3mAction: json_spec_list_keys\nAction Input: data\u001b[0m\nObservation: \u001b[36;1m\u001b[1;3m['openapi', 'info', 'servers', 'tags', 'paths', 'components', 'x-oaiMeta']\u001b[0m\nThought:\u001b[32;1m\u001b[1;3m I should look at the paths key\nAction: json_spec_list_keys\nAction Input: data[\"paths\"]\u001b[0m\nObservation: \u001b[36;1m\u001b[1;3m['/engines', '/engines/{engine_id}', '/completions', '/chat/completions', '/edits', '/images/generations', '/images/edits', '/images/variations', '/embeddings', '/audio/transcriptions', '/audio/translations', '/engines/{engine_id}/search', '/files', '/files/{file_id}', '/files/{file_id}/content', '/answers', '/classifications', '/fine-tunes', '/fine-tunes/{fine_tune_id}', '/fine-tunes/{fine_tune_id}/cancel', '/fine-tunes/{fine_tune_id}/events', '/models', '/models/{model}', '/moderations']\u001b[0m\nThought:\u001b[32;1m\u001b[1;3m I should look at the '/completions' key\nAction: json_spec_list_keys\nAction Input: data[\"paths\"][\"/completions\"]\u001b[0m\nObservation: \u001b[36;1m\u001b[1;3m['post']\u001b[0m\nThought:\u001b[32;1m\u001b[1;3m I should look at the 'post' key\nAction: json_spec_list_keys\nAction Input: data[\"paths\"][\"/completions\"][\"post\"]\u001b[0m\nObservation: \u001b[36;1m\u001b[1;3m['operationId', 'tags', 'summary', 'requestBody', 'responses', 'x-oaiMeta']\u001b[0m\nThought:\u001b[32;1m\u001b[1;3m I should look at the 'requestBody' key\nAction: json_spec_list_keys\nAction Input: data[\"paths\"][\"/completions\"][\"post\"][\"requestBody\"]\u001b[0m\nObservation: \u001b[36;1m\u001b[1;3m['required', 'content']\u001b[0m\nThought:\u001b[32;1m\u001b[1;3m I now know the final answer\nFinal Answer: The required parameters in the request body to the completions endpoint are listed in the 'required' key of the 'requestBody' key.\u001b[0m\n\n\u001b[1m> Finished chain.\u001b[0m"
}
]
}