@rangertechnologies/ngnxt 2.1.97 → 2.1.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common/http";
4
4
  import * as i2 from "../../../services/form-builder.service";
@@ -7,13 +7,9 @@ import * as i4 from "@angular/forms";
7
7
  export class PropertiesComponent {
8
8
  http;
9
9
  formBuilderService;
10
- // selectedElement: any;
11
- colorWheel;
12
- ctx;
13
10
  formButtonHandler = new EventEmitter();
14
11
  selectedOption = '';
15
12
  selectedElementIndex = -1;
16
- // @Input() selectedElement: any;
17
13
  selectedElementType = '';
18
14
  selectedAlign = 'align-left'; // Add this property
19
15
  selectedStyles = []; // Using array since multiple styles can be selected
@@ -55,7 +51,6 @@ export class PropertiesComponent {
55
51
  return this.selectedElement?.styles?.includes(value) || false;
56
52
  }
57
53
  elementProperties = {
58
- // Add other element types here similarly
59
54
  'Text': {
60
55
  elementProps: [
61
56
  // questionText - Label-follow all element properties
@@ -76,24 +71,24 @@ export class PropertiesComponent {
76
71
  { value: '700', label: '700-Bold' }
77
72
  ] },
78
73
  // { label: 'Size', unit: 'PX', type: 'number', key: 'size' },
79
- { label: 'Align', type: 'align', key: 'textAlign',
80
- options: [
81
- { value: 'left', icon: 'textalign-left' },
82
- { value: 'center', icon: 'align-center' },
83
- { value: 'right', icon: 'align-right' },
84
- { value: 'justifyleft', icon: 'align-justifyleft' },
85
- { value: 'justifyright', icon: 'align-justifyright' }
86
- ] },
87
- { label: 'Style', type: 'style', key: 'styles',
88
- options: [
89
- { value: 'italic', icon: 'italic' },
90
- { value: 'bold', icon: 'bold' },
91
- { value: 'underline', icon: 'underline' },
92
- { value: 'texticon', icon: 'texticon' },
93
- { value: 'capitalize', icon: 'capitalize' },
94
- { value: 'resize', icon: 'resize' }
95
- ] },
96
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' }
74
+ // { label: 'Align', type: 'align', key: 'textAlign',
75
+ // options: [
76
+ // { value: 'left', icon: 'textalign-left' },
77
+ // { value: 'center', icon: 'align-center' },
78
+ // { value: 'right', icon: 'align-right' },
79
+ // { value: 'justifyleft', icon: 'align-justifyleft' },
80
+ // { value: 'justifyright', icon: 'align-justifyright' }
81
+ // ] },
82
+ // { label: 'Style', type: 'style',key: 'styles',
83
+ // options: [
84
+ // { value: 'italic', icon: 'italic' },
85
+ // { value: 'bold', icon: 'bold' },
86
+ // { value: 'underline', icon: 'underline' },
87
+ // { value: 'texticon', icon: 'texticon' },
88
+ // { value: 'capitalize', icon: 'capitalize' },
89
+ // { value: 'resize', icon: 'resize' }
90
+ // ] },
91
+ { label: 'Field Size', type: 'fieldSize', key: 'size' }
97
92
  ],
98
93
  fieldProps: [
99
94
  { label: 'Field Required', type: 'radio' },
@@ -109,21 +104,18 @@ export class PropertiesComponent {
109
104
  { label: 'Place Holder', placeholder: 'Enter Text ', type: 'text', key: 'question' },
110
105
  { label: 'Help Text', placeholder: 'Enter Text ', type: 'text', key: 'helpText' },
111
106
  { label: '', type: 'toggleGroup' },
112
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
107
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
113
108
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
114
109
  ],
115
110
  fieldProps: [
116
111
  { label: 'Field Required', type: 'radio' },
117
112
  { label: 'Default Value', placeholder: 'Enter Text', type: 'text' },
118
113
  {
119
- label: 'Chk Options',
120
- type: 'optionsGroup',
121
- key: 'chkOptions',
122
- options: [
123
- { label: 'Option 1', value: '', type: 'text', key: 'option1' },
124
- ],
125
- addOptionLabel: 'Add Variant', // Text for the plus icon
126
- icon: 'plus' // Icon for adding options
114
+ label: 'Options',
115
+ type: 'checkbox',
116
+ key: 'options',
117
+ addOptionLabel: 'Add Option',
118
+ icon: 'plus'
127
119
  },
128
120
  { label: 'Reference', placeholder: 'Reference Field', type: 'text' },
129
121
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
@@ -136,7 +128,7 @@ export class PropertiesComponent {
136
128
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
137
129
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
138
130
  { label: '', type: 'toggleGroup' },
139
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
131
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
140
132
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
141
133
  ],
142
134
  fieldProps: [
@@ -153,7 +145,7 @@ export class PropertiesComponent {
153
145
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'placeholder' },
154
146
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
155
147
  { label: '', type: 'toggleGroup' },
156
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
148
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
157
149
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
158
150
  ],
159
151
  fieldProps: [
@@ -170,7 +162,7 @@ export class PropertiesComponent {
170
162
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
171
163
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
172
164
  { label: '', type: 'toggleGroup' },
173
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
165
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
174
166
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
175
167
  ],
176
168
  fieldProps: [
@@ -195,7 +187,7 @@ export class PropertiesComponent {
195
187
  { label: 'Archives (ZIP, RAR, Git-hub)', value: 'application/zip,application/x-rar-compressed,application/x-git', extensions: ['.zip', '.rar', '.git'] }
196
188
  ] },
197
189
  { label: '', type: 'toggleGroup' },
198
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
190
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
199
191
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
200
192
  ],
201
193
  fieldProps: [
@@ -212,7 +204,7 @@ export class PropertiesComponent {
212
204
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
213
205
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
214
206
  { label: '', type: 'toggleGroup' },
215
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
207
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
216
208
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
217
209
  ],
218
210
  fieldProps: [
@@ -222,13 +214,14 @@ export class PropertiesComponent {
222
214
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
223
215
  { label: 'Sub Text', placeholder: 'Enter Text', type: 'text' }
224
216
  ]
225
- }, 'TextArea': {
217
+ },
218
+ 'TextArea': {
226
219
  elementProps: [
227
220
  { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'questionText' },
228
221
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
229
222
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
230
223
  { label: '', type: 'toggleGroup' },
231
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
224
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
232
225
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
233
226
  ],
234
227
  fieldProps: [
@@ -238,13 +231,14 @@ export class PropertiesComponent {
238
231
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
239
232
  { label: 'Sub Text', placeholder: 'Enter Text', type: 'text' }
240
233
  ]
241
- }, 'Numbers': {
234
+ },
235
+ 'Numbers': {
242
236
  elementProps: [
243
237
  { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'questionText' },
244
238
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
245
239
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
246
240
  { label: '', type: 'toggleGroup' },
247
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
241
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
248
242
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
249
243
  ],
250
244
  fieldProps: [
@@ -254,39 +248,38 @@ export class PropertiesComponent {
254
248
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
255
249
  { label: 'Sub Text', placeholder: 'Enter Text', type: 'text' }
256
250
  ]
257
- }, 'Dropdown': {
251
+ },
252
+ 'Dropdown': {
258
253
  elementProps: [
259
254
  { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'questionText' },
260
255
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
261
256
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
262
257
  { label: '', type: 'toggleGroup' },
263
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
258
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
264
259
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
265
260
  ],
266
261
  fieldProps: [
267
262
  { label: 'Field Required', type: 'radio' },
268
263
  { label: 'Default Value', placeholder: 'Enter Text', type: 'text' },
269
264
  {
270
- label: 'Chk Options',
271
- type: 'optionsGroup',
272
- key: 'chkOptions',
273
- options: [
274
- { label: 'Option 1', value: '', type: 'text', key: 'option1' },
275
- ],
276
- addOptionLabel: 'Add Variant', // Text for the plus icon
277
- icon: 'plus' // Icon for adding options
265
+ label: 'Options',
266
+ type: 'dropdown',
267
+ key: 'options',
268
+ addOptionLabel: 'Add Variant',
269
+ icon: 'plus'
278
270
  },
279
271
  { label: 'Reference', placeholder: 'Reference Field', type: 'text' },
280
272
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
281
273
  { label: 'Sub Text', placeholder: 'Enter Text', type: 'text' },
282
274
  ]
283
- }, 'Image': {
275
+ },
276
+ 'Image': {
284
277
  elementProps: [
285
278
  { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'questionText' },
286
279
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
287
280
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
288
281
  { label: '', type: 'toggleGroup' },
289
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
282
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
290
283
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
291
284
  ],
292
285
  fieldProps: [
@@ -296,28 +289,25 @@ export class PropertiesComponent {
296
289
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
297
290
  { label: 'Sub Text', placeholder: 'Enter Text', type: 'text' }
298
291
  ]
299
- }, 'Radio': {
292
+ },
293
+ 'Radio': {
300
294
  elementProps: [
301
295
  { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'questionText' },
302
296
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
303
297
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
304
298
  { label: '', type: 'toggleGroup' },
305
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
299
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
306
300
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
307
301
  ],
308
302
  fieldProps: [
309
303
  { label: 'Field Required', type: 'radio' },
310
304
  { label: 'Default Value', placeholder: 'Enter Text', type: 'text' },
311
305
  {
312
- label: 'Radio Options', // Updated label to reflect radio context
313
- type: 'optionsGroup',
314
- key: 'radioOptions', // Updated key for radio context
315
- options: [
316
- { label: 'Option 1', value: '', type: 'text', key: 'option1' },
317
- { label: 'Option 2', value: '', type: 'text', key: 'option2' },
318
- ],
319
- addOptionLabel: 'Add Option', // Updated label for add button
320
- icon: 'plus', // Icon for adding options
306
+ label: 'Options',
307
+ type: 'radio',
308
+ key: 'options',
309
+ addOptionLabel: 'Add Option',
310
+ icon: 'plus'
321
311
  },
322
312
  { label: 'Reference', placeholder: 'Reference Field', type: 'text' },
323
313
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
@@ -330,7 +320,7 @@ export class PropertiesComponent {
330
320
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
331
321
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
332
322
  { label: '', type: 'toggleGroup' },
333
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
323
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
334
324
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
335
325
  ],
336
326
  fieldProps: [
@@ -340,13 +330,14 @@ export class PropertiesComponent {
340
330
  { label: 'Style', placeholder: 'Style JSON', type: 'text' },
341
331
  { label: 'Sub Text', placeholder: 'Enter Text', type: 'text' }
342
332
  ]
343
- }, 'Button': {
333
+ },
334
+ 'Button': {
344
335
  elementProps: [
345
336
  { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'questionText' },
346
337
  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },
347
338
  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText' },
348
339
  { label: '', type: 'toggleGroup' },
349
- { label: 'Field Size', type: 'fieldSize', key: 'fieldSize' },
340
+ { label: 'Field Size', type: 'fieldSize', key: 'size' },
350
341
  { label: 'Error Msg', placeholder: 'Enter Text', type: 'text', key: 'errorMsg' },
351
342
  ],
352
343
  fieldProps: [
@@ -437,7 +428,6 @@ export class PropertiesComponent {
437
428
  addOption(options) {
438
429
  options.push({ label: '', value: '' });
439
430
  }
440
- // Function to remove an option from prop options
441
431
  removeOption(options, index) {
442
432
  options.splice(index, 1);
443
433
  }
@@ -448,17 +438,14 @@ export class PropertiesComponent {
448
438
  this.formButtonHandler.emit(this.formBuilderService.downloadElement());
449
439
  }
450
440
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PropertiesComponent, deps: [{ token: i1.HttpClient }, { token: i2.FormBuilderService }], target: i0.ɵɵFactoryTarget.Component });
451
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PropertiesComponent, selector: "app-properties", inputs: { selectedElementType: "selectedElementType" }, outputs: { formButtonHandler: "formButtonHandler" }, viewQueries: [{ propertyName: "colorWheel", first: true, predicate: ["colorWheel"], descendants: true }], ngImport: i0, template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<!-- properties.component.html -->\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n <div class=\"properties\">\n<!-- Design Header Section -->\n<div class=\"design-header\">\n <h1 class=\"header-title\">Element Properties</h1>\n <div class=\"menu-container\">\n <div class=\"menu-item\" (click)=\"download()\">\n <span >Download</span>\n </div>\n <div class=\"menu-item\">\n <span>Start</span>\n </div>\n <div class=\"menu-item\">\n <span>Path</span>\n </div>\n <div class=\"menu-item\">\n <span>Clone</span>\n </div>\n </div>\n</div>\n\n<!-- properties.component.html -->\n<div class=\"all-properties\">\n <div *ngIf=\"errorMessage\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <!-- Element Properties -->\n <details class=\"first-properties\" open>\n <summary class=\"text-sm \">Elements Properties</summary>\n <div class=\"inner-content\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"flex-items-center\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"label-properties\">\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\"\n type=\"text\"\n [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\"\n (input)=\"updateProperty(prop.key, $event.target.value)\"\n [class.read-only]=\"selectedElement.readOnly\"\n [readonly]=\"selectedElement.readOnly\"\n class=\"text-sm1 \"\n />\n <div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\" class=\"help-text\">\n {{ selectedElement.helpText }}\n </div>\n\n\n <!-- Font Selection -->\n<div *ngIf=\"prop.key === 'font'\" class=\"font-selection\">\n <!-- <label>{{ prop.label }}</label> -->\n <select\n *ngIf=\"prop.type === 'select' && prop.key === 'font'\"\n class=\"font-selection1\"\n [value]=\"selectedElement?.font\"\n (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n</div>\n\n<!-- file -->\n<!-- Add this inside the elementProps loop where other inputs are rendered -->\n<select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\"\n class=\"file \"\n[value]=\"selectedElement[prop.key]\"\n(change)=\"updateProperty(prop.key, $event.target.value)\">\n<option value=\"\">Select file category</option>\n<option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n{{ option.label }}\n</option>\n</select>\n\n<!-- Font Weight Selection -->\n<div *ngIf=\"prop.key === 'fontWeight'\" class=\"font-weight\">\n <!-- <label>{{ prop.label }}</label> -->\n <select\n *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\"\n class=\"font-weight\"\n [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n</div>\n\n \n<!-- Toggle Group -->\n<div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n<div class=\"toggle-item1\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\"/>\n <span class=\"slider\"></span>\n </label>\n</div>\n\n<div class=\"toggle-item2\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedElement?.isHide\"\n (change)=\"onToggleChange('isHide', $event)\"\n />\n <span class=\"slider\"></span>\n </label>\n</div>\n</div>\n\n <!-- Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\"class=\"font-align\">\n <button\n *ngFor=\"let option of prop.options\"\n (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\"\n class=\"align-btn\"\n [title]=\"option.value\"\n >\n <img\n [src]=\"'../assets/icons/' + option.icon + '.svg'\"\n [alt]=\"option.value\"\n class=\"icon-size\"\n />\n </button>\n </div>\n\n\n <div *ngIf=\"prop.key === 'size'\" class=\"size-controls\">\n <label>{{ prop.label }}</label>\n <input\n type=\"number\"\n [value]=\"selectedElement[prop.key]\"\n (input)=\"updateProperty(prop.key, $event.target.value)\"\n class=\"size-input\"\n />\n <span class=\"size-unit\">{{ prop.unit }}</span>\n </div>\n\n\n <div *ngIf=\"prop.type === 'style'\" class=\"font-style\">\n <button\n *ngFor=\"let option of prop.options\"\n (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\"\n class=\"style-btn\"\n [title]=\"option.value\"\n >\n <img\n [src]=\"'../assets/icons/' + option.icon + '.svg'\"\n [alt]=\"option.value\"\n class=\"icon-size\"\n />\n </button>\n </div>\n\n<!-- Field Size Controls -->\n<div *ngIf=\"prop.key === 'fieldSize'\" class=\"field-size-controls\">\n <div class=\"size-group\">\n <label class=\"size-label\">Width</label>\n <div class=\"value-container\">\n <input\n type=\"number\"\n [value]=\"selectedElement?.width\"\n (input)=\"updateProperty('width', $event.target.value)\"\n class=\"size-input\"\n\n />\n\n </div>\n </div>\n</div>\n</div>\n </div>\n </ng-container>\n </div>\n </details>\n\n <!-- Field Elements Properties -->\n<details class=\"second-property\">\n <summary class=\"text-font-medium\">Field Elements Properties</summary>\n <div class=\"space-y-4\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"flex-items-center \">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"input-box-field\">\n <!-- Input Box -->\n <input\n *ngIf=\"prop.type === 'text'\"\n type=\"text\"\n [placeholder]=\"prop.placeholder\"\n class=\"field-input\"\n />\n <!-- Radio Group -->\n<div *ngIf=\"prop.type === 'radio'\" class=\"radio-item\">\n\n\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input\n type=\"radio\"\n [checked]=\"selectedElement.required\"\n (change)=\"onRequiredChange(true)\"\n name=\"required\"\n class=\"radio-input\"\n />\n <label\n class=\"text-label\"\n >\n Required\n </label>\n </div>\n <div class=\"flex-items\">\n <input\n type=\"radio\"\n [checked]=\"!selectedElement.required\"\n (change)=\"onRequiredChange(false)\"\n name=\"required\"\n class=\"radio-input\"\n />\n <label\n class=\"text-sm text-gray-400\"\n >\n Not Required\n </label>\n </div>\n </div>\n</div>\n</div>\n <!-- Chk Options Group -->\n <div *ngIf=\"prop.type === 'optionsGroup'\" class=\"options-container\">\n <div\n *ngFor=\"let option of prop.options; let i = index\"\n class=\"option-items\"\n >\n <!-- Option Input -->\n <input\n type=\"text\"\n [(ngModel)]=\"prop.options[i].label\"\n placeholder=\"Option {{ i + 1 }}\"\n class=\"options\"\n />\n <input\n type=\"text\"\n [(ngModel)]=\"prop.options[i].value\"\n placeholder=\"Value\"\n class=\"values\"\n />\n <!-- Remove Button -->\n <div class=\"remove\">\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(prop.options, i)\"></div>\n </div>\n <!-- Add Button -->\n <button\n type=\"button\"\n class=\"add-btn\"\n (click)=\"addOption(prop.options)\"\n >\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add Variants</span></div>\n </button>\n</div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"design-footer\">\n <button class=\"btn\">Cancel</button>\n <button class=\"btn\" (click)=\"handleButtonClick()\">Save</button>\n </div>\n</details>\n</div>\n</div>\n", styles: [".all-properties{padding:0;margin:-32px -13px 0 0;background-color:#f8fafc;position:relative;top:3px;max-height:549px;overflow-y:auto}.first-properties{padding-top:16px;padding-left:15px}details summary{font-weight:700;color:#1b1b43;cursor:pointer}details[open] summary{padding-bottom:5px;margin-bottom:1rem}label{flex:0 0 120px;color:#b8b8b8;font-size:.875rem;font-weight:500;margin:0;padding:0}input,select{flex:1;background-color:#eaedf1;color:#bebfbf;border-radius:.375rem;padding:.5rem;font-size:.875rem;width:100%;box-sizing:border-box;transition:border-color .2s}input:focus,select:focus{border-color:#1b1b43;outline:none}button{background-color:#eaedf1;color:#6b7280;border:1px solid #D1D5DB;border-radius:.375rem;padding:.5rem;cursor:pointer;transition:all .2s}button:hover{background-color:#e5e7eb}button.selected{background-color:#0b1f34;color:#fff;border-color:#1e90ff}.color-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:50px;height:50px;background-color:transparent;border:none;cursor:pointer}.color-input::-webkit-color-swatch,.color-input::-moz-color-swatch{border-radius:5px;border:none}.inner-content{position:relative;left:30px;width:90%}.label-properties{position:relative;top:-12px;left:-37px}.required-indicator{color:red;margin-left:4px}.toggle-item1{position:relative;left:-74px;width:124px;color:#b8b8b8}.toggle-item2{width:100px;position:relative;top:-44px;left:84px;color:#b8b8b8}.flex-gap-1{display:flex;grid-template-columns:repeat(4,auto)}.help-text,.error-message{font-size:12px;margin-top:4px}.help-text{color:#666}.error-message{color:#ef4444}.read-only{background-color:#f5f5f5;cursor:not-allowed}.font-selection,.font-weight{width:190px}.design-header{padding:17px;background-color:#fff;margin-bottom:2rem}.header-title{font-size:16px;font-weight:500;text-align:center;margin:0 0 20px 5px}.menu-container{display:flex;justify-content:space-between;max-width:800px;margin:0 auto;background-color:#f8f9fa;border-radius:8px}.menu-item{flex:1;text-align:center;padding:7px;cursor:pointer;transition:all .3s ease;border-right:2px solid #e9ecef}.menu-item span{color:#656f7b;font-size:1rem}.menu-container{display:flex;justify-content:space-between;max-width:800px;margin:0 auto;background-color:#f8f9fa;border-radius:8px;padding:.5rem}.menu-item{flex:1;text-align:center;padding:m;cursor:pointer;transition:all .3s ease;border-right:1px solid #e9ecef}.menu-item:last-child{border-right:none}.menu-item:hover{background-color:#e9ecef;border-radius:4px}.menu-item span{color:#495057;font-size:1rem}.switch{position:relative;display:inline-block;width:40px;height:24px;right:-20px;margin:0 8px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:16px;width:16px;left:4px;bottom:4px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(16px)}.font-align{display:flex;gap:2px}.align-btn,.style-btn{width:36px;height:36px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:4px;cursor:pointer;transition:all .2s}.align-btn:hover,.style-btn:hover{background:#e5e7eb}.align-btn.active,.style-btn.active{background:#202e3a;color:#fff;border-color:#4b5563}.align-btn.active img,.style-btn.active img{filter:brightness(0) invert(1)}.icon-size{width:16px;height:16px}.button-group{display:flex;gap:4px;padding:4px;background:#f9fafb;border-radius:6px}.field-size-controls{display:flex;flex-direction:row;position:relative;gap:13px;font-family:Arial,sans-serif}.size-group{display:flex;align-items:center}.size-label{font-size:15px;color:#000}.value-container{display:flex;height:43px;align-items:center;background-color:#f5f5f5;border-radius:11px;position:relative;right:74px}.font-style{display:flex;gap:1px}.size-input{font-size:15px;border:none;background:transparent;width:46px;text-align:center;outline:none}.size-input:focus{outline:none}.unit{font-size:13px;width:22px;color:#00000080}.file-upload-container{position:relative;margin-bottom:1rem}.file-upload-container input[type=file]{margin-top:.5rem}.text-font-medium{padding-left:15px;padding-bottom:20px}.options-container{display:flex;flex-direction:column;gap:.5rem}.option-item{display:flex;align-items:center;gap:1rem}.option-items{display:flex;gap:20px}.options{width:69px}.values{width:49px}.remove{width:34px;border-radius:50px;height:35px;background-color:#f7eff0}.remove img{position:relative;top:6px;left:9px}.add-btn{background:none;border:none;font-size:1rem;cursor:pointer;display:flex;align-items:center;width:328px;position:relative;right:123px;background-color:#f1f4f7}.add-btn:hover{color:#3182ce}.text-lg{border:1px solid gray;width:22px;border-radius:5px}.add-varient{display:flex;gap:13px;position:relative;left:101px}input{border:1px solid #ccc;padding:.5rem;border-radius:.25rem;width:100%}.space-y-4{position:relative;left:28px}.flex-items-center{display:flex;position:relative;top:2px;margin-bottom:28px}.input-box-field{width:207px}.text-sm{height:30px}.radio-item{position:relative;left:-5px}.flex-gap{display:flex;gap:18px}.design-footer{display:flex;justify-content:center;gap:30px;background-color:#f1f4f7}.btn{width:110px;color:#fff;margin-top:20px;margin-bottom:20px;background-color:#a5adbc}.btn:hover{background-color:#2196f3;color:#fff}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
441
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PropertiesComponent, selector: "app-properties", inputs: { selectedElementType: "selectedElementType" }, outputs: { formButtonHandler: "formButtonHandler" }, ngImport: i0, template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<!-- properties.component.html -->\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n <div class=\"properties\">\n\n<!-- Design Header Section -->\n<div class=\"design-header\">\n <h1 class=\"header-title\">Element Properties</h1>\n <!-- AP 25FEB25 - not used -->\n <!-- <div class=\"menu-container\">\n <div class=\"menu-item\" (click)=\"download()\">\n <span >Download</span>\n </div>\n <div class=\"menu-item\">\n <span>Start</span>\n </div>\n <div class=\"menu-item\">\n <span>Path</span>\n </div>\n <div class=\"menu-item\">\n <span>Clone</span>\n </div>\n </div> -->\n</div>\n\n<!-- properties.component.html -->\n<div class=\"all-properties\">\n <div *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</div>\n\n<!-- Element Properties -->\n<details class=\"first-properties\" open>\n <summary class=\"text-sm \">Elements Properties</summary>\n <div class=\"inner-content\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"flex-items-center\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"label-properties\">\n\n<!-- Text Input -->\n<input *ngIf=\"prop.type === 'text'\"\n type=\"text\"\n [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\"\n (input)=\"updateProperty(prop.key, $event.target.value)\"\n [class.read-only]=\"selectedElement.readOnly\"\n [readonly]=\"selectedElement.readOnly\"\n class=\"text-sm1 \"/>\n\n<div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\" class=\"help-text\">{{ selectedElement.helpText }}</div>\n\n<!-- Font Selection -->\n<div *ngIf=\"prop.key === 'font'\" class=\"font-selection\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'font'\" class=\"font-selection1\" [value]=\"selectedElement?.font\"\n (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\"> {{ option }} </option>\n </select>\n</div>\n\n<!-- file -->\n<!-- Add this inside the elementProps loop where other inputs are rendered -->\n<select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" class=\"file\" [value]=\"selectedElement[prop.key]\"\n(change)=\"updateProperty(prop.key, $event.target.value)\">\n<option value=\"\">Select file category</option>\n<option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n</select>\n\n<!-- Font Weight Selection -->\n<div *ngIf=\"prop.key === 'fontWeight'\" class=\"font-weight\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\" class=\"font-weight\" [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n</div>\n \n<!-- Toggle Group -->\n<div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n<div class=\"toggle-item1\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\"/>\n <span class=\"slider\"></span>\n </label>\n</div>\n\n<div class=\"toggle-item2\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isHide\" (change)=\"onToggleChange('isHide', $event)\"/>\n <span class=\"slider\"></span>\n </label>\n</div>\n</div>\n\n<!-- Text Align Buttons -->\n<div *ngIf=\"prop.type === 'align'\"class=\"font-align\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\" \n [class.active]=\"selectedElement?.textAlign === option.value\" class=\"align-btn\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\"/>\n </button>\n</div>\n\n<div *ngIf=\"prop.type === 'style'\" class=\"font-style\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" class=\"style-btn\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\"/>\n </button>\n</div>\n\n<!-- Field Size Controls -->\n <!-- AP 25FEB25 - Change key size -->\n<div *ngIf=\"prop.key === 'size'\" class=\"field-size-controls\">\n <div class=\"size-group\">\n <label class=\"size-label\">Width</label>\n <div class=\"value-container\">\n <input type=\"number\" [value]=\"selectedElement?.size\" (input)=\"updateProperty('size', $event.target.value)\" class=\"size-input\"/>\n </div>\n </div>\n</div>\n\n</div>\n</div>\n</ng-container>\n</div>\n</details>\n\n<!-- Field Elements Properties -->\n<details class=\"second-property\">\n <summary class=\"text-font-medium\">Field Elements Properties</summary>\n <div class=\"space-y-4\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"flex-items-center \">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"input-box-field\">\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\" class=\"field-input\"/>\n\n <!-- Radio Group -->\n<div *ngIf=\"prop.type === 'radio'\" class=\"radio-item\">\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement.required\" (change)=\"onRequiredChange(true)\" name=\"required\" class=\"radio-input\"/>\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement.required\" (change)=\"onRequiredChange(false)\" name=\"required\" class=\"radio-input\"/>\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n</div>\n</div> \n<!-- AP 25FEB25 - handled options -->\n<div *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\" class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].label\" placeholder=\"Option {{ i + 1 }}\" class=\"options\"/>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add Variants</span>\n </div>\n </button>\n</div>\n\n</div>\n</div>\n</ng-container>\n</div>\n<div class=\"design-footer\">\n <button class=\"btn\">Cancel</button>\n <button class=\"btn\" (click)=\"handleButtonClick()\">Save</button>\n</div>\n</details>\n</div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{width:100%;max-width:600px;margin:0 auto;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a}.design-header{display:flex;justify-content:space-between;align-items:center;padding:10px 15px;background:#f4f4f4;border-radius:6px;margin-bottom:15px}.header-title{font-size:18px;font-weight:500;color:#333}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:6px;margin-bottom:10px;padding:10px}.all-properties summary{font-size:16px;font-weight:500;cursor:pointer;padding:5px}.inner-content{padding:10px 0}label{font-size:14px;color:#333;margin-bottom:5px}input[type=text],input[type=number],select{width:100%;padding:8px;font-size:14px;border:1px solid #ccc;border-radius:4px;outline:none;transition:.3s}input[type=text]:focus,input[type=number]:focus,select:focus{border-color:#007bff}button{padding:8px 12px;border:none;border-radius:4px;background:#007bff;color:#fff;font-size:14px;cursor:pointer;transition:.3s}button:hover{background:#0056b3}.toggle-group{display:flex;align-items:center;gap:15px}.toggle-item{display:flex;align-items:center;gap:8px}.switch{position:relative;width:40px;height:20px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:19px;width:19px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(16px)}.radio-item{display:flex;align-items:center;gap:15px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:10px}.options{width:calc(100% - 30px)}.field-size-controls{display:flex;align-items:center;gap:10px}.size-input{width:100px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:15px}.design-footer .btn{background:#007bff;color:#fff;padding:8px 15px;border-radius:4px;transition:.3s}.design-footer .btn:hover{background:#0056b3}@media (max-width: 768px){.properties{max-width:100%;padding:10px}.design-header{flex-direction:column;align-items:flex-start}.toggle-group{flex-direction:column;gap:10px}.field-size-controls{flex-direction:column}.design-footer{flex-direction:column;gap:10px}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
452
442
  }
453
443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PropertiesComponent, decorators: [{
454
444
  type: Component,
455
- args: [{ selector: 'app-properties', template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<!-- properties.component.html -->\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n <div class=\"properties\">\n<!-- Design Header Section -->\n<div class=\"design-header\">\n <h1 class=\"header-title\">Element Properties</h1>\n <div class=\"menu-container\">\n <div class=\"menu-item\" (click)=\"download()\">\n <span >Download</span>\n </div>\n <div class=\"menu-item\">\n <span>Start</span>\n </div>\n <div class=\"menu-item\">\n <span>Path</span>\n </div>\n <div class=\"menu-item\">\n <span>Clone</span>\n </div>\n </div>\n</div>\n\n<!-- properties.component.html -->\n<div class=\"all-properties\">\n <div *ngIf=\"errorMessage\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <!-- Element Properties -->\n <details class=\"first-properties\" open>\n <summary class=\"text-sm \">Elements Properties</summary>\n <div class=\"inner-content\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"flex-items-center\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"label-properties\">\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\"\n type=\"text\"\n [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\"\n (input)=\"updateProperty(prop.key, $event.target.value)\"\n [class.read-only]=\"selectedElement.readOnly\"\n [readonly]=\"selectedElement.readOnly\"\n class=\"text-sm1 \"\n />\n <div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\" class=\"help-text\">\n {{ selectedElement.helpText }}\n </div>\n\n\n <!-- Font Selection -->\n<div *ngIf=\"prop.key === 'font'\" class=\"font-selection\">\n <!-- <label>{{ prop.label }}</label> -->\n <select\n *ngIf=\"prop.type === 'select' && prop.key === 'font'\"\n class=\"font-selection1\"\n [value]=\"selectedElement?.font\"\n (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n</div>\n\n<!-- file -->\n<!-- Add this inside the elementProps loop where other inputs are rendered -->\n<select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\"\n class=\"file \"\n[value]=\"selectedElement[prop.key]\"\n(change)=\"updateProperty(prop.key, $event.target.value)\">\n<option value=\"\">Select file category</option>\n<option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n{{ option.label }}\n</option>\n</select>\n\n<!-- Font Weight Selection -->\n<div *ngIf=\"prop.key === 'fontWeight'\" class=\"font-weight\">\n <!-- <label>{{ prop.label }}</label> -->\n <select\n *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\"\n class=\"font-weight\"\n [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n</div>\n\n \n<!-- Toggle Group -->\n<div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n<div class=\"toggle-item1\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\"/>\n <span class=\"slider\"></span>\n </label>\n</div>\n\n<div class=\"toggle-item2\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedElement?.isHide\"\n (change)=\"onToggleChange('isHide', $event)\"\n />\n <span class=\"slider\"></span>\n </label>\n</div>\n</div>\n\n <!-- Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\"class=\"font-align\">\n <button\n *ngFor=\"let option of prop.options\"\n (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\"\n class=\"align-btn\"\n [title]=\"option.value\"\n >\n <img\n [src]=\"'../assets/icons/' + option.icon + '.svg'\"\n [alt]=\"option.value\"\n class=\"icon-size\"\n />\n </button>\n </div>\n\n\n <div *ngIf=\"prop.key === 'size'\" class=\"size-controls\">\n <label>{{ prop.label }}</label>\n <input\n type=\"number\"\n [value]=\"selectedElement[prop.key]\"\n (input)=\"updateProperty(prop.key, $event.target.value)\"\n class=\"size-input\"\n />\n <span class=\"size-unit\">{{ prop.unit }}</span>\n </div>\n\n\n <div *ngIf=\"prop.type === 'style'\" class=\"font-style\">\n <button\n *ngFor=\"let option of prop.options\"\n (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\"\n class=\"style-btn\"\n [title]=\"option.value\"\n >\n <img\n [src]=\"'../assets/icons/' + option.icon + '.svg'\"\n [alt]=\"option.value\"\n class=\"icon-size\"\n />\n </button>\n </div>\n\n<!-- Field Size Controls -->\n<div *ngIf=\"prop.key === 'fieldSize'\" class=\"field-size-controls\">\n <div class=\"size-group\">\n <label class=\"size-label\">Width</label>\n <div class=\"value-container\">\n <input\n type=\"number\"\n [value]=\"selectedElement?.width\"\n (input)=\"updateProperty('width', $event.target.value)\"\n class=\"size-input\"\n\n />\n\n </div>\n </div>\n</div>\n</div>\n </div>\n </ng-container>\n </div>\n </details>\n\n <!-- Field Elements Properties -->\n<details class=\"second-property\">\n <summary class=\"text-font-medium\">Field Elements Properties</summary>\n <div class=\"space-y-4\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"flex-items-center \">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"input-box-field\">\n <!-- Input Box -->\n <input\n *ngIf=\"prop.type === 'text'\"\n type=\"text\"\n [placeholder]=\"prop.placeholder\"\n class=\"field-input\"\n />\n <!-- Radio Group -->\n<div *ngIf=\"prop.type === 'radio'\" class=\"radio-item\">\n\n\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input\n type=\"radio\"\n [checked]=\"selectedElement.required\"\n (change)=\"onRequiredChange(true)\"\n name=\"required\"\n class=\"radio-input\"\n />\n <label\n class=\"text-label\"\n >\n Required\n </label>\n </div>\n <div class=\"flex-items\">\n <input\n type=\"radio\"\n [checked]=\"!selectedElement.required\"\n (change)=\"onRequiredChange(false)\"\n name=\"required\"\n class=\"radio-input\"\n />\n <label\n class=\"text-sm text-gray-400\"\n >\n Not Required\n </label>\n </div>\n </div>\n</div>\n</div>\n <!-- Chk Options Group -->\n <div *ngIf=\"prop.type === 'optionsGroup'\" class=\"options-container\">\n <div\n *ngFor=\"let option of prop.options; let i = index\"\n class=\"option-items\"\n >\n <!-- Option Input -->\n <input\n type=\"text\"\n [(ngModel)]=\"prop.options[i].label\"\n placeholder=\"Option {{ i + 1 }}\"\n class=\"options\"\n />\n <input\n type=\"text\"\n [(ngModel)]=\"prop.options[i].value\"\n placeholder=\"Value\"\n class=\"values\"\n />\n <!-- Remove Button -->\n <div class=\"remove\">\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(prop.options, i)\"></div>\n </div>\n <!-- Add Button -->\n <button\n type=\"button\"\n class=\"add-btn\"\n (click)=\"addOption(prop.options)\"\n >\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add Variants</span></div>\n </button>\n</div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"design-footer\">\n <button class=\"btn\">Cancel</button>\n <button class=\"btn\" (click)=\"handleButtonClick()\">Save</button>\n </div>\n</details>\n</div>\n</div>\n", styles: [".all-properties{padding:0;margin:-32px -13px 0 0;background-color:#f8fafc;position:relative;top:3px;max-height:549px;overflow-y:auto}.first-properties{padding-top:16px;padding-left:15px}details summary{font-weight:700;color:#1b1b43;cursor:pointer}details[open] summary{padding-bottom:5px;margin-bottom:1rem}label{flex:0 0 120px;color:#b8b8b8;font-size:.875rem;font-weight:500;margin:0;padding:0}input,select{flex:1;background-color:#eaedf1;color:#bebfbf;border-radius:.375rem;padding:.5rem;font-size:.875rem;width:100%;box-sizing:border-box;transition:border-color .2s}input:focus,select:focus{border-color:#1b1b43;outline:none}button{background-color:#eaedf1;color:#6b7280;border:1px solid #D1D5DB;border-radius:.375rem;padding:.5rem;cursor:pointer;transition:all .2s}button:hover{background-color:#e5e7eb}button.selected{background-color:#0b1f34;color:#fff;border-color:#1e90ff}.color-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:50px;height:50px;background-color:transparent;border:none;cursor:pointer}.color-input::-webkit-color-swatch,.color-input::-moz-color-swatch{border-radius:5px;border:none}.inner-content{position:relative;left:30px;width:90%}.label-properties{position:relative;top:-12px;left:-37px}.required-indicator{color:red;margin-left:4px}.toggle-item1{position:relative;left:-74px;width:124px;color:#b8b8b8}.toggle-item2{width:100px;position:relative;top:-44px;left:84px;color:#b8b8b8}.flex-gap-1{display:flex;grid-template-columns:repeat(4,auto)}.help-text,.error-message{font-size:12px;margin-top:4px}.help-text{color:#666}.error-message{color:#ef4444}.read-only{background-color:#f5f5f5;cursor:not-allowed}.font-selection,.font-weight{width:190px}.design-header{padding:17px;background-color:#fff;margin-bottom:2rem}.header-title{font-size:16px;font-weight:500;text-align:center;margin:0 0 20px 5px}.menu-container{display:flex;justify-content:space-between;max-width:800px;margin:0 auto;background-color:#f8f9fa;border-radius:8px}.menu-item{flex:1;text-align:center;padding:7px;cursor:pointer;transition:all .3s ease;border-right:2px solid #e9ecef}.menu-item span{color:#656f7b;font-size:1rem}.menu-container{display:flex;justify-content:space-between;max-width:800px;margin:0 auto;background-color:#f8f9fa;border-radius:8px;padding:.5rem}.menu-item{flex:1;text-align:center;padding:m;cursor:pointer;transition:all .3s ease;border-right:1px solid #e9ecef}.menu-item:last-child{border-right:none}.menu-item:hover{background-color:#e9ecef;border-radius:4px}.menu-item span{color:#495057;font-size:1rem}.switch{position:relative;display:inline-block;width:40px;height:24px;right:-20px;margin:0 8px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:16px;width:16px;left:4px;bottom:4px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(16px)}.font-align{display:flex;gap:2px}.align-btn,.style-btn{width:36px;height:36px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:4px;cursor:pointer;transition:all .2s}.align-btn:hover,.style-btn:hover{background:#e5e7eb}.align-btn.active,.style-btn.active{background:#202e3a;color:#fff;border-color:#4b5563}.align-btn.active img,.style-btn.active img{filter:brightness(0) invert(1)}.icon-size{width:16px;height:16px}.button-group{display:flex;gap:4px;padding:4px;background:#f9fafb;border-radius:6px}.field-size-controls{display:flex;flex-direction:row;position:relative;gap:13px;font-family:Arial,sans-serif}.size-group{display:flex;align-items:center}.size-label{font-size:15px;color:#000}.value-container{display:flex;height:43px;align-items:center;background-color:#f5f5f5;border-radius:11px;position:relative;right:74px}.font-style{display:flex;gap:1px}.size-input{font-size:15px;border:none;background:transparent;width:46px;text-align:center;outline:none}.size-input:focus{outline:none}.unit{font-size:13px;width:22px;color:#00000080}.file-upload-container{position:relative;margin-bottom:1rem}.file-upload-container input[type=file]{margin-top:.5rem}.text-font-medium{padding-left:15px;padding-bottom:20px}.options-container{display:flex;flex-direction:column;gap:.5rem}.option-item{display:flex;align-items:center;gap:1rem}.option-items{display:flex;gap:20px}.options{width:69px}.values{width:49px}.remove{width:34px;border-radius:50px;height:35px;background-color:#f7eff0}.remove img{position:relative;top:6px;left:9px}.add-btn{background:none;border:none;font-size:1rem;cursor:pointer;display:flex;align-items:center;width:328px;position:relative;right:123px;background-color:#f1f4f7}.add-btn:hover{color:#3182ce}.text-lg{border:1px solid gray;width:22px;border-radius:5px}.add-varient{display:flex;gap:13px;position:relative;left:101px}input{border:1px solid #ccc;padding:.5rem;border-radius:.25rem;width:100%}.space-y-4{position:relative;left:28px}.flex-items-center{display:flex;position:relative;top:2px;margin-bottom:28px}.input-box-field{width:207px}.text-sm{height:30px}.radio-item{position:relative;left:-5px}.flex-gap{display:flex;gap:18px}.design-footer{display:flex;justify-content:center;gap:30px;background-color:#f1f4f7}.btn{width:110px;color:#fff;margin-top:20px;margin-bottom:20px;background-color:#a5adbc}.btn:hover{background-color:#2196f3;color:#fff}\n"] }]
456
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.FormBuilderService }], propDecorators: { colorWheel: [{
457
- type: ViewChild,
458
- args: ['colorWheel']
459
- }], formButtonHandler: [{
445
+ args: [{ selector: 'app-properties', template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<!-- properties.component.html -->\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n <div class=\"properties\">\n\n<!-- Design Header Section -->\n<div class=\"design-header\">\n <h1 class=\"header-title\">Element Properties</h1>\n <!-- AP 25FEB25 - not used -->\n <!-- <div class=\"menu-container\">\n <div class=\"menu-item\" (click)=\"download()\">\n <span >Download</span>\n </div>\n <div class=\"menu-item\">\n <span>Start</span>\n </div>\n <div class=\"menu-item\">\n <span>Path</span>\n </div>\n <div class=\"menu-item\">\n <span>Clone</span>\n </div>\n </div> -->\n</div>\n\n<!-- properties.component.html -->\n<div class=\"all-properties\">\n <div *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</div>\n\n<!-- Element Properties -->\n<details class=\"first-properties\" open>\n <summary class=\"text-sm \">Elements Properties</summary>\n <div class=\"inner-content\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"flex-items-center\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"label-properties\">\n\n<!-- Text Input -->\n<input *ngIf=\"prop.type === 'text'\"\n type=\"text\"\n [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\"\n (input)=\"updateProperty(prop.key, $event.target.value)\"\n [class.read-only]=\"selectedElement.readOnly\"\n [readonly]=\"selectedElement.readOnly\"\n class=\"text-sm1 \"/>\n\n<div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\" class=\"help-text\">{{ selectedElement.helpText }}</div>\n\n<!-- Font Selection -->\n<div *ngIf=\"prop.key === 'font'\" class=\"font-selection\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'font'\" class=\"font-selection1\" [value]=\"selectedElement?.font\"\n (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\"> {{ option }} </option>\n </select>\n</div>\n\n<!-- file -->\n<!-- Add this inside the elementProps loop where other inputs are rendered -->\n<select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" class=\"file\" [value]=\"selectedElement[prop.key]\"\n(change)=\"updateProperty(prop.key, $event.target.value)\">\n<option value=\"\">Select file category</option>\n<option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n</select>\n\n<!-- Font Weight Selection -->\n<div *ngIf=\"prop.key === 'fontWeight'\" class=\"font-weight\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\" class=\"font-weight\" [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n</div>\n \n<!-- Toggle Group -->\n<div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n<div class=\"toggle-item1\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\"/>\n <span class=\"slider\"></span>\n </label>\n</div>\n\n<div class=\"toggle-item2\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isHide\" (change)=\"onToggleChange('isHide', $event)\"/>\n <span class=\"slider\"></span>\n </label>\n</div>\n</div>\n\n<!-- Text Align Buttons -->\n<div *ngIf=\"prop.type === 'align'\"class=\"font-align\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\" \n [class.active]=\"selectedElement?.textAlign === option.value\" class=\"align-btn\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\"/>\n </button>\n</div>\n\n<div *ngIf=\"prop.type === 'style'\" class=\"font-style\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" class=\"style-btn\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\"/>\n </button>\n</div>\n\n<!-- Field Size Controls -->\n <!-- AP 25FEB25 - Change key size -->\n<div *ngIf=\"prop.key === 'size'\" class=\"field-size-controls\">\n <div class=\"size-group\">\n <label class=\"size-label\">Width</label>\n <div class=\"value-container\">\n <input type=\"number\" [value]=\"selectedElement?.size\" (input)=\"updateProperty('size', $event.target.value)\" class=\"size-input\"/>\n </div>\n </div>\n</div>\n\n</div>\n</div>\n</ng-container>\n</div>\n</details>\n\n<!-- Field Elements Properties -->\n<details class=\"second-property\">\n <summary class=\"text-font-medium\">Field Elements Properties</summary>\n <div class=\"space-y-4\" *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"flex-items-center \">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <div class=\"input-box-field\">\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\" class=\"field-input\"/>\n\n <!-- Radio Group -->\n<div *ngIf=\"prop.type === 'radio'\" class=\"radio-item\">\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement.required\" (change)=\"onRequiredChange(true)\" name=\"required\" class=\"radio-input\"/>\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement.required\" (change)=\"onRequiredChange(false)\" name=\"required\" class=\"radio-input\"/>\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n</div>\n</div> \n<!-- AP 25FEB25 - handled options -->\n<div *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\" class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].label\" placeholder=\"Option {{ i + 1 }}\" class=\"options\"/>\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add Variants</span>\n </div>\n </button>\n</div>\n\n</div>\n</div>\n</ng-container>\n</div>\n<div class=\"design-footer\">\n <button class=\"btn\">Cancel</button>\n <button class=\"btn\" (click)=\"handleButtonClick()\">Save</button>\n</div>\n</details>\n</div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{width:100%;max-width:600px;margin:0 auto;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a}.design-header{display:flex;justify-content:space-between;align-items:center;padding:10px 15px;background:#f4f4f4;border-radius:6px;margin-bottom:15px}.header-title{font-size:18px;font-weight:500;color:#333}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:6px;margin-bottom:10px;padding:10px}.all-properties summary{font-size:16px;font-weight:500;cursor:pointer;padding:5px}.inner-content{padding:10px 0}label{font-size:14px;color:#333;margin-bottom:5px}input[type=text],input[type=number],select{width:100%;padding:8px;font-size:14px;border:1px solid #ccc;border-radius:4px;outline:none;transition:.3s}input[type=text]:focus,input[type=number]:focus,select:focus{border-color:#007bff}button{padding:8px 12px;border:none;border-radius:4px;background:#007bff;color:#fff;font-size:14px;cursor:pointer;transition:.3s}button:hover{background:#0056b3}.toggle-group{display:flex;align-items:center;gap:15px}.toggle-item{display:flex;align-items:center;gap:8px}.switch{position:relative;width:40px;height:20px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:19px;width:19px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(16px)}.radio-item{display:flex;align-items:center;gap:15px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:10px}.options{width:calc(100% - 30px)}.field-size-controls{display:flex;align-items:center;gap:10px}.size-input{width:100px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:15px}.design-footer .btn{background:#007bff;color:#fff;padding:8px 15px;border-radius:4px;transition:.3s}.design-footer .btn:hover{background:#0056b3}@media (max-width: 768px){.properties{max-width:100%;padding:10px}.design-header{flex-direction:column;align-items:flex-start}.toggle-group{flex-direction:column;gap:10px}.field-size-controls{flex-direction:column}.design-footer{flex-direction:column;gap:10px}}\n"] }]
446
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.FormBuilderService }], propDecorators: { formButtonHandler: [{
460
447
  type: Output
461
448
  }], selectedElementType: [{
462
449
  type: Input
463
450
  }] } });
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUXJILE1BQU0sT0FBTyxtQkFBbUI7SUFnWVY7SUFBeUI7SUEvWDdDLHdCQUF3QjtJQUNDLFVBQVUsQ0FBZ0M7SUFDM0QsR0FBRyxDQUEyQjtJQUM1QixpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRXRELGNBQWMsR0FBVyxFQUFFLENBQUM7SUFFNUIsb0JBQW9CLEdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsaUNBQWlDO0lBQ3hCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQVcsWUFBWSxDQUFDLENBQUUsb0JBQW9CO0lBQzNELGNBQWMsR0FBYSxFQUFFLENBQUMsQ0FBRSxvREFBb0Q7SUFDcEYsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUUxQixlQUFlLEdBQVEsSUFBSSxDQUFDLENBQUUsK0JBQStCO0lBSTdELGNBQWMsQ0FBQyxRQUFnQixFQUFFLEtBQVU7UUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxF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QUFJLENBQUMsZUFBZTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVBLFNBQVMsQ0FBQyxPQUFjO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxpREFBaUQ7SUFDakQsWUFBWSxDQUFDLE9BQWMsRUFBRSxLQUFhO1FBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUUzRSxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO3dHQS9kVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw2UUNWaEMsNm1SQXdSQTs7NEZEOVFhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7Z0hBTUQsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUViLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRSxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBUCAyMkpBTjI1XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS1idWlsZGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJvcGVydGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvcGVydGllcy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydGllc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIHNlbGVjdGVkRWxlbWVudDogYW55O1xuICBAVmlld0NoaWxkKCdjb2xvcldoZWVsJykgY29sb3JXaGVlbDogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIHByaXZhdGUgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIEBPdXRwdXQoKSBmb3JtQnV0dG9uSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyBcblxuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgc2VsZWN0ZWRFbGVtZW50SW5kZXg6IG51bWJlciA9IC0xO1xuICAvLyBASW5wdXQoKSBzZWxlY3RlZEVsZW1lbnQ6IGFueTtcbiAgQElucHV0KCkgc2VsZWN0ZWRFbGVtZW50VHlwZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkQWxpZ246IHN0cmluZyA9ICdhbGlnbi1sZWZ0JzsgIC8vIEFkZCB0aGlzIHByb3BlcnR5XG4gIHNlbGVjdGVkU3R5bGVzOiBzdHJpbmdbXSA9IFtdOyAgLy8gVXNpbmcgYXJyYXkgc2luY2UgbXVsdGlwbGUgc3R5bGVzIGNhbiBiZSBzZWxlY3RlZFxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuXG4gIHNlbGVjdGVkRWxlbWVudDogYW55ID0gbnVsbDsgIC8vIFJlY2VpdmUgdGhlIHNlbGVjdGVkIGVsZW1lbnRcblxuXG5cbiAgb25Ub2dnbGVDaGFuZ2UocHJvcGVydHk6IHN0cmluZywgZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICBjb25zdCB1cGRhdGUgPSB7IFtwcm9wZXJ0eV06IHZhbHVlIH07XG4gICAgICB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS51cGRhdGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHVwZGF0ZSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCBkaXJlY3RseSBmb3IgaW1tZWRpYXRlIFVJIGZlZWRiYWNrXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGFsaWdubWVudCBhbmQgc3R5bGVzIGlmIHN3aXRjaGluZyBlbGVtZW50c1xuICAgIHRoaXMuc2VsZWN0ZWRBbGlnbiA9ICdhbGlnbi1sZWZ0JztcbiAgICB0aGlzLnNlbGVjdGVkU3R5bGVzID0gW107XG5cbiAgICAvLyBGZXRjaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0eXBlXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIHByb3BlcnRpZXMgYXJlIGR5bmFtaWNhbGx5IHVwZGF0ZWRcbiAgICB9XG4gIH1cblxuICBvbkFsaWduU2VsZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnRleHRBbGlnbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG5cbiAgb25TdHlsZVNlbGVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzdHlsZXMgYXJyYXkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyB8fCBbXTtcblxuICAgIC8vIEVuc3VyZSBvbmx5IG9uZSBzdHlsZSBpcyBzZWxlY3RlZCBhdCBhIHRpbWVcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zdHlsZXMgPSBbdmFsdWVdO1xuXG59XG5cblxuICBpc1N0eWxlQWN0aXZlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnN0eWxlcz8uaW5jbHVkZXModmFsdWUpIHx8IGZhbHNlO1xuICB9XG5cblxuICBlbGVtZW50UHJvcGVydGllcyA9IHtcblxuICAgICAgICAvLyBBZGQgb3RoZXIgZWxlbWVudCB0eXBlcyBoZXJlIHNpbWlsYXJseVxuICAgJ1RleHQnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcblxuICAgICAgICAvLyBxdWVzdGlvblRleHQgLSBMYWJlbC1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcblxuICAgICAgICAvLyBxdWVzdGlvbiAtIFBsYWNlaG9sZGVyLWZvbGxvdyBhbGwgZWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgIHsgbGFiZWw6ICdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuXG4gICAgICAgIC8vIGVycm9yTWVzc2FnZSAtIEVycm9yIE1zZy1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQnLCB0eXBlOiAnc2VsZWN0JywgIGtleTogJ2ZvbnQnICxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXSB9LFxuICAgICAgICB7IGxhYmVsOiAnV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsa2V5OiAnZm9udFdlaWdodCcsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdIH0sXG4gICAgICAgIC8vIHsgbGFiZWw6ICdTaXplJywgdW5pdDogJ1BYJywgdHlwZTogJ251bWJlcicsIGtleTogJ3NpemUnICB9LFxuICAgICAgICB7IGxhYmVsOiAnQWxpZ24nLCB0eXBlOiAnYWxpZ24nLCBrZXk6ICd0ZXh0QWxpZ24nLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICdsZWZ0JywgaWNvbjogJ3RleHRhbGlnbi1sZWZ0JyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJ2NlbnRlcicsIGljb246ICdhbGlnbi1jZW50ZXInIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAncmlnaHQnLCBpY29uOiAnYWxpZ24tcmlnaHQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnanVzdGlmeWxlZnQnLCBpY29uOiAnYWxpZ24tanVzdGlmeWxlZnQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnanVzdGlmeXJpZ2h0JywgaWNvbjogJ2FsaWduLWp1c3RpZnlyaWdodCcgfVxuXG4gICAgICAgICAgXSB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCB0eXBlOiAnc3R5bGUnLGtleTogJ3N0eWxlcycsXG5cbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAnaXRhbGljJywgaWNvbjogJ2l0YWxpYycgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICdib2xkJywgaWNvbjogJ2JvbGQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAndW5kZXJsaW5lJywgaWNvbjogJ3VuZGVybGluZScgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICd0ZXh0aWNvbicsIGljb246ICd0ZXh0aWNvbicgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICdjYXBpdGFsaXplJywgaWNvbjogJ2NhcGl0YWxpemUnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAncmVzaXplJywgaWNvbjogJ3Jlc2l6ZScgfVxuXG5cbiAgICAgICAgICBdIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnZmllbGRTaXplJyB9XG5cbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ2RlZmF1bHRWYWx1ZScgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICAnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG4gICAgJ0NoZWNrQm94Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0NoayBPcHRpb25zJyxcbiAgICAgICAgICB0eXBlOiAnb3B0aW9uc0dyb3VwJyxcbiAgICAgICAgICBrZXk6ICdjaGtPcHRpb25zJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnT3B0aW9uIDEnLCB2YWx1ZTogJycsIHR5cGU6ICd0ZXh0Jywga2V5OiAnb3B0aW9uMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkZE9wdGlvbkxhYmVsOiAnQWRkIFZhcmlhbnQnLCAvLyBUZXh0IGZvciB0aGUgcGx1cyBpY29uXG4gICAgICAgICAgaWNvbjogJ3BsdXMnIC8vIEljb24gZm9yIGFkZGluZyBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0NhbGVuZGFyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgLCBrZXk6ICdxdWVzdGlvbid9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuICAgICdUaW1lJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdsYWJlbCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3BsYWNlaG9sZGVyJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ2ZpZWxkU2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG4gICAgJ0VtYWlsJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgLCBrZXk6ICdxdWVzdGlvbid9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuICAgICAgJ0ZpbGUnOiB7XG4gICAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuXG4gICAgICAgICAgeyBsYWJlbDogJ1N1cHBvcnQgVHlwZScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdzdXBwb3J0VHlwZScsIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJbWFnZXMgKEpQRUcsIFBORywgR0lGKScsIHZhbHVlOiAnaW1hZ2UvKicsIGV4dGVuc2lvbnM6IFsnLmpwZycsJy5qcGVnJywnLnBuZycsJy5naWYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0F1ZGlvIChNUDMsIFdBViwgQUlGRiknLCB2YWx1ZTogJ2F1ZGlvLyonLCBleHRlbnNpb25zOiBbJy5tcDMnLCcud2F2JywnLmFpZmYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1ZpZGVvIChNUDQsIEFWSSwgSEVWQyknLCB2YWx1ZTogJ3ZpZGVvLyonLCBleHRlbnNpb25zOiBbJy5tcDQnLCcuYXZpJywnLmhldmMnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0RvY3VtZW50cyAoRE9DLCBET0NYLCBQUFQsIFBERiknLCB2YWx1ZTogJ2FwcGxpY2F0aW9uL3BkZixhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLCBleHRlbnNpb25zOiBbJy5kb2MnLCcuZG9jeCcsJy5wcHQnLCcucGRmJ10gfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdFeGVjdXRhYmxlcyAoRVhFLCBCQUQsIFNIKScsIHZhbHVlOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkLGFwcGxpY2F0aW9uL3gtc2gnLCBleHRlbnNpb25zOiBbJy5leGUnLCcuYmFkJywnLnNoJ10gfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdBcmNoaXZlcyAoWklQLCBSQVIsIEdpdC1odWIpJywgdmFsdWU6ICdhcHBsaWNhdGlvbi96aXAsYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCxhcHBsaWNhdGlvbi94LWdpdCcsIGV4dGVuc2lvbnM6IFsnLnppcCcsJy5yYXInLCcuZ2l0J10gfVxuICAgICAgICAgIF19LFxuICAgICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnZmllbGRTaXplJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTXNnJyB9LFxuICAgICAgICBdLFxuICAgICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgICdMaXN0Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgLCBrZXk6ICdxdWVzdGlvbid9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LCAnVGV4dEFyZWEnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ2ZpZWxkU2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycsIGtleTogJ3JlcXVpcmVkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZGVmYXVsdFZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9XG4gICAgICBdXG4gICAgfSwnTnVtYmVycyc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncXVlc3Rpb24nfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnZmllbGRTaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2Vycm9yTXNnJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9XG4gICAgICBdXG4gICAgfSwnRHJvcGRvd24nOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ2ZpZWxkU2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQ2hrIE9wdGlvbnMnLFxuICAgICAgICAgIHR5cGU6ICdvcHRpb25zR3JvdXAnLFxuICAgICAgICAgIGtleTogJ2Noa09wdGlvbnMnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdPcHRpb24gMScsIHZhbHVlOiAnJywgdHlwZTogJ3RleHQnLCBrZXk6ICdvcHRpb24xJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRkT3B0aW9uTGFiZWw6ICdBZGQgVmFyaWFudCcsIC8vIFRleHQgZm9yIHRoZSBwbHVzIGljb25cbiAgICAgICAgICBpY29uOiAncGx1cycgLy8gSWNvbiBmb3IgYWRkaW5nIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcblxuICAgICAgXVxuICAgIH0sJ0ltYWdlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgLCBrZXk6ICdxdWVzdGlvbid9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LCdSYWRpbyc6IHtcbiAgZWxlbWVudFByb3BzOiBbXG4gICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNc2cnIH0sXG4gIF0sXG4gIGZpZWxkUHJvcHM6IFtcbiAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1JhZGlvIE9wdGlvbnMnLCAvLyBVcGRhdGVkIGxhYmVsIHRvIHJlZmxlY3QgcmFkaW8gY29udGV4dFxuICAgICAgdHlwZTogJ29wdGlvbnNHcm91cCcsXG4gICAgICBrZXk6ICdyYWRpb09wdGlvbnMnLCAvLyBVcGRhdGVkIGtleSBmb3IgcmFkaW8gY29udGV4dFxuICAgICAgb3B0aW9uczogW1xuICAgICAgICB7IGxhYmVsOiAnT3B0aW9uIDEnLCB2YWx1ZTogJycsIHR5cGU6ICd0ZXh0Jywga2V5OiAnb3B0aW9uMScgfSxcbiAgICAgICAgeyBsYWJlbDogJ09wdGlvbiAyJywgdmFsdWU6ICcnLCB0eXBlOiAndGV4dCcsIGtleTogJ29wdGlvbjInIH0sXG4gICAgICBdLFxuICAgICAgYWRkT3B0aW9uTGFiZWw6ICdBZGQgT3B0aW9uJywgLy8gVXBkYXRlZCBsYWJlbCBmb3IgYWRkIGJ1dHRvblxuICAgICAgaWNvbjogJ3BsdXMnLCAvLyBJY29uIGZvciBhZGRpbmcgb3B0aW9uc1xuICAgIH0sXG4gICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnIH0sXG4gICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gIF1cbn1cbiwnQm9vayc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncXVlc3Rpb24nfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnZmllbGRTaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2Vycm9yTXNnJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9XG4gICAgICBdXG4gICAgfSwnQnV0dG9uJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgLCBrZXk6ICdxdWVzdGlvbid9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdmaWVsZFNpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxwcml2YXRlIGZvcm1CdWlsZGVyU2VydmljZTogRm9ybUJ1aWxkZXJTZXJ2aWNlKSB7fVxuXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2VsZWN0ZWRFbGVtZW50JC5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCA9IGluZGV4O1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgdmFsaWRhdGVJbnB1dCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZSA9PT0gJ2xhYmVsJyB8fCB0eXBlID09PSAncGxhY2Vob2xkZXInKSB7XG4gICAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWjAtOVxcc10qJC87XG4gICAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ09ubHkgbGV0dGVycyBhbmQgbnVtYmVycyBhcmUgYWxsb3dlZCc7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHVwZGF0ZVByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgaWYgKGtleSA9PT0gJ3F1ZXN0aW9uVGV4dCcgfHwga2V5ID09PSAncXVlc3Rpb24nKSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUlucHV0KHZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdmb250V2VpZ2h0Jykge1xuICAgICAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIG51bWJlciB2YWx1ZSBmcm9tIHRoZSBvcHRpb25cbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLScpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3N0eWxlcycpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0eWxlcyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyB8fCBbXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnY2FwaXRhbGl6ZScgfHwgdmFsdWUgPT09ICdsb3dlcmNhc2UnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcHBvc2l0ZSBjYXNlIGlmIGl0IGV4aXN0c1xuICAgICAgICAgIGNvbnN0IG9wcG9zaXRlU3R5bGUgPSB2YWx1ZSA9PT0gJ2NhcGl0YWxpemUnID8gJ2xvd2VyY2FzZScgOiAnY2FwaXRhbGl6ZSc7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRTdHlsZXMgPSBjdXJyZW50U3R5bGVzLmZpbHRlcihzID0+IHMgIT09IG9wcG9zaXRlU3R5bGUpO1xuICAgICAgICAgIHZhbHVlID0gY3VycmVudFN0eWxlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICAgID8gZmlsdGVyZWRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gdmFsdWUpXG4gICAgICAgICAgICA6IFsuLi5maWx0ZXJlZFN0eWxlcywgdmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRvZ2dsZSBvdGhlciBzdHlsZXNcbiAgICAgICAgICB2YWx1ZSA9IGN1cnJlbnRTdHlsZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgICA/IGN1cnJlbnRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gdmFsdWUpXG4gICAgICAgICAgICA6IFsuLi5jdXJyZW50U3R5bGVzLCB2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlID0geyBba2V5XTogdmFsdWUgfTtcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCwgdXBkYXRlKTtcblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgZm9udCBhbmQgZm9udCB3ZWlnaHRcbiAgICAgIGlmIChrZXkgPT09ICdmb250Jykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5mb250ID0gdmFsdWU7IC8vIERpcmVjdGx5IHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCdzIGZvbnQgcHJvcGVydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIG9uUmVxdWlyZWRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgYXN0ZXJpc2tzIGZpcnN0XG4gICAgICBsZXQgbGFiZWwgPSB0aGlzLnNlbGVjdGVkRWxlbWVudC5sYWJlbC5yZXBsYWNlKC9cXHMqXFwqKyQvLCAnJyk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgbGFiZWwgPSBgJHtsYWJlbH0gKmA7IC8vIEFkZCBzaW5nbGUgYXN0ZXJpc2tcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eSgncmVxdWlyZWQnLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXNbdGhpcy5zZWxlY3RlZEVsZW1lbnQudHlwZV07XG4gIH1cbiAgXG4gICBhZGRPcHRpb24ob3B0aW9uczogYW55W10pIHtcbiAgICBvcHRpb25zLnB1c2goeyBsYWJlbDogJycsIHZhbHVlOiAnJyB9KTtcbiAgfVxuICAvLyBGdW5jdGlvbiB0byByZW1vdmUgYW4gb3B0aW9uIGZyb20gcHJvcCBvcHRpb25zXG4gIHJlbW92ZU9wdGlvbihvcHRpb25zOiBhbnlbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIG9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuICBkb3dubG9hZCgpIHtcbiAgICBjb25zb2xlLmxvZygnUXVlc3Rpb24gQm9vazonLCB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5kb3dubG9hZEVsZW1lbnQoKSk7XG5cbiAgfVxuICBoYW5kbGVCdXR0b25DbGljaygpe1xuICAgIHRoaXMuZm9ybUJ1dHRvbkhhbmRsZXIuZW1pdCh0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5kb3dubG9hZEVsZW1lbnQoKSk7XG4gIH1cblxufVxuIiwiPCEtLSBBUCAyMkpBTjI1IC0gRmllbGQgYW5kIEVsZW1lbnQgUHJvcGVydGllcyAtLT5cbjwhLS0gcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCAtLT5cbiAgPGxpbmsgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAmZGlzcGxheT1zd2FwXCIgcmVsPVwic3R5bGVzaGVldFwiPlxuICA8ZGl2IGNsYXNzPVwicHJvcGVydGllc1wiPlxuPCEtLSBEZXNpZ24gSGVhZGVyIFNlY3Rpb24gLS0+XG48ZGl2IGNsYXNzPVwiZGVzaWduLWhlYWRlclwiPlxuICA8aDEgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5FbGVtZW50IFByb3BlcnRpZXM8L2gxPlxuICA8ZGl2IGNsYXNzPVwibWVudS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtXCIgKGNsaWNrKT1cImRvd25sb2FkKClcIj5cbiAgICAgIDxzcGFuID5Eb3dubG9hZDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtXCI+XG4gICAgICA8c3Bhbj5TdGFydDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtXCI+XG4gICAgICA8c3Bhbj5QYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW1cIj5cbiAgICAgIDxzcGFuPkNsb25lPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIHByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwgLS0+XG48ZGl2IGNsYXNzPVwiYWxsLXByb3BlcnRpZXNcIj5cbiAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxuICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwhLS0gRWxlbWVudCBQcm9wZXJ0aWVzIC0tPlxuICA8ZGV0YWlscyBjbGFzcz1cImZpcnN0LXByb3BlcnRpZXNcIiBvcGVuPlxuICAgIDxzdW1tYXJ5IGNsYXNzPVwidGV4dC1zbSBcIj5FbGVtZW50cyBQcm9wZXJ0aWVzPC9zdW1tYXJ5PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jb250ZW50XCIgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmVsZW1lbnRQcm9wc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXByb3BlcnRpZXNcIj5cbiAgICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RleHQnXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVQcm9wZXJ0eShwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgW2NsYXNzLnJlYWQtb25seV09XCJzZWxlY3RlZEVsZW1lbnQucmVhZE9ubHlcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20xIFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdoZWxwVGV4dCcgJiYgc2VsZWN0ZWRFbGVtZW50LmhlbHBUZXh0XCIgY2xhc3M9XCJoZWxwLXRleHRcIj5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRFbGVtZW50LmhlbHBUZXh0IH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICA8IS0tIEZvbnQgU2VsZWN0aW9uIC0tPlxuPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnZm9udCdcIiBjbGFzcz1cImZvbnQtc2VsZWN0aW9uXCI+XG4gIDwhLS0gPGxhYmVsPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPiAtLT5cbiAgPHNlbGVjdFxuICAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcC5rZXkgPT09ICdmb250J1wiXG4gICAgY2xhc3M9XCJmb250LXNlbGVjdGlvbjFcIlxuICAgIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmZvbnRcIlxuICAgIChjaGFuZ2UpPVwidXBkYXRlUHJvcGVydHkoJ2ZvbnQnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICB7eyBvcHRpb24gfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG48L2Rpdj5cblxuPCEtLSBmaWxlIC0tPlxuPCEtLSBBZGQgdGhpcyBpbnNpZGUgdGhlIGVsZW1lbnRQcm9wcyBsb29wIHdoZXJlIG90aGVyIGlucHV0cyBhcmUgcmVuZGVyZWQgLS0+XG48c2VsZWN0ICpuZ0lmPVwicHJvcC50eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wLmtleSA9PT0gJ3N1cHBvcnRUeXBlJ1wiXG4gY2xhc3M9XCJmaWxlIFwiXG5bdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4oY2hhbmdlKT1cInVwZGF0ZVByb3BlcnR5KHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBmaWxlIGNhdGVnb3J5PC9vcHRpb24+XG48b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxue3sgb3B0aW9uLmxhYmVsIH19XG48L29wdGlvbj5cbjwvc2VsZWN0PlxuXG48IS0tIEZvbnQgV2VpZ2h0IFNlbGVjdGlvbiAtLT5cbjxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2ZvbnRXZWlnaHQnXCIgY2xhc3M9XCJmb250LXdlaWdodFwiPlxuICA8IS0tIDxsYWJlbD57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD4gLS0+XG4gIDxzZWxlY3RcbiAgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnICYmIHByb3Aua2V5ID09PSAnZm9udFdlaWdodCdcIlxuICAgIGNsYXNzPVwiZm9udC13ZWlnaHRcIlxuICAgIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmZvbnRXZWlnaHRcIlxuICAgIChjaGFuZ2UpPVwidXBkYXRlUHJvcGVydHkoJ2ZvbnRXZWlnaHQnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG48L2Rpdj5cblxuICAgICAgICAgIFxuPCEtLSBUb2dnbGUgR3JvdXAgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAndG9nZ2xlR3JvdXAnXCIgY2xhc3M9XCJ0b2dnbGUtZ3JvdXBcIj5cbjxkaXYgY2xhc3M9XCJ0b2dnbGUtaXRlbTFcIj5cbiAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5SZWFkIE9ubHk8L3NwYW4+XG4gIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxuICAgIDxpbnB1dCAgdHlwZT1cImNoZWNrYm94XCIvPlxuICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyXCI+PC9zcGFuPlxuICA8L2xhYmVsPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJ0b2dnbGUtaXRlbTJcIj5cbiAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5JcyBIaWRlPC9zcGFuPlxuICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQ/LmlzSGlkZVwiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlQ2hhbmdlKCdpc0hpZGUnLCAkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyXCI+PC9zcGFuPlxuICA8L2xhYmVsPlxuPC9kaXY+XG48L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBUZXh0IEFsaWduIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnYWxpZ24nXCJjbGFzcz1cImZvbnQtYWxpZ25cIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BbGlnblNlbGVjdChvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkRWxlbWVudD8udGV4dEFsaWduID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxpZ24tYnRuXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiJy4uL2Fzc2V0cy9pY29ucy8nICsgb3B0aW9uLmljb24gKyAnLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgW2FsdF09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLXNpemVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnc2l6ZSdcIiBjbGFzcz1cInNpemUtY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgPGxhYmVsPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVByb3BlcnR5KHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzaXplLWlucHV0XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaXplLXVuaXRcIj57eyBwcm9wLnVuaXQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnc3R5bGUnXCIgIGNsYXNzPVwiZm9udC1zdHlsZVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0eWxlU2VsZWN0KG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNTdHlsZUFjdGl2ZShvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0eWxlLWJ0blwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cIicuLi9hc3NldHMvaWNvbnMvJyArIG9wdGlvbi5pY29uICsgJy5zdmcnXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1zaXplXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG48IS0tIEZpZWxkIFNpemUgQ29udHJvbHMgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmaWVsZFNpemUnXCIgY2xhc3M9XCJmaWVsZC1zaXplLWNvbnRyb2xzXCI+XG4gIDxkaXYgY2xhc3M9XCJzaXplLWdyb3VwXCI+XG4gICAgPGxhYmVsICBjbGFzcz1cInNpemUtbGFiZWxcIj5XaWR0aDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cInZhbHVlLWNvbnRhaW5lclwiPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py53aWR0aFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkoJ3dpZHRoJywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgY2xhc3M9XCJzaXplLWlucHV0XCJcblxuICAgIC8+XG5cbiAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kZXRhaWxzPlxuXG4gIDwhLS0gRmllbGQgRWxlbWVudHMgUHJvcGVydGllcyAtLT5cbjxkZXRhaWxzIGNsYXNzPVwic2Vjb25kLXByb3BlcnR5XCI+XG4gIDxzdW1tYXJ5IGNsYXNzPVwidGV4dC1mb250LW1lZGl1bVwiPkZpZWxkIEVsZW1lbnRzIFByb3BlcnRpZXM8L3N1bW1hcnk+XG4gIDxkaXYgY2xhc3M9XCJzcGFjZS15LTRcIiAqbmdJZj1cImdldFByb3BlcnRpZXMoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmZpZWxkUHJvcHNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWl0ZW1zLWNlbnRlciBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbVwiPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LWZpZWxkXCI+XG4gICAgICAgICAgPCEtLSBJbnB1dCBCb3ggLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RleHQnXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPCEtLSBSYWRpbyBHcm91cCAtLT5cbjxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdyYWRpbydcIiBjbGFzcz1cInJhZGlvLWl0ZW1cIj5cblxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2l6ZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1nYXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1pdGVtc1wiPlxuICAgICAgPGlucHV0XG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50LnJlcXVpcmVkXCJcbiAgICAgIChjaGFuZ2UpPVwib25SZXF1aXJlZENoYW5nZSh0cnVlKVwiXG4gICAgICBuYW1lPVwicmVxdWlyZWRcIlxuICAgICAgY2xhc3M9XCJyYWRpby1pbnB1dFwiXG4gICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cInRleHQtbGFiZWxcIlxuICAgICAgPlxuICAgICAgICBSZXF1aXJlZFxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1pdGVtc1wiPlxuICAgICAgPGlucHV0XG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgW2NoZWNrZWRdPVwiIXNlbGVjdGVkRWxlbWVudC5yZXF1aXJlZFwiXG4gICAgICAoY2hhbmdlKT1cIm9uUmVxdWlyZWRDaGFuZ2UoZmFsc2UpXCJcbiAgICAgIG5hbWU9XCJyZXF1aXJlZFwiXG4gICAgICBjbGFzcz1cInJhZGlvLWlucHV0XCJcbiAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCJcbiAgICAgID5cbiAgICAgICAgTm90IFJlcXVpcmVkXG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPC9kaXY+XG4gPCEtLSBDaGsgT3B0aW9ucyBHcm91cCAtLT5cbiA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnb3B0aW9uc0dyb3VwJ1wiIGNsYXNzPVwib3B0aW9ucy1jb250YWluZXJcIj5cbiAgPGRpdlxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICBjbGFzcz1cIm9wdGlvbi1pdGVtc1wiXG4gID5cbiAgICA8IS0tIE9wdGlvbiBJbnB1dCAtLT5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFsobmdNb2RlbCldPVwicHJvcC5vcHRpb25zW2ldLmxhYmVsXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uIHt7IGkgKyAxIH19XCJcbiAgICAgIGNsYXNzPVwib3B0aW9uc1wiXG4gICAgLz5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFsobmdNb2RlbCldPVwicHJvcC5vcHRpb25zW2ldLnZhbHVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiVmFsdWVcIlxuICAgICAgY2xhc3M9XCJ2YWx1ZXNcIlxuICAgIC8+XG4gICAgPCEtLSBSZW1vdmUgQnV0dG9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyZW1vdmVcIj5cbiAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKHByb3Aub3B0aW9ucywgaSlcIj48L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gQWRkIEJ1dHRvbiAtLT5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYWRkLWJ0blwiXG4gICAgKGNsaWNrKT1cImFkZE9wdGlvbihwcm9wLm9wdGlvbnMpXCJcbiAgPlxuICA8ZGl2IGNsYXNzPVwiYWRkLXZhcmllbnRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtbGdcIj4rPC9zcGFuPlxuICAgIDxzcGFuPkFkZCBWYXJpYW50czwvc3Bhbj48L2Rpdj5cbiAgPC9idXR0b24+XG48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkZXNpZ24tZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2RldGFpbHM+XG48L2Rpdj5cbjwvZGl2PlxuIl19
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRMUcsTUFBTSxPQUFPLG1CQUFtQjtJQTBYVjtJQUF5QjtJQXhYbkMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN0RCxjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQzVCLG9CQUFvQixHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQVcsWUFBWSxDQUFDLENBQUUsb0JBQW9CO0lBQzNELGNBQWMsR0FBYSxFQUFFLENBQUMsQ0FBRSxvREFBb0Q7SUFDcEYsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixlQUFlLEdBQVEsSUFBSSxDQUFDLENBQUUsK0JBQStCO0lBRTdELGNBQWMsQ0FBQyxRQUFnQixFQUFFLEtBQVU7UUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9C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eEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBRTNFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7d0dBM2RVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLG1LQ1ZoQyxnbU9Ba0xBOzs0RkR4S2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjtnSEFNaEIsaUJBQWlCO3NCQUExQixNQUFNO2dCQUdFLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFQIDIySkFOMjVcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLWJ1aWxkZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wcm9wZXJ0aWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9wZXJ0aWVzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAT3V0cHV0KCkgZm9ybUJ1dHRvbkhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgXG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRFbGVtZW50SW5kZXg6IG51bWJlciA9IC0xO1xuICBASW5wdXQoKSBzZWxlY3RlZEVsZW1lbnRUeXBlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRBbGlnbjogc3RyaW5nID0gJ2FsaWduLWxlZnQnOyAgLy8gQWRkIHRoaXMgcHJvcGVydHlcbiAgc2VsZWN0ZWRTdHlsZXM6IHN0cmluZ1tdID0gW107ICAvLyBVc2luZyBhcnJheSBzaW5jZSBtdWx0aXBsZSBzdHlsZXMgY2FuIGJlIHNlbGVjdGVkXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkRWxlbWVudDogYW55ID0gbnVsbDsgIC8vIFJlY2VpdmUgdGhlIHNlbGVjdGVkIGVsZW1lbnRcblxuICBvblRvZ2dsZUNoYW5nZShwcm9wZXJ0eTogc3RyaW5nLCBldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHsgW3Byb3BlcnR5XTogdmFsdWUgfTtcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCwgdXBkYXRlKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBlbGVtZW50IGRpcmVjdGx5IGZvciBpbW1lZGlhdGUgVUkgZmVlZGJhY2tcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGFsaWdubWVudCBhbmQgc3R5bGVzIGlmIHN3aXRjaGluZyBlbGVtZW50c1xuICAgIHRoaXMuc2VsZWN0ZWRBbGlnbiA9ICdhbGlnbi1sZWZ0JztcbiAgICB0aGlzLnNlbGVjdGVkU3R5bGVzID0gW107XG5cbiAgICAvLyBGZXRjaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0eXBlXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIHByb3BlcnRpZXMgYXJlIGR5bmFtaWNhbGx5IHVwZGF0ZWRcbiAgICB9XG4gIH1cblxuICBvbkFsaWduU2VsZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnRleHRBbGlnbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU3R5bGVTZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIEluaXRpYWxpemUgc3R5bGVzIGFycmF5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zdHlsZXMgPSB0aGlzLnNlbGVjdGVkRWxlbWVudC5zdHlsZXMgfHwgW107XG5cbiAgICAvLyBFbnN1cmUgb25seSBvbmUgc3R5bGUgaXMgc2VsZWN0ZWQgYXQgYSB0aW1lXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzID0gW3ZhbHVlXTtcblxufVxuXG4gIGlzU3R5bGVBY3RpdmUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRWxlbWVudD8uc3R5bGVzPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2U7XG4gIH1cblxuICBlbGVtZW50UHJvcGVydGllcyA9IHtcblxuICAgJ1RleHQnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcblxuICAgICAgICAvLyBxdWVzdGlvblRleHQgLSBMYWJlbC1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcblxuICAgICAgICAvLyBxdWVzdGlvbiAtIFBsYWNlaG9sZGVyLWZvbGxvdyBhbGwgZWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgIHsgbGFiZWw6ICdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuXG4gICAgICAgIC8vIGVycm9yTWVzc2FnZSAtIEVycm9yIE1zZy1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQnLCB0eXBlOiAnc2VsZWN0JywgIGtleTogJ2ZvbnQnICxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXSB9LFxuICAgICAgICB7IGxhYmVsOiAnV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsa2V5OiAnZm9udFdlaWdodCcsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdIH0sXG4gICAgICAgIC8vIHsgbGFiZWw6ICdTaXplJywgdW5pdDogJ1BYJywgdHlwZTogJ251bWJlcicsIGtleTogJ3NpemUnICB9LFxuICAgICAgICAvLyB7IGxhYmVsOiAnQWxpZ24nLCB0eXBlOiAnYWxpZ24nLCBrZXk6ICd0ZXh0QWxpZ24nLFxuICAgICAgICAvLyAgIG9wdGlvbnM6IFtcbiAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdsZWZ0JywgaWNvbjogJ3RleHRhbGlnbi1sZWZ0JyB9LFxuICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ2NlbnRlcicsIGljb246ICdhbGlnbi1jZW50ZXInIH0sXG4gICAgICAgIC8vICAgICB7IHZhbHVlOiAncmlnaHQnLCBpY29uOiAnYWxpZ24tcmlnaHQnIH0sXG4gICAgICAgIC8vICAgICB7IHZhbHVlOiAnanVzdGlmeWxlZnQnLCBpY29uOiAnYWxpZ24tanVzdGlmeWxlZnQnIH0sXG4gICAgICAgIC8vICAgICB7IHZhbHVlOiAnanVzdGlmeXJpZ2h0JywgaWNvbjogJ2FsaWduLWp1c3RpZnlyaWdodCcgfVxuXG4gICAgICAgIC8vICAgXSB9LFxuICAgICAgICAvLyB7IGxhYmVsOiAnU3R5bGUnLCB0eXBlOiAnc3R5bGUnLGtleTogJ3N0eWxlcycsXG5cbiAgICAgICAgLy8gICBvcHRpb25zOiBbXG4gICAgICAgIC8vICAgICB7IHZhbHVlOiAnaXRhbGljJywgaWNvbjogJ2l0YWxpYycgfSxcbiAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdib2xkJywgaWNvbjogJ2JvbGQnIH0sXG4gICAgICAgIC8vICAgICB7IHZhbHVlOiAndW5kZXJsaW5lJywgaWNvbjogJ3VuZGVybGluZScgfSxcbiAgICAgICAgLy8gICAgIHsgdmFsdWU6ICd0ZXh0aWNvbicsIGljb246ICd0ZXh0aWNvbicgfSxcbiAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdjYXBpdGFsaXplJywgaWNvbjogJ2NhcGl0YWxpemUnIH0sXG4gICAgICAgIC8vICAgICB7IHZhbHVlOiAncmVzaXplJywgaWNvbjogJ3Jlc2l6ZScgfVxuXG5cbiAgICAgICAgLy8gICBdIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfVxuXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdkZWZhdWx0VmFsdWUnICB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAgJywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuICAgICdDaGVja0JveCc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcgLCBrZXk6ICdxdWVzdGlvbid9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnT3B0aW9ucycsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JywgXG4gICAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgICAgYWRkT3B0aW9uTGFiZWw6ICdBZGQgT3B0aW9uJyxcbiAgICAgICAgICBpY29uOiAncGx1cydcbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnQ2FsZW5kYXInOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ1RpbWUnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ2xhYmVsJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncGxhY2Vob2xkZXInfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnRW1haWwnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0ZpbGUnOiB7XG4gICAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuXG4gICAgICAgICAgeyBsYWJlbDogJ1N1cHBvcnQgVHlwZScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdzdXBwb3J0VHlwZScsIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJbWFnZXMgKEpQRUcsIFBORywgR0lGKScsIHZhbHVlOiAnaW1hZ2UvKicsIGV4dGVuc2lvbnM6IFsnLmpwZycsJy5qcGVnJywnLnBuZycsJy5naWYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0F1ZGlvIChNUDMsIFdBViwgQUlGRiknLCB2YWx1ZTogJ2F1ZGlvLyonLCBleHRlbnNpb25zOiBbJy5tcDMnLCcud2F2JywnLmFpZmYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1ZpZGVvIChNUDQsIEFWSSwgSEVWQyknLCB2YWx1ZTogJ3ZpZGVvLyonLCBleHRlbnNpb25zOiBbJy5tcDQnLCcuYXZpJywnLmhldmMnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0RvY3VtZW50cyAoRE9DLCBET0NYLCBQUFQsIFBERiknLCB2YWx1ZTogJ2FwcGxpY2F0aW9uL3BkZixhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLCBleHRlbnNpb25zOiBbJy5kb2MnLCcuZG9jeCcsJy5wcHQnLCcucGRmJ10gfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdFeGVjdXRhYmxlcyAoRVhFLCBCQUQsIFNIKScsIHZhbHVlOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkLGFwcGxpY2F0aW9uL3gtc2gnLCBleHRlbnNpb25zOiBbJy5leGUnLCcuYmFkJywnLnNoJ10gfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdBcmNoaXZlcyAoWklQLCBSQVIsIEdpdC1odWIpJywgdmFsdWU6ICdhcHBsaWNhdGlvbi96aXAsYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCxhcHBsaWNhdGlvbi94LWdpdCcsIGV4dGVuc2lvbnM6IFsnLnppcCcsJy5yYXInLCcuZ2l0J10gfVxuICAgICAgICAgIF19LFxuICAgICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0xpc3QnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LCBcbiAgICBcbiAgICAnVGV4dEFyZWEnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nLCBrZXk6ICdyZXF1aXJlZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXG4gICAgJ051bWJlcnMnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyAsIGtleTogJ3F1ZXN0aW9uJ30sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAnZXJyb3JNc2cnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFxuICAgICdEcm9wZG93bic6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncXVlc3Rpb24nfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnT3B0aW9ucycsXG4gICAgICAgICAgdHlwZTogJ2Ryb3Bkb3duJyxcbiAgICAgICAgICBrZXk6ICdvcHRpb25zJywgXG4gICAgICAgICAgYWRkT3B0aW9uTGFiZWw6ICdBZGQgVmFyaWFudCcsXG4gICAgICAgICAgaWNvbjogJ3BsdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG5cbiAgICAgIF1cbiAgICB9LFxuICAgIFxuICAgICdJbWFnZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncXVlc3Rpb24nfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXG4gICAgJ1JhZGlvJzoge1xuICBlbGVtZW50UHJvcHM6IFtcbiAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJyB9LFxuICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNc2cnIH0sXG4gIF0sXG4gIGZpZWxkUHJvcHM6IFtcbiAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ09wdGlvbnMnLFxuICAgICAgdHlwZTogJ3JhZGlvJywgXG4gICAgICBrZXk6ICdvcHRpb25zJyxcbiAgICAgIGFkZE9wdGlvbkxhYmVsOiAnQWRkIE9wdGlvbicsXG4gICAgICBpY29uOiAncGx1cydcbiAgICB9LFxuICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICBdXG4gICAgfSxcbiAgICBcbiAgICAnQm9vayc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncXVlc3Rpb24nfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXG4gICAgJ0J1dHRvbic6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsa2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnICwga2V5OiAncXVlc3Rpb24nfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyxrZXk6ICdlcnJvck1zZycgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LHByaXZhdGUgZm9ybUJ1aWxkZXJTZXJ2aWNlOiBGb3JtQnVpbGRlclNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2VsZWN0ZWRFbGVtZW50JC5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCA9IGluZGV4O1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH0pOyAgICBcbiAgfVxuXG4gIHZhbGlkYXRlSW5wdXQodmFsdWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGUgPT09ICdsYWJlbCcgfHwgdHlwZSA9PT0gJ3BsYWNlaG9sZGVyJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlcXHNdKiQvO1xuICAgICAgaWYgKCFyZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdPbmx5IGxldHRlcnMgYW5kIG51bWJlcnMgYXJlIGFsbG93ZWQnO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB1cGRhdGVQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgIGlmIChrZXkgPT09ICdxdWVzdGlvblRleHQnIHx8IGtleSA9PT0gJ3F1ZXN0aW9uJykge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVJbnB1dCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnZm9udFdlaWdodCcpIHtcbiAgICAgICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBudW1iZXIgdmFsdWUgZnJvbSB0aGUgb3B0aW9uXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJy0nKVswXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3N0eWxlcycpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0eWxlcyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyB8fCBbXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnY2FwaXRhbGl6ZScgfHwgdmFsdWUgPT09ICdsb3dlcmNhc2UnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcHBvc2l0ZSBjYXNlIGlmIGl0IGV4aXN0c1xuICAgICAgICAgIGNvbnN0IG9wcG9zaXRlU3R5bGUgPSB2YWx1ZSA9PT0gJ2NhcGl0YWxpemUnID8gJ2xvd2VyY2FzZScgOiAnY2FwaXRhbGl6ZSc7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRTdHlsZXMgPSBjdXJyZW50U3R5bGVzLmZpbHRlcihzID0+IHMgIT09IG9wcG9zaXRlU3R5bGUpO1xuICAgICAgICAgIHZhbHVlID0gY3VycmVudFN0eWxlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICAgID8gZmlsdGVyZWRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gdmFsdWUpXG4gICAgICAgICAgICA6IFsuLi5maWx0ZXJlZFN0eWxlcywgdmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRvZ2dsZSBvdGhlciBzdHlsZXNcbiAgICAgICAgICB2YWx1ZSA9IGN1cnJlbnRTdHlsZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgICA/IGN1cnJlbnRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gdmFsdWUpXG4gICAgICAgICAgICA6IFsuLi5jdXJyZW50U3R5bGVzLCB2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlID0geyBba2V5XTogdmFsdWUgfTtcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCwgdXBkYXRlKTtcblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgZm9udCBhbmQgZm9udCB3ZWlnaHRcbiAgICAgIGlmIChrZXkgPT09ICdmb250Jykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5mb250ID0gdmFsdWU7IC8vIERpcmVjdGx5IHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCdzIGZvbnQgcHJvcGVydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVpcmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGFzdGVyaXNrcyBmaXJzdFxuICAgICAgbGV0IGxhYmVsID0gdGhpcy5zZWxlY3RlZEVsZW1lbnQubGFiZWwucmVwbGFjZSgvXFxzKlxcKiskLywgJycpO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGxhYmVsID0gYCR7bGFiZWx9ICpgOyAvLyBBZGQgc2luZ2xlIGFzdGVyaXNrXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVByb3BlcnR5KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkoJ3JlcXVpcmVkJywgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXNbdGhpcy5zZWxlY3RlZEVsZW1lbnQudHlwZV07XG4gIH1cbiAgXG4gIGFkZE9wdGlvbihvcHRpb25zOiBhbnlbXSkge1xuICAgIG9wdGlvbnMucHVzaCh7IGxhYmVsOiAnJywgdmFsdWU6ICcnIH0pOyBcbiAgfVxuXG4gIHJlbW92ZU9wdGlvbihvcHRpb25zOiBhbnlbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIG9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSAgXG5cbiAgZG93bmxvYWQoKSB7XG4gICAgY29uc29sZS5sb2coJ1F1ZXN0aW9uIEJvb2s6JywgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZG93bmxvYWRFbGVtZW50KCkpO1xuXG4gIH1cblxuICBoYW5kbGVCdXR0b25DbGljaygpe1xuICAgIHRoaXMuZm9ybUJ1dHRvbkhhbmRsZXIuZW1pdCh0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5kb3dubG9hZEVsZW1lbnQoKSk7XG4gIH1cblxufVxuIiwiPCEtLSBBUCAyMkpBTjI1IC0gRmllbGQgYW5kIEVsZW1lbnQgUHJvcGVydGllcyAtLT5cbjwhLS0gcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCAtLT5cbiAgPGxpbmsgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAmZGlzcGxheT1zd2FwXCIgcmVsPVwic3R5bGVzaGVldFwiPlxuICA8ZGl2IGNsYXNzPVwicHJvcGVydGllc1wiPlxuXG48IS0tIERlc2lnbiBIZWFkZXIgU2VjdGlvbiAtLT5cbjxkaXYgY2xhc3M9XCJkZXNpZ24taGVhZGVyXCI+XG4gIDxoMSBjbGFzcz1cImhlYWRlci10aXRsZVwiPkVsZW1lbnQgUHJvcGVydGllczwvaDE+XG4gIDwhLS0gQVAgMjVGRUIyNSAtIG5vdCB1c2VkIC0tPlxuICA8IS0tIDxkaXYgY2xhc3M9XCJtZW51LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW1cIiAoY2xpY2spPVwiZG93bmxvYWQoKVwiPlxuICAgICAgPHNwYW4gPkRvd25sb2FkPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW1cIj5cbiAgICAgIDxzcGFuPlN0YXJ0PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW1cIj5cbiAgICAgIDxzcGFuPlBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbVwiPlxuICAgICAgPHNwYW4+Q2xvbmU8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cbjwvZGl2PlxuXG48IS0tIHByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwgLS0+XG48ZGl2IGNsYXNzPVwiYWxsLXByb3BlcnRpZXNcIj5cbiAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvZGl2PlxuXG48IS0tIEVsZW1lbnQgUHJvcGVydGllcyAtLT5cbjxkZXRhaWxzIGNsYXNzPVwiZmlyc3QtcHJvcGVydGllc1wiIG9wZW4+XG4gIDxzdW1tYXJ5IGNsYXNzPVwidGV4dC1zbSBcIj5FbGVtZW50cyBQcm9wZXJ0aWVzPC9zdW1tYXJ5PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jb250ZW50XCIgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmVsZW1lbnRQcm9wc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXByb3BlcnRpZXNcIj5cblxuPCEtLSBUZXh0IElucHV0IC0tPlxuPGlucHV0ICpuZ0lmPVwicHJvcC50eXBlID09PSAndGV4dCdcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIlxuICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVByb3BlcnR5KHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICBbY2xhc3MucmVhZC1vbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwic2VsZWN0ZWRFbGVtZW50LnJlYWRPbmx5XCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbTEgXCIvPlxuXG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdoZWxwVGV4dCcgJiYgc2VsZWN0ZWRFbGVtZW50LmhlbHBUZXh0XCIgY2xhc3M9XCJoZWxwLXRleHRcIj57eyBzZWxlY3RlZEVsZW1lbnQuaGVscFRleHQgfX08L2Rpdj5cblxuPCEtLSBGb250IFNlbGVjdGlvbiAtLT5cbjxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2ZvbnQnXCIgY2xhc3M9XCJmb250LXNlbGVjdGlvblwiPlxuICA8IS0tIDxsYWJlbD57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD4gLS0+XG4gIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnICYmIHByb3Aua2V5ID09PSAnZm9udCdcIiBjbGFzcz1cImZvbnQtc2VsZWN0aW9uMVwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmZvbnRcIlxuICAgIChjaGFuZ2UpPVwidXBkYXRlUHJvcGVydHkoJ2ZvbnQnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+IHt7IG9wdGlvbiB9fSA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG48L2Rpdj5cblxuPCEtLSBmaWxlIC0tPlxuPCEtLSBBZGQgdGhpcyBpbnNpZGUgdGhlIGVsZW1lbnRQcm9wcyBsb29wIHdoZXJlIG90aGVyIGlucHV0cyBhcmUgcmVuZGVyZWQgLS0+XG48c2VsZWN0ICpuZ0lmPVwicHJvcC50eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wLmtleSA9PT0gJ3N1cHBvcnRUeXBlJ1wiIGNsYXNzPVwiZmlsZVwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldXCJcbihjaGFuZ2UpPVwidXBkYXRlUHJvcGVydHkocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCI+XG48b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IGZpbGUgY2F0ZWdvcnk8L29wdGlvbj5cbjxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+IHt7IG9wdGlvbi5sYWJlbCB9fSA8L29wdGlvbj5cbjwvc2VsZWN0PlxuXG48IS0tIEZvbnQgV2VpZ2h0IFNlbGVjdGlvbiAtLT5cbjxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2ZvbnRXZWlnaHQnXCIgY2xhc3M9XCJmb250LXdlaWdodFwiPlxuICA8IS0tIDxsYWJlbD57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD4gLS0+XG4gIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnICYmIHByb3Aua2V5ID09PSAnZm9udFdlaWdodCdcIiBjbGFzcz1cImZvbnQtd2VpZ2h0XCIgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudD8uZm9udFdlaWdodFwiXG4gICAgKGNoYW5nZSk9XCJ1cGRhdGVQcm9wZXJ0eSgnZm9udFdlaWdodCcsICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj4ge3sgb3B0aW9uLmxhYmVsIH19IDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cbjwvZGl2PlxuICAgICAgICBcbjwhLS0gVG9nZ2xlIEdyb3VwIC0tPlxuPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RvZ2dsZUdyb3VwJ1wiIGNsYXNzPVwidG9nZ2xlLWdyb3VwXCI+XG48ZGl2IGNsYXNzPVwidG9nZ2xlLWl0ZW0xXCI+XG4gIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWxhYmVsXCI+UmVhZCBPbmx5PC9zcGFuPlxuICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cbiAgICA8aW5wdXQgIHR5cGU9XCJjaGVja2JveFwiLz5cbiAgICA8c3BhbiBjbGFzcz1cInNsaWRlclwiPjwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidG9nZ2xlLWl0ZW0yXCI+XG4gIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWxhYmVsXCI+SXMgSGlkZTwvc3Bhbj5cbiAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInNlbGVjdGVkRWxlbWVudD8uaXNIaWRlXCIgKGNoYW5nZSk9XCJvblRvZ2dsZUNoYW5nZSgnaXNIaWRlJywgJGV2ZW50KVwiLz5cbiAgICA8c3BhbiBjbGFzcz1cInNsaWRlclwiPjwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gVGV4dCBBbGlnbiBCdXR0b25zIC0tPlxuPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ2FsaWduJ1wiY2xhc3M9XCJmb250LWFsaWduXCI+XG4gPGJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIChjbGljayk9XCJvbkFsaWduU2VsZWN0KG9wdGlvbi52YWx1ZSlcIiBcbiAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnRleHRBbGlnbiA9PT0gb3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJhbGlnbi1idG5cIiBbdGl0bGVdPVwib3B0aW9uLnZhbHVlXCI+XG4gIDxpbWcgW3NyY109XCInLi4vYXNzZXRzL2ljb25zLycgKyBvcHRpb24uaWNvbiArICcuc3ZnJ1wiIFthbHRdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJpY29uLXNpemVcIi8+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzdHlsZSdcIiAgY2xhc3M9XCJmb250LXN0eWxlXCI+XG4gIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiAoY2xpY2spPVwib25TdHlsZVNlbGVjdChvcHRpb24udmFsdWUpXCJcbiAgW2NsYXNzLmFjdGl2ZV09XCJpc1N0eWxlQWN0aXZlKG9wdGlvbi52YWx1ZSlcIiBjbGFzcz1cInN0eWxlLWJ0blwiIFt0aXRsZV09XCJvcHRpb24udmFsdWVcIj5cbiAgIDxpbWcgW3NyY109XCInLi4vYXNzZXRzL2ljb25zLycgKyBvcHRpb24uaWNvbiArICcuc3ZnJ1wiIFthbHRdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJpY29uLXNpemVcIi8+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjwhLS0gRmllbGQgU2l6ZSBDb250cm9scyAtLT5cbiA8IS0tIEFQIDI1RkVCMjUgLSBDaGFuZ2Uga2V5IHNpemUgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdzaXplJ1wiIGNsYXNzPVwiZmllbGQtc2l6ZS1jb250cm9sc1wiPlxuICA8ZGl2IGNsYXNzPVwic2l6ZS1ncm91cFwiPlxuICAgIDxsYWJlbCAgY2xhc3M9XCJzaXplLWxhYmVsXCI+V2lkdGg8L2xhYmVsPlxuICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZS1jb250YWluZXJcIj5cbiAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnNpemVcIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkoJ3NpemUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIGNsYXNzPVwic2l6ZS1pbnB1dFwiLz5cbiAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwvZGl2PlxuPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPC9kZXRhaWxzPlxuXG48IS0tIEZpZWxkIEVsZW1lbnRzIFByb3BlcnRpZXMgLS0+XG48ZGV0YWlscyBjbGFzcz1cInNlY29uZC1wcm9wZXJ0eVwiPlxuICA8c3VtbWFyeSBjbGFzcz1cInRleHQtZm9udC1tZWRpdW1cIj5GaWVsZCBFbGVtZW50cyBQcm9wZXJ0aWVzPC9zdW1tYXJ5PlxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS00XCIgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5maWVsZFByb3BzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1pdGVtcy1jZW50ZXIgXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc21cIj57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveC1maWVsZFwiPlxuICAgICAgICAgIDwhLS0gSW5wdXQgQm94IC0tPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RleHQnXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwicHJvcC5wbGFjZWhvbGRlclwiIGNsYXNzPVwiZmllbGQtaW5wdXRcIi8+XG5cbiAgICAgICAgICA8IS0tIFJhZGlvIEdyb3VwIC0tPlxuPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiIGNsYXNzPVwicmFkaW8taXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwic2l6ZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1nYXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1pdGVtc1wiPlxuICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtjaGVja2VkXT1cInNlbGVjdGVkRWxlbWVudC5yZXF1aXJlZFwiIChjaGFuZ2UpPVwib25SZXF1aXJlZENoYW5nZSh0cnVlKVwiIG5hbWU9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmFkaW8taW5wdXRcIi8+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+IFJlcXVpcmVkIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtaXRlbXNcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbY2hlY2tlZF09XCIhc2VsZWN0ZWRFbGVtZW50LnJlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKGZhbHNlKVwiIG5hbWU9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmFkaW8taW5wdXRcIi8+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj4gTm90IFJlcXVpcmVkIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48L2Rpdj4gXG48IS0tIEFQIDI1RkVCMjUgLSBoYW5kbGVkIG9wdGlvbnMgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nIHx8IHByb3AudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wLnR5cGUgPT09ICdyYWRpbycgJiYgcHJvcC5rZXkgPT09ICdvcHRpb25zJ1wiIGNsYXNzPVwib3B0aW9ucy1jb250YWluZXJcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV07IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm9wdGlvbi1pdGVtc1wiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVtpXS5sYWJlbFwiIHBsYWNlaG9sZGVyPVwiT3B0aW9uIHt7IGkgKyAxIH19XCIgY2xhc3M9XCJvcHRpb25zXCIvPlxuICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL1RyYXNoLnN2Z1wiIChjbGljayk9XCJyZW1vdmVPcHRpb24oc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XSwgaSlcIj5cbiAgPC9kaXY+XG4gIDxidXR0b24gKGNsaWNrKT1cImFkZE9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJhZGQtdmFyaWVudFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnXCI+Kzwvc3Bhbj5cbiAgICAgIDxzcGFuPkFkZCBWYXJpYW50czwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPC9kaXY+XG48L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZGVzaWduLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG5cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cImhhbmRsZUJ1dHRvbkNsaWNrKClcIj5TYXZlPC9idXR0b24+XG48L2Rpdj5cbjwvZGV0YWlscz5cbjwvZGl2PlxuPC9kaXY+XG4iXX0=