ngx-scandoc 0.0.1 → 1.0.1
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.
- package/core/app.worker.d.ts +1 -0
- package/core/components/components.module.d.ts +8 -0
- package/core/components/webcam/domain/webcam-image.d.ts +35 -0
- package/core/components/webcam/domain/webcam-init-error.d.ts +4 -0
- package/core/components/webcam/domain/webcam-mirror-properties.d.ts +3 -0
- package/core/components/webcam/util/webcam.util.d.ts +8 -0
- package/core/components/webcam/webcam/webcam.component.d.ts +202 -0
- package/core/components/webcam/webcam.module.d.ts +9 -0
- package/core/pipes/pipes.module.d.ts +7 -0
- package/core/pipes/safeResourceUrl.pipe.d.ts +10 -0
- package/core/shared/material.module.d.ts +28 -0
- package/dialogs/components/blank/blank.component.d.ts +17 -0
- package/dialogs/components/confirm/confirm.component.d.ts +30 -0
- package/dialogs/components/loading/loading.component.d.ts +5 -0
- package/dialogs/components/scan-mobile/scan-mobile.component.d.ts +16 -0
- package/dialogs/components/scan-profile/scan-profile.component.d.ts +124 -0
- package/dialogs/components/scan-selfie/scan-selfie.component.d.ts +83 -0
- package/dialogs/dialogs.core.provider.d.ts +18 -0
- package/dialogs/dialogs.module.d.ts +21 -0
- package/esm2020/core/app.worker.mjs +236 -0
- package/esm2020/core/components/components.module.mjs +18 -0
- package/esm2020/core/components/webcam/domain/webcam-image.mjs +58 -0
- package/esm2020/core/components/webcam/domain/webcam-init-error.mjs +3 -0
- package/esm2020/core/components/webcam/domain/webcam-mirror-properties.mjs +3 -0
- package/esm2020/core/components/webcam/util/webcam.util.mjs +48 -0
- package/esm2020/core/components/webcam/webcam/webcam.component.mjs +861 -0
- package/esm2020/core/components/webcam/webcam.module.mjs +22 -0
- package/esm2020/core/pipes/pipes.module.mjs +19 -0
- package/esm2020/core/pipes/safeResourceUrl.pipe.mjs +20 -0
- package/esm2020/core/shared/material.module.mjs +162 -0
- package/esm2020/dialogs/components/blank/blank.component.mjs +47 -0
- package/esm2020/dialogs/components/confirm/confirm.component.mjs +53 -0
- package/esm2020/dialogs/components/loading/loading.component.mjs +12 -0
- package/esm2020/dialogs/components/scan-mobile/scan-mobile.component.mjs +43 -0
- package/esm2020/dialogs/components/scan-profile/scan-profile.component.mjs +756 -0
- package/esm2020/dialogs/components/scan-selfie/scan-selfie.component.mjs +392 -0
- package/esm2020/dialogs/dialogs.core.provider.mjs +100 -0
- package/esm2020/dialogs/dialogs.module.mjs +89 -0
- package/esm2020/forms/form.module.mjs +87 -0
- package/esm2020/forms/types/avatar.type.mjs +53 -0
- package/esm2020/forms/types/profile.image.type.mjs +54 -0
- package/esm2020/forms/types/title.type.mjs +60 -0
- package/esm2020/lib/ngx-scandoc.module.mjs +28 -11
- package/esm2020/providers/auth.provider.mjs +57 -0
- package/esm2020/providers/interceptor.provider.mjs +61 -0
- package/esm2020/providers/scan.form.mjs +386 -0
- package/esm2020/providers/scan.provider.mjs +490 -0
- package/esm2020/providers/translation.provider.mjs +50 -0
- package/esm2020/providers/webrtc.provider.mjs +58 -0
- package/esm2020/public-api.mjs +22 -4
- package/fesm2015/ngx-scandoc.mjs +4178 -32
- package/fesm2015/ngx-scandoc.mjs.map +1 -1
- package/fesm2020/ngx-scandoc.mjs +4154 -32
- package/fesm2020/ngx-scandoc.mjs.map +1 -1
- package/forms/form.module.d.ts +18 -0
- package/forms/types/avatar.type.d.ts +14 -0
- package/forms/types/profile.image.type.d.ts +14 -0
- package/forms/types/title.type.d.ts +12 -0
- package/lib/ngx-scandoc.module.d.ts +20 -2
- package/package.json +6 -2
- package/providers/auth.provider.d.ts +21 -0
- package/providers/interceptor.provider.d.ts +13 -0
- package/providers/scan.form.d.ts +13 -0
- package/providers/scan.provider.d.ts +239 -0
- package/providers/translation.provider.d.ts +9 -0
- package/providers/webrtc.provider.d.ts +11 -0
- package/public-api.d.ts +21 -3
- package/esm2020/lib/ngx-scandoc.component.mjs +0 -22
- package/esm2020/lib/ngx-scandoc.service.mjs +0 -14
- package/lib/ngx-scandoc.component.d.ts +0 -8
- package/lib/ngx-scandoc.service.d.ts +0 -6
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./translation.provider";
|
|
4
|
+
import * as i2 from "./scan.provider";
|
|
5
|
+
export class ScanFieldsProvider {
|
|
6
|
+
constructor(translate, provider) {
|
|
7
|
+
this.translate = translate;
|
|
8
|
+
this.provider = provider;
|
|
9
|
+
}
|
|
10
|
+
update() {
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
fieldGroupClassName: 'px-16',
|
|
14
|
+
fieldGroup: [
|
|
15
|
+
{
|
|
16
|
+
wrappers: [],
|
|
17
|
+
type: 'checkbox',
|
|
18
|
+
key: 'profile',
|
|
19
|
+
class: 'checkbox ',
|
|
20
|
+
defaultValue: true,
|
|
21
|
+
templateOptions: {
|
|
22
|
+
label: 'form.scan.document.update.profile',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
wrappers: [],
|
|
27
|
+
type: 'checkbox',
|
|
28
|
+
class: 'checkbox ',
|
|
29
|
+
key: 'document',
|
|
30
|
+
defaultValue: true,
|
|
31
|
+
templateOptions: {
|
|
32
|
+
label: 'form.scan.document.update.document',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
wrappers: [],
|
|
37
|
+
type: 'checkbox',
|
|
38
|
+
class: 'checkbox ',
|
|
39
|
+
key: 'attachment',
|
|
40
|
+
defaultValue: true,
|
|
41
|
+
templateOptions: {
|
|
42
|
+
label: 'form.scan.document.update.attachment',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
].map((item) => this.translate.forms(item)),
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
document() {
|
|
50
|
+
return [
|
|
51
|
+
{
|
|
52
|
+
className: 'w-200-p',
|
|
53
|
+
fieldGroupClassName: 'form-flex-row border-card profile-details',
|
|
54
|
+
fieldGroup: [
|
|
55
|
+
{
|
|
56
|
+
className: 'card-group',
|
|
57
|
+
fieldGroupClassName: 'wraper',
|
|
58
|
+
fieldGroup: [
|
|
59
|
+
{
|
|
60
|
+
type: 'title',
|
|
61
|
+
templateOptions: {
|
|
62
|
+
label: 'form.scan.document.guestDetailsTitle',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
// {
|
|
66
|
+
// type: 'profile-image',
|
|
67
|
+
// key: '_avatar',
|
|
68
|
+
// templateOptions: {
|
|
69
|
+
// label: 'form.scan.document.firstName',
|
|
70
|
+
// },
|
|
71
|
+
// },
|
|
72
|
+
{
|
|
73
|
+
type: 'input',
|
|
74
|
+
key: 'firstName',
|
|
75
|
+
className: 'small',
|
|
76
|
+
templateOptions: {
|
|
77
|
+
label: 'form.scan.document.firstName',
|
|
78
|
+
required: true,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'input',
|
|
83
|
+
key: 'lastName',
|
|
84
|
+
className: 'small',
|
|
85
|
+
templateOptions: {
|
|
86
|
+
label: 'form.scan.document.lastName',
|
|
87
|
+
required: true,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
className: 'small',
|
|
92
|
+
key: 'secondName',
|
|
93
|
+
type: 'input',
|
|
94
|
+
templateOptions: {
|
|
95
|
+
color: 'accent',
|
|
96
|
+
label: 'form.scan.document.secondLastName',
|
|
97
|
+
},
|
|
98
|
+
hideExpression: 'model.hideSecondLastName',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'input',
|
|
102
|
+
key: 'middleName',
|
|
103
|
+
className: 'small',
|
|
104
|
+
templateOptions: {
|
|
105
|
+
label: 'form.scan.document.middleName',
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
className: '',
|
|
110
|
+
fieldGroupClassName: 'form-flex-row space-between',
|
|
111
|
+
fieldGroup: [
|
|
112
|
+
{
|
|
113
|
+
type: 'datepicker',
|
|
114
|
+
key: 'birthDate',
|
|
115
|
+
className: 'w-100-p small mr-8',
|
|
116
|
+
templateOptions: {
|
|
117
|
+
label: 'form.scan.document.birthDate',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'select',
|
|
122
|
+
key: 'gender',
|
|
123
|
+
className: 'w-100-p small ml-8',
|
|
124
|
+
templateOptions: {
|
|
125
|
+
label: 'form.scan.document.gender',
|
|
126
|
+
options: [
|
|
127
|
+
{ value: 'MALE', label: 'MALE' },
|
|
128
|
+
{ value: 'FEMALE', label: 'FEMALE' },
|
|
129
|
+
{ value: 'NA', label: 'N/A' },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'input',
|
|
137
|
+
key: 'birthPlace',
|
|
138
|
+
className: 'small',
|
|
139
|
+
templateOptions: {
|
|
140
|
+
label: 'form.scan.document.birthPlace',
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: 'select',
|
|
145
|
+
key: 'birthCountry',
|
|
146
|
+
className: 'small',
|
|
147
|
+
templateOptions: {
|
|
148
|
+
label: 'form.scan.document.birthCountry',
|
|
149
|
+
options: this.provider.countries(),
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
className: 'small',
|
|
154
|
+
key: 'nationality',
|
|
155
|
+
type: 'select',
|
|
156
|
+
templateOptions: {
|
|
157
|
+
label: 'form.scan.document.nationality',
|
|
158
|
+
// appearance: 'outline',
|
|
159
|
+
// options: this.profileProvider.nationalities(),
|
|
160
|
+
options: this.provider.countries(),
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
className: 'card-group',
|
|
167
|
+
fieldGroupClassName: 'wraper',
|
|
168
|
+
fieldGroup: [
|
|
169
|
+
{
|
|
170
|
+
type: 'title',
|
|
171
|
+
templateOptions: {
|
|
172
|
+
label: 'form.scan.document.documentTitle',
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'select',
|
|
177
|
+
key: 'documentType',
|
|
178
|
+
templateOptions: {
|
|
179
|
+
label: 'form.scan.document.documentType',
|
|
180
|
+
options: [
|
|
181
|
+
{ value: 'ID', label: 'Identity Document' },
|
|
182
|
+
{ value: 'PASS', label: 'Passport' },
|
|
183
|
+
{ value: 'DL', label: 'Driver Licence' },
|
|
184
|
+
],
|
|
185
|
+
// valueProp: 'id',
|
|
186
|
+
// labelProp: 'value',
|
|
187
|
+
required: true,
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
type: 'input',
|
|
192
|
+
key: 'documentNumber',
|
|
193
|
+
templateOptions: {
|
|
194
|
+
label: 'form.scan.document.documentNumber',
|
|
195
|
+
required: true,
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
className: '',
|
|
200
|
+
fieldGroupClassName: 'form-flex-row space-between',
|
|
201
|
+
fieldGroup: [
|
|
202
|
+
{
|
|
203
|
+
type: 'datepicker',
|
|
204
|
+
key: 'issueDate',
|
|
205
|
+
className: 'small mr-8',
|
|
206
|
+
templateOptions: {
|
|
207
|
+
label: 'form.scan.document.issueDate',
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
type: 'datepicker',
|
|
212
|
+
key: 'expirationDate',
|
|
213
|
+
className: 'small ml-8',
|
|
214
|
+
templateOptions: {
|
|
215
|
+
label: 'form.scan.document.expirationDate',
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
type: 'select',
|
|
222
|
+
key: 'issueStateCode',
|
|
223
|
+
templateOptions: {
|
|
224
|
+
label: 'form.scan.document.issuingStateCode',
|
|
225
|
+
options: this.provider.countries(),
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
type: 'input',
|
|
230
|
+
key: 'issuingPlace',
|
|
231
|
+
templateOptions: {
|
|
232
|
+
label: 'form.scan.document.issuingPlace',
|
|
233
|
+
required: false,
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
className: '',
|
|
238
|
+
fieldGroupClassName: 'form-flex-row space-between',
|
|
239
|
+
fieldGroup: [
|
|
240
|
+
{
|
|
241
|
+
type: 'title',
|
|
242
|
+
templateOptions: {
|
|
243
|
+
label: 'form.scan.document.addressTitle',
|
|
244
|
+
badge: 'communications',
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
].map((item) => this.translate.forms(item)),
|
|
248
|
+
},
|
|
249
|
+
// {
|
|
250
|
+
// className: 'small',
|
|
251
|
+
// key: 'typeID',
|
|
252
|
+
// type: 'select',
|
|
253
|
+
// templateOptions: {
|
|
254
|
+
// label: 'form.profile.address.type',
|
|
255
|
+
// required: true,
|
|
256
|
+
// // options: this.profileProvider.addressTypes(),
|
|
257
|
+
// expressionProperties: {
|
|
258
|
+
// 'templateOptions.disabled': (model: any) =>
|
|
259
|
+
// model.newAddress,
|
|
260
|
+
// },
|
|
261
|
+
// onClearValue: (field: FormlyFieldConfig) => {
|
|
262
|
+
// field.formControl?.setValue('');
|
|
263
|
+
// field.model.typeID = 0;
|
|
264
|
+
// },
|
|
265
|
+
// onSetNewValue: (field: FormlyFieldConfig, optObj: any) => {
|
|
266
|
+
// field.formControl?.setValue(optObj.value);
|
|
267
|
+
// field.model.typeID = optObj.value;
|
|
268
|
+
// },
|
|
269
|
+
// },
|
|
270
|
+
// expressionProperties: {
|
|
271
|
+
// 'templateOptions.disabled': (model: any) => !model.newAddress,
|
|
272
|
+
// },
|
|
273
|
+
// },
|
|
274
|
+
{
|
|
275
|
+
className: 'small',
|
|
276
|
+
key: 'country',
|
|
277
|
+
type: 'select',
|
|
278
|
+
templateOptions: {
|
|
279
|
+
required: true,
|
|
280
|
+
label: 'form.profile.address.country',
|
|
281
|
+
options: this.provider.countries(),
|
|
282
|
+
},
|
|
283
|
+
// expressionProperties: {
|
|
284
|
+
// 'templateOptions.disabled': (model: any) => !model.newAddress,
|
|
285
|
+
// },
|
|
286
|
+
hooks: {
|
|
287
|
+
onInit: (model) => {
|
|
288
|
+
console.log(model);
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
className: '',
|
|
294
|
+
fieldGroupClassName: 'form-flex-row space-between',
|
|
295
|
+
fieldGroup: [
|
|
296
|
+
{
|
|
297
|
+
className: 'mr-8 w-100-p',
|
|
298
|
+
key: 'zip',
|
|
299
|
+
type: 'input',
|
|
300
|
+
templateOptions: {
|
|
301
|
+
label: 'form.profile.address.zip',
|
|
302
|
+
labelProp: (item) => {
|
|
303
|
+
return `${item.zip} (${item.city})`;
|
|
304
|
+
},
|
|
305
|
+
set: (field, option) => {
|
|
306
|
+
// console.log(option, field);
|
|
307
|
+
field.formControl.setValue(option.value.zip);
|
|
308
|
+
// set CITY
|
|
309
|
+
field.form.get('city').setValue(option.value.city);
|
|
310
|
+
},
|
|
311
|
+
filter: (key, field) => {
|
|
312
|
+
// return this.profileProvider.zipCodes({
|
|
313
|
+
// countryCode: field.form.get('country').value,
|
|
314
|
+
// zip: key,
|
|
315
|
+
// });
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
// expressionProperties: {
|
|
319
|
+
// 'templateOptions.disabled': (model: any) =>
|
|
320
|
+
// !model.newAddress,
|
|
321
|
+
// },
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
className: 'small ml-8',
|
|
325
|
+
key: 'city',
|
|
326
|
+
type: 'input',
|
|
327
|
+
templateOptions: {
|
|
328
|
+
label: 'form.profile.address.city',
|
|
329
|
+
},
|
|
330
|
+
// expressionProperties: {
|
|
331
|
+
// 'templateOptions.disabled': (model: any) =>
|
|
332
|
+
// !model.newAddress,
|
|
333
|
+
// },
|
|
334
|
+
},
|
|
335
|
+
].map((item) => this.translate.forms(item)),
|
|
336
|
+
},
|
|
337
|
+
// {
|
|
338
|
+
// className: 'small',
|
|
339
|
+
// key: 'state',
|
|
340
|
+
// type: 'input',
|
|
341
|
+
// templateOptions: {
|
|
342
|
+
// label: 'form.profile.address.state',
|
|
343
|
+
// },
|
|
344
|
+
// // expressionProperties: {
|
|
345
|
+
// // 'templateOptions.disabled': (model: any) => !model.newAddress,
|
|
346
|
+
// // },
|
|
347
|
+
// },
|
|
348
|
+
// {
|
|
349
|
+
// className: 'small',
|
|
350
|
+
// key: 'countryStateID',
|
|
351
|
+
// type: 'select',
|
|
352
|
+
// templateOptions: {
|
|
353
|
+
// label: 'form.profile.address.regionalStatistics',
|
|
354
|
+
// options: this.provider.countries(),
|
|
355
|
+
// },
|
|
356
|
+
// // expressionProperties: {
|
|
357
|
+
// // 'templateOptions.disabled': (model: any) => !model.newAddress,
|
|
358
|
+
// // },
|
|
359
|
+
// },
|
|
360
|
+
{
|
|
361
|
+
className: 'small w-100-p',
|
|
362
|
+
key: 'street1',
|
|
363
|
+
type: 'input',
|
|
364
|
+
templateOptions: {
|
|
365
|
+
label: 'form.profile.address.street',
|
|
366
|
+
},
|
|
367
|
+
// expressionProperties: {
|
|
368
|
+
// 'templateOptions.disabled': (model: any) => !model.newAddress,
|
|
369
|
+
// },
|
|
370
|
+
},
|
|
371
|
+
],
|
|
372
|
+
},
|
|
373
|
+
],
|
|
374
|
+
},
|
|
375
|
+
].map((item) => this.translate.forms(item));
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
ScanFieldsProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanFieldsProvider, deps: [{ token: i1.TranslationProvider }, { token: i2.ScanProvider }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
379
|
+
ScanFieldsProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanFieldsProvider, providedIn: 'root' });
|
|
380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanFieldsProvider, decorators: [{
|
|
381
|
+
type: Injectable,
|
|
382
|
+
args: [{
|
|
383
|
+
providedIn: 'root',
|
|
384
|
+
}]
|
|
385
|
+
}], ctorParameters: function () { return [{ type: i1.TranslationProvider }, { type: i2.ScanProvider }]; } });
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL3Byb3ZpZGVycy9zY2FuLmZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVUzQyxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsU0FBOEIsRUFDOUIsUUFBc0I7UUFEdEIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUM3QixDQUFDO0lBRUosTUFBTTtRQUNKLE9BQU87WUFDTDtnQkFDRSxtQkFBbUIsRUFBRSxPQUFPO2dCQUM1QixVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsUUFBUSxFQUFFLEVBQUU7d0JBQ1osSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLEdBQUcsRUFBRSxTQUFTO3dCQUNkLEtBQUssRUFBRSxXQUFXO3dCQUNsQixZQUFZLEVBQUUsSUFBSTt3QkFDbEIsZUFBZSxFQUFFOzRCQUNmLEtBQUssRUFBRSxtQ0FBbUM7eUJBQzNDO3FCQUNGO29CQUNEO3dCQUNFLFFBQVEsRUFBRSxFQUFFO3dCQUNaLElBQUksRUFBRSxVQUFVO3dCQUNoQixLQUFLLEVBQUUsV0FBVzt3QkFDbEIsR0FBRyxFQUFFLFVBQVU7d0JBQ2YsWUFBWSxFQUFFLElBQUk7d0JBQ2xCLGVBQWUsRUFBRTs0QkFDZixLQUFLLEVBQUUsb0NBQW9DO3lCQUM1QztxQkFDRjtvQkFDRDt3QkFDRSxRQUFRLEVBQUUsRUFBRTt3QkFDWixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLEdBQUcsRUFBRSxZQUFZO3dCQUNqQixZQUFZLEVBQUUsSUFBSTt3QkFDbEIsZUFBZSxFQUFFOzRCQUNmLEtBQUssRUFBRSxzQ0FBc0M7eUJBQzlDO3FCQUNGO2lCQUNGLENBQUMsR0FBRyxDQUFDLENBQUMsSUFB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QkFDL0Isd0VBQXdFOzRCQUN4RSxVQUFVOzRCQUNWLEtBQUs7NEJBQ0w7Z0NBQ0UsU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLEdBQUcsRUFBRSxTQUFTO2dDQUNkLElBQUksRUFBRSxPQUFPO2dDQUNiLGVBQWUsRUFBRTtvQ0FDZixLQUFLLEVBQUUsNkJBQTZCO2lDQUNyQztnQ0FDRCwwQkFBMEI7Z0NBQzFCLG1FQUFtRTtnQ0FDbkUsS0FBSzs2QkFDTjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7K0dBMVhVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2NhblByb3ZpZGVyIH0gZnJvbSAnLi9zY2FuLnByb3ZpZGVyJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uUHJvdmlkZXIgfSBmcm9tICcuL3RyYW5zbGF0aW9uLnByb3ZpZGVyJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY2FuRmllbGRzUHJvdmlkZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRpb25Qcm92aWRlcixcbiAgICBwcml2YXRlIHByb3ZpZGVyOiBTY2FuUHJvdmlkZXJcbiAgKSB7fVxuXG4gIHVwZGF0ZSgpOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiAncHgtMTYnLFxuICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgd3JhcHBlcnM6IFtdLFxuICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgIGtleTogJ3Byb2ZpbGUnLFxuICAgICAgICAgICAgY2xhc3M6ICdjaGVja2JveCAnLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LnVwZGF0ZS5wcm9maWxlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3cmFwcGVyczogW10sXG4gICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICAgICAgY2xhc3M6ICdjaGVja2JveCAnLFxuICAgICAgICAgICAga2V5OiAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LnVwZGF0ZS5kb2N1bWVudCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgd3JhcHBlcnM6IFtdLFxuICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgIGNsYXNzOiAnY2hlY2tib3ggJyxcbiAgICAgICAgICAgIGtleTogJ2F0dGFjaG1lbnQnLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LnVwZGF0ZS5hdHRhY2htZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXS5tYXAoKGl0ZW0pID0+IHRoaXMudHJhbnNsYXRlLmZvcm1zKGl0ZW0pKSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBkb2N1bWVudCgpOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd3LTIwMC1wJyxcbiAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ2Zvcm0tZmxleC1yb3cgYm9yZGVyLWNhcmQgcHJvZmlsZS1kZXRhaWxzJyxcbiAgICAgICAgZmllbGRHcm91cDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2NhcmQtZ3JvdXAnLFxuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3dyYXBlcicsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6ICdmb3JtLnNjYW4uZG9jdW1lbnQuZ3Vlc3REZXRhaWxzVGl0bGUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgLy8gICB0eXBlOiAncHJvZmlsZS1pbWFnZScsXG4gICAgICAgICAgICAgIC8vICAga2V5OiAnX2F2YXRhcicsXG4gICAgICAgICAgICAgIC8vICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgIC8vICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5maXJzdE5hbWUnLFxuICAgICAgICAgICAgICAvLyAgIH0sXG4gICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIGtleTogJ2ZpcnN0TmFtZScsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6ICdmb3JtLnNjYW4uZG9jdW1lbnQuZmlyc3ROYW1lJyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIGtleTogJ2xhc3ROYW1lJyxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5sYXN0TmFtZScsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGtleTogJ3NlY29uZE5hbWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2FjY2VudCcsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5zZWNvbmRMYXN0TmFtZScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoaWRlRXhwcmVzc2lvbjogJ21vZGVsLmhpZGVTZWNvbmRMYXN0TmFtZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIGtleTogJ21pZGRsZU5hbWUnLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50Lm1pZGRsZU5hbWUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdmb3JtLWZsZXgtcm93IHNwYWNlLWJldHdlZW4nLFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RhdGVwaWNrZXInLFxuICAgICAgICAgICAgICAgICAgICBrZXk6ICdiaXJ0aERhdGUnLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd3LTEwMC1wIHNtYWxsIG1yLTgnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5iaXJ0aERhdGUnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2dlbmRlcicsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ctMTAwLXAgc21hbGwgbWwtOCcsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LmdlbmRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ01BTEUnLCBsYWJlbDogJ01BTEUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnRkVNQUxFJywgbGFiZWw6ICdGRU1BTEUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnTkEnLCBsYWJlbDogJ04vQScgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIGtleTogJ2JpcnRoUGxhY2UnLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LmJpcnRoUGxhY2UnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdiaXJ0aENvdW50cnknLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LmJpcnRoQ291bnRyeScsXG5cbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMucHJvdmlkZXIuY291bnRyaWVzKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBrZXk6ICduYXRpb25hbGl0eScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5uYXRpb25hbGl0eScsXG4gICAgICAgICAgICAgICAgICAvLyAgIGFwcGVhcmFuY2U6ICdvdXRsaW5lJyxcbiAgICAgICAgICAgICAgICAgIC8vICBvcHRpb25zOiB0aGlzLnByb2ZpbGVQcm92aWRlci5uYXRpb25hbGl0aWVzKCksXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLnByb3ZpZGVyLmNvdW50cmllcygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnY2FyZC1ncm91cCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiAnd3JhcGVyJyxcbiAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5kb2N1bWVudFRpdGxlJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnZG9jdW1lbnRUeXBlJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LmRvY3VtZW50VHlwZScsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJRCcsIGxhYmVsOiAnSWRlbnRpdHkgRG9jdW1lbnQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdQQVNTJywgbGFiZWw6ICdQYXNzcG9ydCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0RMJywgbGFiZWw6ICdEcml2ZXIgTGljZW5jZScgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgLy8gIHZhbHVlUHJvcDogJ2lkJyxcbiAgICAgICAgICAgICAgICAvLyAgbGFiZWxQcm9wOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAga2V5OiAnZG9jdW1lbnROdW1iZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6ICdmb3JtLnNjYW4uZG9jdW1lbnQuZG9jdW1lbnROdW1iZXInLFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ2Zvcm0tZmxleC1yb3cgc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZXBpY2tlcicsXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2lzc3VlRGF0ZScsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NtYWxsIG1yLTgnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5pc3N1ZURhdGUnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RhdGVwaWNrZXInLFxuICAgICAgICAgICAgICAgICAgICBrZXk6ICdleHBpcmF0aW9uRGF0ZScsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NtYWxsIG1sLTgnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5leHBpcmF0aW9uRGF0ZScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdpc3N1ZVN0YXRlQ29kZScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogJ2Zvcm0uc2Nhbi5kb2N1bWVudC5pc3N1aW5nU3RhdGVDb2RlJyxcblxuICAgICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5wcm92aWRlci5jb3VudHJpZXMoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdpc3N1aW5nUGxhY2UnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6ICdmb3JtLnNjYW4uZG9jdW1lbnQuaXNzdWluZ1BsYWNlJyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiAnZm9ybS1mbGV4LXJvdyBzcGFjZS1iZXR3ZWVuJyxcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5zY2FuLmRvY3VtZW50LmFkZHJlc3NUaXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6ICdjb21tdW5pY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgXS5tYXAoKGl0ZW0pID0+IHRoaXMudHJhbnNsYXRlLmZvcm1zKGl0ZW0pKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAvLyAgIGNsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgLy8gICBrZXk6ICd0eXBlSUQnLFxuICAgICAgICAgICAgICAvLyAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAvLyAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAvLyAgICAgbGFiZWw6ICdmb3JtLnByb2ZpbGUuYWRkcmVzcy50eXBlJyxcbiAgICAgICAgICAgICAgLy8gICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAvLyAgICAgLy8gIG9wdGlvbnM6IHRoaXMucHJvZmlsZVByb3ZpZGVyLmFkZHJlc3NUeXBlcygpLFxuICAgICAgICAgICAgICAvLyAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLy8gICAgICAgJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCc6IChtb2RlbDogYW55KSA9PlxuICAgICAgICAgICAgICAvLyAgICAgICAgIG1vZGVsLm5ld0FkZHJlc3MsXG4gICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAvLyAgICAgb25DbGVhclZhbHVlOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIC8vICAgICAgIGZpZWxkLmZvcm1Db250cm9sPy5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICAgIC8vICAgICAgIGZpZWxkLm1vZGVsLnR5cGVJRCA9IDA7XG4gICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAvLyAgICAgb25TZXROZXdWYWx1ZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgb3B0T2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgLy8gICAgICAgZmllbGQuZm9ybUNvbnRyb2w/LnNldFZhbHVlKG9wdE9iai52YWx1ZSk7XG4gICAgICAgICAgICAgIC8vICAgICAgIGZpZWxkLm1vZGVsLnR5cGVJRCA9IG9wdE9iai52YWx1ZTtcbiAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgIC8vICAgfSxcbiAgICAgICAgICAgICAgLy8gICBleHByZXNzaW9uUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAvLyAgICAgJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCc6IChtb2RlbDogYW55KSA9PiAhbW9kZWwubmV3QWRkcmVzcyxcbiAgICAgICAgICAgICAgLy8gICB9LFxuICAgICAgICAgICAgICAvLyB9LFxuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAga2V5OiAnY291bnRyeScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5wcm9maWxlLmFkZHJlc3MuY291bnRyeScsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLnByb3ZpZGVyLmNvdW50cmllcygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAvLyAgICd0ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQnOiAobW9kZWw6IGFueSkgPT4gIW1vZGVsLm5ld0FkZHJlc3MsXG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICAgICAgb25Jbml0OiAobW9kZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtb2RlbCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdmb3JtLWZsZXgtcm93IHNwYWNlLWJldHdlZW4nLFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbXItOCB3LTEwMC1wJyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnemlwJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdmb3JtLnByb2ZpbGUuYWRkcmVzcy56aXAnLFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUHJvcDogKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2l0ZW0uemlwfSAoJHtpdGVtLmNpdHl9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgIHNldDogKGZpZWxkOiBhbnksIG9wdGlvbjogTWF0T3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvcHRpb24sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG9wdGlvbi52YWx1ZS56aXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IENJVFlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZvcm0uZ2V0KCdjaXR5Jykuc2V0VmFsdWUob3B0aW9uLnZhbHVlLmNpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiAoa2V5OiBzdHJpbmcsIGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnByb2ZpbGVQcm92aWRlci56aXBDb2Rlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvdW50cnlDb2RlOiBmaWVsZC5mb3JtLmdldCgnY291bnRyeScpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB6aXA6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCc6IChtb2RlbDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgIW1vZGVsLm5ld0FkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzbWFsbCBtbC04JyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZm9ybS5wcm9maWxlLmFkZHJlc3MuY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCc6IChtb2RlbDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgIW1vZGVsLm5ld0FkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0ubWFwKChpdGVtKSA9PiB0aGlzLnRyYW5zbGF0ZS5mb3JtcyhpdGVtKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgLy8gICBjbGFzc05hbWU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgIC8vICAga2V5OiAnc3RhdGUnLFxuICAgICAgICAgICAgICAvLyAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgIC8vICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgIC8vICAgICBsYWJlbDogJ2Zvcm0ucHJvZmlsZS5hZGRyZXNzLnN0YXRlJyxcbiAgICAgICAgICAgICAgLy8gICB9LFxuICAgICAgICAgICAgICAvLyAgIC8vIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC8vICAgLy8gICAndGVtcGxhdGVPcHRpb25zLmRpc2FibGVkJzogKG1vZGVsOiBhbnkpID0+ICFtb2RlbC5uZXdBZGRyZXNzLFxuICAgICAgICAgICAgICAvLyAgIC8vIH0sXG4gICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgLy8gICBjbGFzc05hbWU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgIC8vICAga2V5OiAnY291bnRyeVN0YXRlSUQnLFxuICAgICAgICAgICAgICAvLyAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAvLyAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAvLyAgICAgbGFiZWw6ICdmb3JtLnByb2ZpbGUuYWRkcmVzcy5yZWdpb25hbFN0YXRpc3RpY3MnLFxuICAgICAgICAgICAgICAvLyAgICAgb3B0aW9uczogdGhpcy5wcm92aWRlci5jb3VudHJpZXMoKSxcbiAgICAgICAgICAgICAgLy8gICB9LFxuICAgICAgICAgICAgICAvLyAgIC8vIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC8vICAgLy8gICAndGVtcGxhdGVPcHRpb25zLmRpc2FibGVkJzogKG1vZGVsOiBhbnkpID0+ICFtb2RlbC5uZXdBZGRyZXNzLFxuICAgICAgICAgICAgICAvLyAgIC8vIH0sXG4gICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzbWFsbCB3LTEwMC1wJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzdHJlZXQxJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6ICdmb3JtLnByb2ZpbGUuYWRkcmVzcy5zdHJlZXQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAvLyAgICd0ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQnOiAobW9kZWw6IGFueSkgPT4gIW1vZGVsLm5ld0FkZHJlc3MsXG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXS5tYXAoKGl0ZW0pID0+IHRoaXMudHJhbnNsYXRlLmZvcm1zKGl0ZW0pKTtcbiAgfVxufVxuIl19
|