@dignite-ng/expand.cms 3.0.0-rc.48 → 3.0.0-rc.50
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/config/providers/route.provider.d.ts +2 -3
- package/esm2022/config/providers/route.provider.mjs +3 -4
- package/esm2022/lib/cms-routing.module.mjs +3 -3
- package/esm2022/lib/cms.module.mjs +4 -4
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +18 -16
- package/esm2022/lib/components/admin/entries/create-or-update-entry-input-base.mjs +9 -1
- package/esm2022/lib/components/admin/entries/create.component.mjs +25 -63
- package/esm2022/lib/components/admin/entries/edit.component.mjs +28 -14
- package/esm2022/lib/components/admin/entries/entries.component.mjs +11 -16
- package/esm2022/lib/components/admin/fields/create-field.component.mjs +54 -54
- package/esm2022/lib/components/admin/fields/create-or-edit-field.component.mjs +44 -69
- package/esm2022/lib/components/admin/fields/edit-field.component.mjs +130 -73
- package/esm2022/lib/components/admin/fields/fields-form-config.mjs +50 -0
- package/esm2022/lib/components/admin/fields/fields-group.component.mjs +128 -0
- package/esm2022/lib/components/admin/fields/fields.component.mjs +61 -57
- package/esm2022/lib/components/admin/fields/index.mjs +3 -3
- package/esm2022/lib/components/admin/sections/create-or-edit-sections-modal.component.mjs +17 -15
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +59 -86
- package/esm2022/lib/components/admin/sections/sections.component.mjs +11 -14
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.component.mjs +32 -23
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +26 -11
- package/esm2022/lib/components/dynamic-form/table/table-config.component.mjs +50 -26
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +10 -10
- package/esm2022/lib/components/dynamic-form/table/table-view.component.mjs +3 -2
- package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +42 -37
- package/esm2022/lib/resolvers/table-default-entity-props.mjs +4 -4
- package/esm2022/lib/services/fields-data.service.mjs +100 -0
- package/esm2022/lib/services/form-controls.service.mjs +12 -10
- package/esm2022/lib/services/index.mjs +3 -4
- package/esm2022/lib/services/keys-convert-to-lowercase.service.mjs +40 -0
- package/fesm2022/dignite-ng-expand.cms-config.mjs +2 -3
- package/fesm2022/dignite-ng-expand.cms-config.mjs.map +1 -1
- package/fesm2022/dignite-ng-expand.cms.mjs +811 -784
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -1
- package/lib/cms.module.d.ts +2 -2
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +3 -1
- package/lib/components/admin/entries/create-or-update-entry-input-base.d.ts +8 -0
- package/lib/components/admin/entries/create.component.d.ts +1 -2
- package/lib/components/admin/entries/edit.component.d.ts +1 -2
- package/lib/components/admin/entries/entries.component.d.ts +2 -1
- package/lib/components/admin/fields/create-field.component.d.ts +19 -22
- package/lib/components/admin/fields/create-or-edit-field.component.d.ts +20 -26
- package/lib/components/admin/fields/edit-field.component.d.ts +24 -30
- package/lib/components/admin/fields/fields-form-config.d.ts +19 -0
- package/lib/components/admin/fields/fields-group.component.d.ts +48 -0
- package/lib/components/admin/fields/fields.component.d.ts +18 -16
- package/lib/components/admin/fields/index.d.ts +1 -2
- package/lib/components/admin/sections/create-or-edit-sections-modal.component.d.ts +4 -1
- package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +14 -9
- package/lib/components/admin/sections/sections.component.d.ts +1 -3
- package/lib/components/dynamic-form/matrix/matrix-config.component.d.ts +10 -4
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +7 -3
- package/lib/components/dynamic-form/table/table-config.component.d.ts +15 -5
- package/lib/components/dynamic-form/table/table-control.component.d.ts +3 -3
- package/lib/components/dynamic-form/table/table-view.component.d.ts +2 -1
- package/lib/resolvers/page-default-toolbar-actions.d.ts +9 -6
- package/lib/services/fields-data.service.d.ts +45 -0
- package/lib/services/form-controls.service.d.ts +3 -1
- package/lib/services/index.d.ts +2 -3
- package/lib/services/keys-convert-to-lowercase.service.d.ts +16 -0
- package/package.json +1 -1
- package/esm2022/lib/components/admin/fields/create-or-update-field-input-base.mjs +0 -18
- package/esm2022/lib/components/admin/fields/field-group.component.mjs +0 -144
- package/esm2022/lib/constants/styles.mjs +0 -19
- package/esm2022/lib/services/appent-content.mjs +0 -15
- package/esm2022/lib/services/cms-api.service.mjs +0 -94
- package/esm2022/lib/services/cms.service.mjs +0 -22
- package/esm2022/lib/services/field-abstracts.service.mjs +0 -48
- package/lib/components/admin/fields/create-or-update-field-input-base.d.ts +0 -15
- package/lib/components/admin/fields/field-group.component.d.ts +0 -58
- package/lib/constants/styles.d.ts +0 -2
- package/lib/services/appent-content.d.ts +0 -1
- package/lib/services/cms-api.service.d.ts +0 -23
- package/lib/services/cms.service.d.ts +0 -10
- package/lib/services/field-abstracts.service.d.ts +0 -20
|
@@ -6,47 +6,51 @@ import { ToasterService } from '@abp/ng.theme.shared';
|
|
|
6
6
|
import { Component, ElementRef, inject, ViewChild } from '@angular/core';
|
|
7
7
|
import { FormBuilder } from '@angular/forms';
|
|
8
8
|
import { ActivatedRoute } from '@angular/router';
|
|
9
|
-
import { CmsApiService } from '../../../../services';
|
|
10
9
|
import { CreateOrEditEntryTypeInputBase, fieldTabsBase, fieldsBase, } from './create-or-edit.-entry-type-input-base';
|
|
11
|
-
import { Location } from '@angular/common';
|
|
12
10
|
import { ECmsComponent } from '../../../../enums';
|
|
13
11
|
import { ValidatorsService } from '@dignite-ng/expand.core';
|
|
14
|
-
import { UpdateListService } from '@dignite-ng/expand.core';
|
|
15
12
|
import { finalize } from 'rxjs';
|
|
16
13
|
import { FieldAdminService, FieldGroupAdminService, } from '../../../../proxy/dignite/cms/admin/fields';
|
|
17
14
|
import { EntryTypeAdminService } from '../../../../proxy/dignite/cms/admin/sections';
|
|
18
15
|
import { FormControlsService } from '../../../../services/form-controls.service';
|
|
16
|
+
import { ToPinyinService, LocationBackService, UpdateListService } from '@dignite-ng/expand.core';
|
|
19
17
|
import * as i0 from "@angular/core";
|
|
20
18
|
import * as i1 from "@abp/ng.theme.shared";
|
|
21
|
-
import * as i2 from "@
|
|
19
|
+
import * as i2 from "@dignite-ng/expand.core";
|
|
22
20
|
import * as i3 from "@angular/router";
|
|
23
21
|
import * as i4 from "../../../../proxy/dignite/cms/admin/fields";
|
|
24
22
|
import * as i5 from "../../../../proxy/dignite/cms/admin/sections";
|
|
25
23
|
import * as i6 from "@abp/ng.core";
|
|
26
|
-
import * as i7 from "../../../../services";
|
|
27
|
-
import * as i8 from "
|
|
24
|
+
import * as i7 from "../../../../services/form-controls.service";
|
|
25
|
+
import * as i8 from "@angular/common";
|
|
28
26
|
import * as i9 from "@angular/forms";
|
|
29
27
|
import * as i10 from "@ngx-validate/core";
|
|
30
28
|
import * as i11 from "@ng-bootstrap/ng-bootstrap";
|
|
31
29
|
import * as i12 from "@abp/ng.components/page";
|
|
32
30
|
import * as i13 from "@angular/cdk/drag-drop";
|
|
33
31
|
export class CreateOrEditComponent {
|
|
34
|
-
constructor(toaster,
|
|
32
|
+
constructor(toaster, _LocationBackService, route, _FieldGroupAdminService, _FieldAdminService, _EntryTypeAdminService, _LocalizationService, _FormControlsService, toPinyinService) {
|
|
35
33
|
this.toaster = toaster;
|
|
36
|
-
this.
|
|
34
|
+
this._LocationBackService = _LocationBackService;
|
|
37
35
|
this.route = route;
|
|
38
36
|
this._FieldGroupAdminService = _FieldGroupAdminService;
|
|
39
37
|
this._FieldAdminService = _FieldAdminService;
|
|
40
38
|
this._EntryTypeAdminService = _EntryTypeAdminService;
|
|
41
39
|
this._LocalizationService = _LocalizationService;
|
|
42
|
-
this._CmsApiService = _CmsApiService;
|
|
43
40
|
this._FormControlsService = _FormControlsService;
|
|
41
|
+
this.toPinyinService = toPinyinService;
|
|
44
42
|
this.fb = inject(FormBuilder);
|
|
45
43
|
this._UpdateListService = inject(UpdateListService);
|
|
46
44
|
/**版块id */
|
|
47
45
|
this.sectionId = '';
|
|
48
46
|
/**条目类型id */
|
|
49
47
|
this.entryTypesId = '';
|
|
48
|
+
/**是否全选 */
|
|
49
|
+
this.isAllSelect = {
|
|
50
|
+
isRequired: false,
|
|
51
|
+
isShowInList: false,
|
|
52
|
+
isEnableSearch: false
|
|
53
|
+
};
|
|
50
54
|
/**需要查询的动态表单类型 */
|
|
51
55
|
this.enableSearchTypeList = [];
|
|
52
56
|
/**不需要展示的动态表单类型 */
|
|
@@ -95,14 +99,6 @@ export class CreateOrEditComponent {
|
|
|
95
99
|
//板块id
|
|
96
100
|
this.sectionId = sectionId;
|
|
97
101
|
this.newEntity = this.fb.group(new CreateOrEditEntryTypeInputBase());
|
|
98
|
-
//
|
|
99
|
-
// this.enableSearchTypeList=await this._FormControlsService.getEnableSearchTypeList();
|
|
100
|
-
// this.disableshowinTypeList= this._FormControlsService.getdisableshowinTypeList();
|
|
101
|
-
// if (sectionId) {
|
|
102
|
-
// this.sectionId = sectionId;
|
|
103
|
-
// this.addControlToFieldTabs();
|
|
104
|
-
// this.getFieldGroup();
|
|
105
|
-
// }
|
|
106
102
|
//获取条目类型详情
|
|
107
103
|
if (this.entryTypesId) {
|
|
108
104
|
await this.getEntryTypes();
|
|
@@ -115,7 +111,7 @@ export class CreateOrEditComponent {
|
|
|
115
111
|
/**处理数据 */
|
|
116
112
|
processData() {
|
|
117
113
|
return new Promise((resolve, rejects) => {
|
|
118
|
-
const fieldList =
|
|
114
|
+
const fieldList = structuredClone(this.fieldList);
|
|
119
115
|
const res = this.entryTypesSelect;
|
|
120
116
|
if (!res) {
|
|
121
117
|
this.addControlToFieldTabs();
|
|
@@ -137,10 +133,18 @@ export class CreateOrEditComponent {
|
|
|
137
133
|
this.newEntity?.patchValue(res);
|
|
138
134
|
this.navActive = 0;
|
|
139
135
|
this.resultSource = res.fieldTabs;
|
|
136
|
+
this.setAllSelectStauts();
|
|
137
|
+
console.log(this.isAllSelect, 'this.isAllSelect', res.fieldTabs, this.navActive);
|
|
140
138
|
}
|
|
141
139
|
resolve(true);
|
|
142
140
|
});
|
|
143
141
|
}
|
|
142
|
+
/**设置全选状态 */
|
|
143
|
+
setAllSelectStauts() {
|
|
144
|
+
this.isAllSelect.isRequired = this.resultSource[this.navActive].fields.every(eld => eld.required);
|
|
145
|
+
this.isAllSelect.isShowInList = this.resultSource[this.navActive].fields.every(eld => eld.showInList);
|
|
146
|
+
this.isAllSelect.isEnableSearch = this.resultSource[this.navActive].fields.every(eld => eld.enableSearch);
|
|
147
|
+
}
|
|
144
148
|
/**给fieldTabs添加新控件 */
|
|
145
149
|
addControlToFieldTabs(nameValue = '') {
|
|
146
150
|
const newFormGroup = this.fb.group(new fieldTabsBase());
|
|
@@ -167,12 +171,7 @@ export class CreateOrEditComponent {
|
|
|
167
171
|
el.fields = fieldList.filter(els => els.groupId === el.id);
|
|
168
172
|
});
|
|
169
173
|
this.fieldGroupList = fieldGroupList;
|
|
170
|
-
this.fieldList =
|
|
171
|
-
// const entryTypesId = this.entryTypesId;
|
|
172
|
-
// if (entryTypesId) {
|
|
173
|
-
// this.entryTypesId = entryTypesId;
|
|
174
|
-
// this.getEntryTypes();
|
|
175
|
-
// }
|
|
174
|
+
this.fieldList = structuredClone(fieldList);
|
|
176
175
|
resolve(res);
|
|
177
176
|
});
|
|
178
177
|
});
|
|
@@ -185,51 +184,6 @@ export class CreateOrEditComponent {
|
|
|
185
184
|
resolve(res);
|
|
186
185
|
});
|
|
187
186
|
});
|
|
188
|
-
// // const fieldList: any = this.deepClone(this.fieldList);
|
|
189
|
-
// this._EntryTypeAdminService.get(this.entryTypesId).subscribe(res => {
|
|
190
|
-
// // res.fieldTabs.forEach(el => {
|
|
191
|
-
// // el.fields.forEach((eld: any) => {
|
|
192
|
-
// // eld.id = eld.fieldId;
|
|
193
|
-
// // eld.groupId = fieldList.find(elfd => elfd.id == eld.fieldId).groupId;
|
|
194
|
-
// // this.formRightGroup.push(eld);
|
|
195
|
-
// // const fieldindex = fieldList.findIndex(elfl => elfl.id == eld.fieldId);
|
|
196
|
-
// // fieldList.splice(fieldindex, 1);
|
|
197
|
-
// // });
|
|
198
|
-
// // });
|
|
199
|
-
// // this.fieldGroupList.forEach((el: any, index) => {
|
|
200
|
-
// // el.fields = fieldList.filter(els => els.groupId === el.id);
|
|
201
|
-
// // });
|
|
202
|
-
// // this.newEntity?.patchValue(res);
|
|
203
|
-
// this.entryTypesSelect = res;
|
|
204
|
-
// // this.resultSource = res.fieldTabs;
|
|
205
|
-
// });
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* 深拷贝--方法
|
|
209
|
-
* $api.deepClone() */
|
|
210
|
-
deepClone(obj) {
|
|
211
|
-
if (typeof obj !== 'object' || obj === null)
|
|
212
|
-
return obj;
|
|
213
|
-
const result = Array.isArray(obj) ? [] : {};
|
|
214
|
-
for (const key in obj) {
|
|
215
|
-
if (obj.hasOwnProperty(key)) {
|
|
216
|
-
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
217
|
-
if (obj[key] instanceof Date) {
|
|
218
|
-
result[key] = new Date(obj[key].getTime());
|
|
219
|
-
}
|
|
220
|
-
else if (obj[key] instanceof RegExp) {
|
|
221
|
-
result[key] = new RegExp(obj[key]);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
result[key] = this.deepClone(obj[key]);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
result[key] = obj[key];
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return result;
|
|
233
187
|
}
|
|
234
188
|
/**
|
|
235
189
|
*
|
|
@@ -272,8 +226,8 @@ export class CreateOrEditComponent {
|
|
|
272
226
|
/* empty */
|
|
273
227
|
}
|
|
274
228
|
const _fromResultSourceDragEl = this.fromResultSourceDragEl;
|
|
275
|
-
const formRightGroup =
|
|
276
|
-
const fieldList =
|
|
229
|
+
const formRightGroup = structuredClone(this.formRightGroup);
|
|
230
|
+
const fieldList = structuredClone(this.fieldList);
|
|
277
231
|
if (_fromResultSourceDragEl) {
|
|
278
232
|
//移动
|
|
279
233
|
//从目标源拖拽到数据源
|
|
@@ -291,6 +245,7 @@ export class CreateOrEditComponent {
|
|
|
291
245
|
this.formRightGroup = formRightGroup;
|
|
292
246
|
}
|
|
293
247
|
this.setfieldTabsFrom();
|
|
248
|
+
this.setAllSelectStauts();
|
|
294
249
|
}
|
|
295
250
|
/**拖拽到目标源时触发
|
|
296
251
|
*
|
|
@@ -304,6 +259,7 @@ export class CreateOrEditComponent {
|
|
|
304
259
|
this.formRightGroup.push(_fromDataSourceDragEl);
|
|
305
260
|
}
|
|
306
261
|
this.setfieldTabsFrom();
|
|
262
|
+
this.setAllSelectStauts();
|
|
307
263
|
}
|
|
308
264
|
/** 从目标源拖拽到目标源*/
|
|
309
265
|
dragToResultSourceItemDropped(fieldsIndex) {
|
|
@@ -316,6 +272,7 @@ export class CreateOrEditComponent {
|
|
|
316
272
|
this.resultSource[this.navActive].fields.splice(fieldsIndex, 0, _fromResultSourceDragEl);
|
|
317
273
|
}
|
|
318
274
|
this.setfieldTabsFrom();
|
|
275
|
+
this.setAllSelectStauts();
|
|
319
276
|
}
|
|
320
277
|
/**设置formA表单 */
|
|
321
278
|
setfieldTabsFrom() {
|
|
@@ -357,7 +314,11 @@ export class CreateOrEditComponent {
|
|
|
357
314
|
}))
|
|
358
315
|
.subscribe(res => {
|
|
359
316
|
this.toaster.success(this._LocalizationService.instant(`Cms::SavedSuccessfully`));
|
|
360
|
-
this._location.back();
|
|
317
|
+
// this._location.back();
|
|
318
|
+
this._LocationBackService.backTo({
|
|
319
|
+
url: `/cms/admin/fields`,
|
|
320
|
+
replenish: '/edit'
|
|
321
|
+
});
|
|
361
322
|
this._UpdateListService.updateList();
|
|
362
323
|
});
|
|
363
324
|
return;
|
|
@@ -370,7 +331,11 @@ export class CreateOrEditComponent {
|
|
|
370
331
|
}))
|
|
371
332
|
.subscribe(res => {
|
|
372
333
|
this.toaster.success(this._LocalizationService.instant(`Cms::SavedSuccessfully`));
|
|
373
|
-
this._location.back();
|
|
334
|
+
// this._location.back();
|
|
335
|
+
this._LocationBackService.backTo({
|
|
336
|
+
url: `/cms/admin/sections`,
|
|
337
|
+
replenish: '/create'
|
|
338
|
+
});
|
|
374
339
|
this._UpdateListService.updateList();
|
|
375
340
|
});
|
|
376
341
|
}
|
|
@@ -432,9 +397,9 @@ export class CreateOrEditComponent {
|
|
|
432
397
|
/**删除tab标签后还原 fieldGroupList */
|
|
433
398
|
deleteTabFieldGroupList(deleteFields) {
|
|
434
399
|
//原数据
|
|
435
|
-
const fieldList =
|
|
400
|
+
const fieldList = structuredClone(this.fieldList);
|
|
436
401
|
//右侧手风琴数据
|
|
437
|
-
const formRightGroup =
|
|
402
|
+
const formRightGroup = structuredClone(this.formRightGroup);
|
|
438
403
|
// 获取要删除的原数据
|
|
439
404
|
const deleteFieldList = fieldList.filter(el => deleteFields.map(item => item.id).includes(el.id));
|
|
440
405
|
deleteFieldList.forEach(item => {
|
|
@@ -473,19 +438,27 @@ export class CreateOrEditComponent {
|
|
|
473
438
|
editFieldSave() {
|
|
474
439
|
const input = this.editFieldFrom.value;
|
|
475
440
|
this.resultSource[this.navActive].fields[this.EditFieldIndex].displayName = input.displayName;
|
|
476
|
-
// this.resultSource[this.navActive].fields[this.EditFieldIndex].required = input.required;
|
|
477
|
-
// this.resultSource[this.navActive].fields[this.EditFieldIndex].showInList = input.showInList;
|
|
478
|
-
// this.resultSource[this.navActive].fields[this.EditFieldIndex].enableSearch = input.enableSearch;
|
|
479
441
|
this.visibleEditFieldOpen = false;
|
|
480
442
|
this.setfieldTabsFrom();
|
|
481
443
|
}
|
|
482
444
|
/**点击“字段布局”复选框事件 */
|
|
483
445
|
checkboxChange(event, input) {
|
|
484
446
|
const { checked, name } = event.target;
|
|
485
|
-
const {
|
|
447
|
+
const { index } = input;
|
|
486
448
|
this.resultSource[this.navActive].fields[index][name] = checked;
|
|
487
449
|
this.setfieldTabsFrom();
|
|
488
|
-
|
|
450
|
+
this.setAllSelectStauts();
|
|
451
|
+
// console.log(event.target,'点击“字段布局”复选框事件 ',event,input,'resultSource',this.resultSource,'newEntity',this.newEntity);
|
|
452
|
+
}
|
|
453
|
+
/**全选状态改变 */
|
|
454
|
+
allSelectChange(event, name) {
|
|
455
|
+
const { checked } = event.target;
|
|
456
|
+
this.resultSource[this.navActive].fields.forEach(el => {
|
|
457
|
+
el[name] = checked;
|
|
458
|
+
});
|
|
459
|
+
console.log(this.resultSource[this.navActive].fields, 'this.resultSource[this.navActive].fields', name, checked);
|
|
460
|
+
this.setfieldTabsFrom();
|
|
461
|
+
this.setAllSelectStauts();
|
|
489
462
|
}
|
|
490
463
|
/**name表单控件 */
|
|
491
464
|
get nameInput() {
|
|
@@ -494,19 +467,19 @@ export class CreateOrEditComponent {
|
|
|
494
467
|
/**字段标签input失去标点生成字段名字 */
|
|
495
468
|
disPlayNameInputBlur(event) {
|
|
496
469
|
const value = event.target.value;
|
|
497
|
-
const pinyin = this.
|
|
470
|
+
const pinyin = this.toPinyinService.get(value);
|
|
498
471
|
const nameInput = this.nameInput;
|
|
499
472
|
if (nameInput.value)
|
|
500
473
|
return;
|
|
501
474
|
nameInput.patchValue(pinyin);
|
|
502
475
|
}
|
|
503
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, deps: [{ token: i1.ToasterService }, { token: i2.
|
|
476
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, deps: [{ token: i1.ToasterService }, { token: i2.LocationBackService }, { token: i3.ActivatedRoute }, { token: i4.FieldGroupAdminService }, { token: i4.FieldAdminService }, { token: i5.EntryTypeAdminService }, { token: i6.LocalizationService }, { token: i7.FormControlsService }, { token: i2.ToPinyinService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
504
477
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: CreateOrEditComponent, selector: "cms-create-or-edit", providers: [
|
|
505
478
|
{
|
|
506
479
|
provide: EXTENSIONS_IDENTIFIER,
|
|
507
480
|
useValue: ECmsComponent.SectionsCreateOrEdit,
|
|
508
481
|
},
|
|
509
|
-
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "editFieldTabsModalSubmitBtn", first: true, predicate: ["editFieldTabsModalSubmitBtn"], descendants: true }, { propertyName: "editFieldModalSubmitBtn", first: true, predicate: ["editFieldModalSubmitBtn"], descendants: true }], ngImport: i0, template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\"\n role=\"presentation\">\n <button type=\"button\" ngbNavLink class=\"nav-link\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <table class=\"table\">\n <thead>\n <th></th>\n <th>{{'Cms::DisplayName' | abpLocalization}}\n </th>\n <th>{{'Cms::Required' | abpLocalization}}</th>\n <th>{{'Cms::ShowInList' | abpLocalization}}</th>\n <th>{{'Cms::EnableSearch' | abpLocalization}}\n </th>\n <th></th>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <tr draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\">\n <td >\n <div class=\"drag-handle d-inline\" \n cdkDragHandle>\n <span\n class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n \n <td>{{ el.displayName }}</td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.required\" name=\"required\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.showInList\" name=\"showInList\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.enableSearch\" name=\"enableSearch\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td style=\"width: 1%;\"> \n <button\n class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n\n <!-- <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul> -->\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n<!-- \u7528\u4E8E\u521B\u5EFA\u7F16\u8F91tab\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n<!-- \u7528\u4E8E\u4FEE\u6539\u5B57\u6BB5\u914D\u7F6E\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <!-- <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div> -->\n <!-- @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n } -->\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i6.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i10.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i10.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i11.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i11.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i11.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i11.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i11.NgbNavLinkButton, selector: "button[ngbNavLink]" }, { kind: "directive", type: i11.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i11.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i11.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i11.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i11.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i11.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i11.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i11.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i11.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i11.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i11.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i11.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i6.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
482
|
+
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "editFieldTabsModalSubmitBtn", first: true, predicate: ["editFieldTabsModalSubmitBtn"], descendants: true }, { propertyName: "editFieldModalSubmitBtn", first: true, predicate: ["editFieldModalSubmitBtn"], descendants: true }], ngImport: i0, template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\"\n role=\"presentation\">\n <button type=\"button\" ngbNavLink class=\"nav-link\" (click.stop)=\"setAllSelectStauts()\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <table class=\"table\" *ngIf=\"item.fields.length>0\">\n <thead>\n <th></th>\n <th>{{'Cms::DisplayName' | abpLocalization}}\n </th>\n <th>\n <div class=\"d-flex align-items-center p-0\">\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input me-1\" [checked]=\"isAllSelect.isRequired\" (change)=\"allSelectChange($event,'required')\" />{{'Cms::Required' | abpLocalization}}\n </div>\n \n </th>\n <th>\n <div class=\"d-flex align-items-center p-0\">\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input me-1\" [checked]=\"isAllSelect.isShowInList\" (change)=\"allSelectChange($event,'showInList')\" />{{'Cms::ShowInList' | abpLocalization}}\n </div>\n </th>\n <th>\n <div class=\"d-flex align-items-center p-0\">\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input me-1\" [checked]=\"isAllSelect.isEnableSearch\" (change)=\"allSelectChange($event,'enableSearch')\" />{{'Cms::EnableSearch' | abpLocalization}}\n </div>\n </th>\n <th></th>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <tr draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\">\n <td >\n <div class=\"drag-handle d-inline\" \n cdkDragHandle>\n <span\n class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n \n <td>{{ el.displayName }}</td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.required\" name=\"required\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.showInList\" name=\"showInList\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.enableSearch\" name=\"enableSearch\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td style=\"width: 1%;\"> \n <button\n class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n\n <!-- <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul> -->\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n<!-- \u7528\u4E8E\u521B\u5EFA\u7F16\u8F91tab\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n<!-- \u7528\u4E8E\u4FEE\u6539\u5B57\u6BB5\u914D\u7F6E\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <!-- <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div> -->\n <!-- @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n } -->\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i6.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i10.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i10.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i11.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i11.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i11.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i11.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i11.NgbNavLinkButton, selector: "button[ngbNavLink]" }, { kind: "directive", type: i11.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i11.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i11.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i11.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i11.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i11.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i11.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i11.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i11.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i11.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i11.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i11.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i6.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
510
483
|
}
|
|
511
484
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, decorators: [{
|
|
512
485
|
type: Component,
|
|
@@ -515,8 +488,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
515
488
|
provide: EXTENSIONS_IDENTIFIER,
|
|
516
489
|
useValue: ECmsComponent.SectionsCreateOrEdit,
|
|
517
490
|
},
|
|
518
|
-
], template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\"\n role=\"presentation\">\n <button type=\"button\" ngbNavLink class=\"nav-link\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <table class=\"table\">\n <thead>\n <th></th>\n <th>{{'Cms::DisplayName' | abpLocalization}}\n </th>\n <th>{{'Cms::Required' | abpLocalization}}</th>\n <th>{{'Cms::ShowInList' | abpLocalization}}</th>\n <th>{{'Cms::EnableSearch' | abpLocalization}}\n </th>\n <th></th>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <tr draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\">\n <td >\n <div class=\"drag-handle d-inline\" \n cdkDragHandle>\n <span\n class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n \n <td>{{ el.displayName }}</td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.required\" name=\"required\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.showInList\" name=\"showInList\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.enableSearch\" name=\"enableSearch\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td style=\"width: 1%;\"> \n <button\n class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n\n <!-- <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul> -->\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n<!-- \u7528\u4E8E\u521B\u5EFA\u7F16\u8F91tab\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n<!-- \u7528\u4E8E\u4FEE\u6539\u5B57\u6BB5\u914D\u7F6E\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <!-- <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div> -->\n <!-- @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n } -->\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"] }]
|
|
519
|
-
}], ctorParameters: () => [{ type: i1.ToasterService }, { type: i2.
|
|
491
|
+
], template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\"\n role=\"presentation\">\n <button type=\"button\" ngbNavLink class=\"nav-link\" (click.stop)=\"setAllSelectStauts()\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <table class=\"table\" *ngIf=\"item.fields.length>0\">\n <thead>\n <th></th>\n <th>{{'Cms::DisplayName' | abpLocalization}}\n </th>\n <th>\n <div class=\"d-flex align-items-center p-0\">\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input me-1\" [checked]=\"isAllSelect.isRequired\" (change)=\"allSelectChange($event,'required')\" />{{'Cms::Required' | abpLocalization}}\n </div>\n \n </th>\n <th>\n <div class=\"d-flex align-items-center p-0\">\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input me-1\" [checked]=\"isAllSelect.isShowInList\" (change)=\"allSelectChange($event,'showInList')\" />{{'Cms::ShowInList' | abpLocalization}}\n </div>\n </th>\n <th>\n <div class=\"d-flex align-items-center p-0\">\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input me-1\" [checked]=\"isAllSelect.isEnableSearch\" (change)=\"allSelectChange($event,'enableSearch')\" />{{'Cms::EnableSearch' | abpLocalization}}\n </div>\n </th>\n <th></th>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <tr draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\">\n <td >\n <div class=\"drag-handle d-inline\" \n cdkDragHandle>\n <span\n class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n \n <td>{{ el.displayName }}</td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.required\" name=\"required\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.showInList\" name=\"showInList\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.enableSearch\" name=\"enableSearch\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td style=\"width: 1%;\"> \n <button\n class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n\n <!-- <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul> -->\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n<!-- \u7528\u4E8E\u521B\u5EFA\u7F16\u8F91tab\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n<!-- \u7528\u4E8E\u4FEE\u6539\u5B57\u6BB5\u914D\u7F6E\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <!-- <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div> -->\n <!-- @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n } -->\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"] }]
|
|
492
|
+
}], ctorParameters: () => [{ type: i1.ToasterService }, { type: i2.LocationBackService }, { type: i3.ActivatedRoute }, { type: i4.FieldGroupAdminService }, { type: i4.FieldAdminService }, { type: i5.EntryTypeAdminService }, { type: i6.LocalizationService }, { type: i7.FormControlsService }, { type: i2.ToPinyinService }], propDecorators: { submitclick: [{
|
|
520
493
|
type: ViewChild,
|
|
521
494
|
args: ['submitclick', { static: true }]
|
|
522
495
|
}], editFieldTabsModalSubmitBtn: [{
|
|
@@ -526,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
526
499
|
type: ViewChild,
|
|
527
500
|
args: ['editFieldModalSubmitBtn', { static: false }]
|
|
528
501
|
}] } });
|
|
529
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zZWN0aW9ucy9lbnRyeS10eXBlcy9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NlY3Rpb25zL2VudHJ5LXR5cGVzL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBDQUEwQztBQUMxQyx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGFBQWEsRUFDYixVQUFVLEdBQ1gsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixzQkFBc0IsR0FDdkIsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBWWpGLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsWUFDVSxPQUF1QixFQUN4QixTQUFtQixFQUNsQixLQUFxQixFQUN0Qix1QkFBK0MsRUFDL0Msa0JBQXFDLEVBQ3JDLHNCQUE2QyxFQUM3QyxvQkFBeUMsRUFDekMsY0FBNkIsRUFDN0Isb0JBQXlDO1FBUnhDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDdEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUMvQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0MseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBRTFDLE9BQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekIsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFHdkQsVUFBVTtRQUNWLGNBQVMsR0FBaUIsRUFBRSxDQUFDO1FBQzdCLFlBQVk7UUFDWixpQkFBWSxHQUFpQixFQUFFLENBQUM7UUFnQmhDLGlCQUFpQjtRQUNqQix5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFDakMsa0JBQWtCO1FBQ2xCLDBCQUFxQixHQUFVLEVBQUUsQ0FBQztRQW9LbEM7a0JBQ1U7UUFDVixTQUFTO1FBQ1QsOEJBQThCO1FBQzlCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGdCQUFnQjtRQUNoQixjQUFTLEdBQVUsRUFBRSxDQUFDO1FBS3RCLFdBQVc7UUFDWCxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQU96QixrQ0FBa0M7UUFDbEMsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUF5R25CLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZEOzs7O1dBSUc7UUFDSCxtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQUN6QixhQUFRLEdBQWtCLEtBQUssQ0FBQztRQTBDaEMsV0FBVztRQUNYLG9CQUFlLEdBQWtCLEtBQUssQ0FBQztRQUN2QyxhQUFhO1FBQ2IsY0FBUyxHQUFrQixLQUFLLENBQUM7UUFHakMsY0FBYztRQUNkLGNBQVMsR0FBUSxDQUFDLENBQUM7UUErRm5CLGVBQWU7UUFDZix5QkFBb0IsR0FBa0IsS0FBSyxDQUFDO1FBYzVDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUFrQixJQUFJLENBQUM7SUFuZWxDLENBQUM7SUFZSixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBYyxDQUFDO0lBQ3ZELENBQUM7SUFLRCxZQUFZO0lBQ1osY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFNRCxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDeEQsUUFBUTtRQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDbEUsTUFBTTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDLENBQUM7UUFDckUsRUFBRTtRQUNGLHVGQUF1RjtRQUN2RixvRkFBb0Y7UUFDcEYsbUJBQW1CO1FBQ25CLGdDQUFnQztRQUNoQyxrQ0FBa0M7UUFDbEMsMEJBQTBCO1FBQzFCLElBQUk7UUFDSixVQUFVO1FBQ1YsSUFBRyxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUM7WUFDcEIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELFFBQVE7UUFDUixNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxVQUFVO0lBQ1YsV0FBVztRQUNULE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixDQUFDO2lCQUFJLENBQUM7Z0JBQ0osR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM3QixFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUM3QixHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7d0JBQ3JCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzlCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdkUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUM3QyxFQUFFLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDcEMsQ0FBQztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUI7SUFDckIscUJBQXFCLENBQUMsU0FBUyxHQUFHLEVBQUU7UUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELFlBQVk7YUFDVCxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ1osRUFBRSxVQUFVLENBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDcEQsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZO0lBQ1osYUFBYTtRQUNYLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUM3RCxNQUFNLFNBQVMsR0FBUSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxjQUFjLEdBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDdEMsY0FBYyxDQUFDLE9BQU8sQ0FBQztvQkFDckIsRUFBRSxFQUFFLElBQUk7b0JBQ1IsSUFBSSxFQUFFLGlCQUFpQjtpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3hDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMzQywwQ0FBMEM7Z0JBQzFDLHNCQUFzQjtnQkFDdEIsc0NBQXNDO2dCQUN0QywwQkFBMEI7Z0JBQzFCLElBQUk7Z0JBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxjQUFjO0lBQ2QsYUFBYTtRQUNYLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsNERBQTREO1FBQzVELHdFQUF3RTtRQUN4RSxxQ0FBcUM7UUFDckMsMkNBQTJDO1FBQzNDLGlDQUFpQztRQUNqQyxpRkFBaUY7UUFDakYsMENBQTBDO1FBQzFDLG1GQUFtRjtRQUNuRiw0Q0FBNEM7UUFDNUMsYUFBYTtRQUNiLFdBQVc7UUFDWCx5REFBeUQ7UUFDekQscUVBQXFFO1FBQ3JFLFdBQVc7UUFDWCx3Q0FBd0M7UUFDeEMsaUNBQWlDO1FBQ2pDLDBDQUEwQztRQUMxQyxNQUFNO0lBQ1IsQ0FBQztJQUNEOzsyQkFFdUI7SUFDdkIsU0FBUyxDQUFDLEdBQVE7UUFDaEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUk7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ3RELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO3dCQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQzdDLENBQUM7eUJBQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDckMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQjtpQkFDcEIsT0FBTyxDQUFDO2dCQUNQLGNBQWMsRUFBRSxJQUFJO2FBQ3JCLENBQUM7aUJBQ0QsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNyQixFQUFFLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsRUFBRSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLEVBQUUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBdUJELGNBQWM7SUFDZCx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVU7UUFDckQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUM7UUFDdkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsY0FBYztJQUNkLHlCQUF5QixDQUFDLE9BQU87UUFDL0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsZUFBZTtJQUNmLHVCQUF1QjtRQUNyQixlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixXQUFXO1FBQ2IsQ0FBQztRQUNELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUM1QixJQUFJO1lBQ0osWUFBWTtZQUNaLFdBQVc7WUFDWCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQzlFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxFQUFFLENBQzFDLENBQUM7WUFDRixXQUFXO1lBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRSxjQUFjLENBQUMsTUFBTSxDQUNuQixjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsRUFDbkUsQ0FBQyxDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUM3QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25FLEVBQUUsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDNUQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNEOztPQUVHO0lBQ0gseUJBQXlCLENBQUMsWUFBaUIsRUFBRSxjQUFjO1FBQ3pELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ3hELFlBQVk7UUFDWixJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDL0QsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixDQUFDLENBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxnQkFBZ0I7SUFDaEIsNkJBQTZCLENBQUMsV0FBVztRQUN2QyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUM1RCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDNUIsV0FBVztZQUNYLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDOUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLHVCQUF1QixDQUFDLEVBQUUsQ0FDMUMsQ0FBQztZQUNGLFdBQVc7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsZUFBZTtJQUNmLGdCQUFnQjtRQUNkLE1BQU0sUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QixNQUFNLFdBQVcsR0FBVSxFQUFFLENBQUM7WUFDOUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZCLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU87b0JBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRO29CQUN4QixVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVU7b0JBQzVCLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWTtpQkFDakMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtnQkFDYixNQUFNLEVBQUUsV0FBVzthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFTRCxVQUFVO0lBQ1YsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1FBRXBDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUM7WUFDakUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsc0JBQXNCO2lCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7aUJBQ3ZDLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztnQkFDbEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLHNCQUFzQjthQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUNILFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQWdCRCxlQUFlO0lBQ2YsaUJBQWlCLENBQUMsS0FBSztRQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUNELG1CQUFtQjtJQUNuQixZQUFZO1FBQ1YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFHRCxpQkFBaUI7SUFDakIsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztZQUNoQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJO1FBQ0osSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUN2RixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUk7WUFDSixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxnQkFBZ0I7SUFDaEIsZUFBZSxDQUFDLEtBQUs7UUFDbkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsU0FBUztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFHLElBQUksQ0FBQyxTQUFTLEtBQUcsS0FBSyxFQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBQyxLQUFLLEVBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLHVCQUF1QixDQUFDLFlBQVk7UUFDbEMsS0FBSztRQUNMLE1BQU0sU0FBUyxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLFNBQVM7UUFDVCxNQUFNLGNBQWMsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV6RCxZQUFZO1FBQ1osTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUEsRUFBRSxDQUFBLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFFO1FBQ2pHLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBLEVBQUU7WUFDNUIsTUFBTSxLQUFLLEdBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUEsRUFBRSxDQUFBLEVBQUUsQ0FBQyxFQUFFLEtBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELGNBQWMsQ0FBQyxNQUFNLENBQ25CLEtBQUssRUFDTCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSx1QkFBdUIsR0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQSxFQUFFLENBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQy9CLElBQUssdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLEVBQUUsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDNUQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUMsY0FBYyxDQUFDO1FBRW5DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFVRCxxQkFBcUI7SUFDckIsc0JBQXNCLENBQUMsS0FBSztRQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFHRCxlQUFlO0lBQ2Ysa0JBQWtCLENBQUMsS0FBSyxFQUFFLE9BQU87UUFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLGlHQUFpRztRQUNqRyxpR0FBaUc7UUFDakcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxZQUFZO0lBQ1osYUFBYTtRQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDOUYsMkZBQTJGO1FBQzNGLCtGQUErRjtRQUMvRixtR0FBbUc7UUFDbkcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLGNBQWMsQ0FBQyxLQUFLLEVBQUMsS0FBSztRQUN4QixNQUFNLEVBQUMsT0FBTyxFQUFDLElBQUksRUFBQyxHQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEMsTUFBTSxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsR0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLE9BQU8sQ0FBQztRQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUMsZ0JBQWdCLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxjQUFjLEVBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFNRCxjQUFjO0lBQ2QsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QseUJBQXlCO0lBQ3pCLG9CQUFvQixDQUFDLEtBQUs7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLFNBQVMsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUM1QixTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7OEdBN2hCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw2Q0FQckI7WUFDVDtnQkFDRSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLG9CQUFvQjthQUM3QztTQUNGLHNZQ2xDSCxpbW5CQWtRWTs7MkZEOU5DLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0I7eUJBQzdDO3FCQUNGO2dWQThCMkMsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXVXMUMsMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFpR0YsdUJBQXVCO3NCQUEvRSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuaW1wb3J0IHsgRVhURU5TSU9OU19JREVOVElGSUVSIH0gZnJvbSAnQGFicC9uZy5jb21wb25lbnRzL2V4dGVuc2libGUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ21zQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIENyZWF0ZU9yRWRpdEVudHJ5VHlwZUlucHV0QmFzZSxcbiAgZmllbGRUYWJzQmFzZSxcbiAgZmllbGRzQmFzZSxcbn0gZnJvbSAnLi9jcmVhdGUtb3ItZWRpdC4tZW50cnktdHlwZS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVDbXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzU2VydmljZSB9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcbmltcG9ydCB7IFVwZGF0ZUxpc3RTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEZpZWxkQWRtaW5TZXJ2aWNlLFxuICBGaWVsZEdyb3VwQWRtaW5TZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi8uLi9wcm94eS9kaWduaXRlL2Ntcy9hZG1pbi9maWVsZHMnO1xuaW1wb3J0IHsgRW50cnlUeXBlQWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJveHkvZGlnbml0ZS9jbXMvYWRtaW4vc2VjdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tY29udHJvbHMuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbXMtY3JlYXRlLW9yLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFWFRFTlNJT05TX0lERU5USUZJRVIsXG4gICAgICB1c2VWYWx1ZTogRUNtc0NvbXBvbmVudC5TZWN0aW9uc0NyZWF0ZU9yRWRpdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBfbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHB1YmxpYyBfRmllbGRHcm91cEFkbWluU2VydmljZTogRmllbGRHcm91cEFkbWluU2VydmljZSxcbiAgICBwdWJsaWMgX0ZpZWxkQWRtaW5TZXJ2aWNlOiBGaWVsZEFkbWluU2VydmljZSxcbiAgICBwdWJsaWMgX0VudHJ5VHlwZUFkbWluU2VydmljZTogRW50cnlUeXBlQWRtaW5TZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgX0Ntc0FwaVNlcnZpY2U6IENtc0FwaVNlcnZpY2UsXG4gICAgcHVibGljIF9Gb3JtQ29udHJvbHNTZXJ2aWNlOiBGb3JtQ29udHJvbHNTZXJ2aWNlLFxuICApIHt9XG4gIHByaXZhdGUgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIF9VcGRhdGVMaXN0U2VydmljZSA9IGluamVjdChVcGRhdGVMaXN0U2VydmljZSk7XG4gIC8qKuihqOWNleWunuS9kyAqL1xuICBuZXdFbnRpdHk6IEZvcm1Hcm91cCB8IGFueTtcbiAgLyoq54mI5Z2XaWQgKi9cbiAgc2VjdGlvbklkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu57G75Z6LaWQgKi9cbiAgZW50cnlUeXBlc0lkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu57G75Z6L6K+m5oOFICovXG4gIGVudHJ5VHlwZXNTZWxlY3Q6IGFueTtcblxuICBnZXQgZmllbGRUYWJzKCkge1xuICAgIHJldHVybiB0aGlzLm5ld0VudGl0eT8uZ2V0KCdmaWVsZFRhYnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICAvKirojrflj5bmj5DkuqTmjInpkq7mm7/ouqvvvIznlKjkuo7nnJ/lrp7op6blj5HooajljZXmj5DkuqQgKi9cbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcblxuICAvKirop6blj5Hmj5DkuqTmjInpkq4gKi9cbiAgc3VibWl0Y2xpY2tCdG4oKSB7XG4gICAgdGhpcy5zdWJtaXRjbGljay5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICAvKirpnIDopoHmn6Xor6LnmoTliqjmgIHooajljZXnsbvlnosgKi9cbiAgZW5hYmxlU2VhcmNoVHlwZUxpc3Q6IGFueVtdID0gW107XG4gIC8qKuS4jemcgOimgeWxleekuueahOWKqOaAgeihqOWNleexu+WeiyAqL1xuICBkaXNhYmxlc2hvd2luVHlwZUxpc3Q6IGFueVtdID0gW107XG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNlY3Rpb25JZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnNlY3Rpb25zSWQ7XG4gICAgLy/mnaHnm67nsbvlnotpZFxuICAgIHRoaXMuZW50cnlUeXBlc0lkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZW50cnlUeXBlc0lkIHx8ICcnO1xuICAgIC8v5p2/5Z2XaWRcbiAgICB0aGlzLnNlY3Rpb25JZCA9IHNlY3Rpb25JZDtcbiAgICB0aGlzLm5ld0VudGl0eSA9IHRoaXMuZmIuZ3JvdXAobmV3IENyZWF0ZU9yRWRpdEVudHJ5VHlwZUlucHV0QmFzZSgpKTtcbiAgICAvL1xuICAgIC8vIHRoaXMuZW5hYmxlU2VhcmNoVHlwZUxpc3Q9YXdhaXQgdGhpcy5fRm9ybUNvbnRyb2xzU2VydmljZS5nZXRFbmFibGVTZWFyY2hUeXBlTGlzdCgpO1xuICAgIC8vIHRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0PSB0aGlzLl9Gb3JtQ29udHJvbHNTZXJ2aWNlLmdldGRpc2FibGVzaG93aW5UeXBlTGlzdCgpO1xuICAgIC8vIGlmIChzZWN0aW9uSWQpIHtcbiAgICAvLyAgIHRoaXMuc2VjdGlvbklkID0gc2VjdGlvbklkO1xuICAgIC8vICAgdGhpcy5hZGRDb250cm9sVG9GaWVsZFRhYnMoKTtcbiAgICAvLyAgIHRoaXMuZ2V0RmllbGRHcm91cCgpO1xuICAgIC8vIH1cbiAgICAvL+iOt+WPluadoeebruexu+Wei+ivpuaDhVxuICAgIGlmKHRoaXMuZW50cnlUeXBlc0lkKXtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RW50cnlUeXBlcygpO1xuICAgIH1cbiAgICAvL+iOt+WPluWtl+auteWIhue7hFxuICAgIGF3YWl0IHRoaXMuZ2V0RmllbGRHcm91cCgpO1xuICAgIC8v5aSE55CG5pWw5o2uXG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG4gIC8qKuWkhOeQhuaVsOaNriAqL1xuICBwcm9jZXNzRGF0YSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkTGlzdDogYW55ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5maWVsZExpc3QpO1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5lbnRyeVR5cGVzU2VsZWN0O1xuICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgdGhpcy5hZGRDb250cm9sVG9GaWVsZFRhYnMoKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXMuZmllbGRUYWJzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkQ29udHJvbFRvRmllbGRUYWJzKCk7XG4gICAgICAgICAgZWwuZmllbGRzLmZvckVhY2goKGVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBlbGQuaWQgPSBlbGQuZmllbGRJZDtcbiAgICAgICAgICAgIGVsZC5ncm91cElkID0gZmllbGRMaXN0LmZpbmQoZWxmZCA9PiBlbGZkLmlkID09IGVsZC5maWVsZElkKS5ncm91cElkO1xuICAgICAgICAgICAgdGhpcy5mb3JtUmlnaHRHcm91cC5wdXNoKGVsZCk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZGluZGV4ID0gZmllbGRMaXN0LmZpbmRJbmRleChlbGZsID0+IGVsZmwuaWQgPT0gZWxkLmZpZWxkSWQpO1xuICAgICAgICAgICAgZmllbGRMaXN0LnNwbGljZShmaWVsZGluZGV4LCAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmllbGRHcm91cExpc3QuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBlbC5maWVsZHMgPSBmaWVsZExpc3QuZmlsdGVyKGVscyA9PiBlbHMuZ3JvdXBJZCA9PT0gZWwuaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uZXdFbnRpdHk/LnBhdGNoVmFsdWUocmVzKTtcbiAgICAgICAgdGhpcy5uYXZBY3RpdmUgPSAwO1xuICAgICAgICB0aGlzLnJlc3VsdFNvdXJjZSA9IHJlcy5maWVsZFRhYnM7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoq57uZZmllbGRUYWJz5re75Yqg5paw5o6n5Lu2ICovXG4gIGFkZENvbnRyb2xUb0ZpZWxkVGFicyhuYW1lVmFsdWUgPSAnJykge1xuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAobmV3IGZpZWxkVGFic0Jhc2UoKSk7XG4gICAgbmV3Rm9ybUdyb3VwXG4gICAgICAuZ2V0KCduYW1lJylcbiAgICAgID8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy5maWVsZFRhYnMubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyB0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6RmllbGRUYWJgKVxuICAgICAgICAgIDogbmFtZVZhbHVlLFxuICAgICAgKTtcbiAgICB0aGlzLmZpZWxkVGFicy5wdXNoKG5ld0Zvcm1Hcm91cCk7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2UucHVzaChuZXdGb3JtR3JvdXAudmFsdWUpO1xuICAgIHRoaXMubmF2QWN0aXZlID0gdGhpcy5yZXN1bHRTb3VyY2UubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKuiOt+WPluWtl+auteWIhue7hCAqL1xuICBnZXRGaWVsZEdyb3VwKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRmllbGRHcm91cEFkbWluU2VydmljZS5nZXRMaXN0KHt9KS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRMaXN0OiBhbnkgPSBhd2FpdCB0aGlzLmdldEZpZWxkTGlzdCgpO1xuICAgICAgICBjb25zdCBmaWVsZEdyb3VwTGlzdDogYW55ID0gcmVzLml0ZW1zO1xuICAgICAgICBmaWVsZEdyb3VwTGlzdC51bnNoaWZ0KHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICBuYW1lOiAnVW5ncm91cGVkRmllbGRzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkR3JvdXBMaXN0LmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgZWwuZmllbGRzID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmllbGRHcm91cExpc3QgPSBmaWVsZEdyb3VwTGlzdDtcbiAgICAgICAgdGhpcy5maWVsZExpc3QgPSB0aGlzLmRlZXBDbG9uZShmaWVsZExpc3QpO1xuICAgICAgICAvLyBjb25zdCBlbnRyeVR5cGVzSWQgPSB0aGlzLmVudHJ5VHlwZXNJZDtcbiAgICAgICAgLy8gaWYgKGVudHJ5VHlwZXNJZCkge1xuICAgICAgICAvLyAgIHRoaXMuZW50cnlUeXBlc0lkID0gZW50cnlUeXBlc0lkO1xuICAgICAgICAvLyAgIHRoaXMuZ2V0RW50cnlUeXBlcygpO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKuiOt+WPluadoeebruexu+Wei+ivpuaDhSAqL1xuICBnZXRFbnRyeVR5cGVzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlLmdldCh0aGlzLmVudHJ5VHlwZXNJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuZW50cnlUeXBlc1NlbGVjdCA9IHJlcztcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gLy8gY29uc3QgZmllbGRMaXN0OiBhbnkgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG4gICAgLy8gdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlLmdldCh0aGlzLmVudHJ5VHlwZXNJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgLy8gICAvLyByZXMuZmllbGRUYWJzLmZvckVhY2goZWwgPT4ge1xuICAgIC8vICAgLy8gICBlbC5maWVsZHMuZm9yRWFjaCgoZWxkOiBhbnkpID0+IHtcbiAgICAvLyAgIC8vICAgICBlbGQuaWQgPSBlbGQuZmllbGRJZDtcbiAgICAvLyAgIC8vICAgICBlbGQuZ3JvdXBJZCA9IGZpZWxkTGlzdC5maW5kKGVsZmQgPT4gZWxmZC5pZCA9PSBlbGQuZmllbGRJZCkuZ3JvdXBJZDtcbiAgICAvLyAgIC8vICAgICB0aGlzLmZvcm1SaWdodEdyb3VwLnB1c2goZWxkKTtcbiAgICAvLyAgIC8vICAgICBjb25zdCBmaWVsZGluZGV4ID0gZmllbGRMaXN0LmZpbmRJbmRleChlbGZsID0+IGVsZmwuaWQgPT0gZWxkLmZpZWxkSWQpO1xuICAgIC8vICAgLy8gICAgIGZpZWxkTGlzdC5zcGxpY2UoZmllbGRpbmRleCwgMSk7XG4gICAgLy8gICAvLyAgIH0pO1xuICAgIC8vICAgLy8gfSk7XG4gICAgLy8gICAvLyB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgLy8gICAvLyAgIGVsLmZpZWxkcyA9IGZpZWxkTGlzdC5maWx0ZXIoZWxzID0+IGVscy5ncm91cElkID09PSBlbC5pZCk7XG4gICAgLy8gICAvLyB9KTtcbiAgICAvLyAgIC8vIHRoaXMubmV3RW50aXR5Py5wYXRjaFZhbHVlKHJlcyk7XG4gICAgLy8gICB0aGlzLmVudHJ5VHlwZXNTZWxlY3QgPSByZXM7XG4gICAgLy8gICAvLyB0aGlzLnJlc3VsdFNvdXJjZSA9IHJlcy5maWVsZFRhYnM7XG4gICAgLy8gfSk7XG4gIH1cbiAgLyoqXG4gICAqIOa3seaLt+i0nS0t5pa55rOVXG4gICAqICRhcGkuZGVlcENsb25lKCkgICovXG4gIGRlZXBDbG9uZShvYmo6IGFueSkge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBvYmo7XG4gICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuaXNBcnJheShvYmopID8gW10gOiB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JyAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChvYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbmV3IERhdGUob2JqW2tleV0uZ2V0VGltZSgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9ialtrZXldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAob2JqW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZGVlcENsb25lKG9ialtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZVZhbHVlIOiOt+WPluaJgOacieWtl+autVxuICAgKi9cbiAgZ2V0RmllbGRMaXN0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRmllbGRBZG1pblNlcnZpY2VcbiAgICAgICAgLmdldExpc3Qoe1xuICAgICAgICAgIG1heFJlc3VsdENvdW50OiAxMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcy5pdGVtcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBlbC5zaG93SW5MaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICBlbC5lbmFibGVTZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNvbHZlKHJlcy5pdGVtcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOaLluaLvSDlip/og70qL1xuICAvKirmlbDmja7mupAgKi9cbiAgLyoq5pWw5o2u5rqQLeWtl+auteWIhue7hOaVsOaNri3ljIXlkKvlrZfmrrXmlbDmja4gZmllbGRzICovXG4gIGZpZWxkR3JvdXBMaXN0OiBhbnlbXSA9IFtdO1xuICAvKirmlbDmja7mupAt5omA5pyJ5a2X5q615YiX6KGoICovXG4gIGZpZWxkTGlzdDogYW55W10gPSBbXTtcbiAgLyoq5pWw5o2u5rqQ5ouW5ou955qE5YiG57uE5LiL5qCHICovXG4gIERhdGFTb3VyY2VHcm91cEluZGV4OiBudW1iZXIgfCBhbnk7XG4gIC8qKuaVsOaNrua6kOaLluaLveeahOWtl+auteS4i+aghyAqL1xuICBEYXRhU291cmNlRmllbGRJbmRleDogbnVtYmVyIHwgYW55O1xuICAvKirnm67moIfmupAg57uT5p6cKi9cbiAgcmVzdWx0U291cmNlOiBhbnlbXSA9IFtdO1xuXG4gIC8qKuS7juaVsOaNrua6kOaLluaLveeahOWFg+e0oCAqL1xuICBmcm9tRGF0YVNvdXJjZURyYWdFbDogYW55O1xuICAvKirku47nm67moIfmupDmi5bmi73nmoTlhYPntKAgKi9cbiAgZnJvbVJlc3VsdFNvdXJjZURyYWdFbDogYW55O1xuXG4gIC8qKuadpeiHquaVsOaNrua6kOeahOmbhuWQiO+8jOeUqOS6juS7juebruagh+a6kOaLluWbnuaVsOaNrua6kOaXtueahOWIpOaWre+8jOS4juWPluWAvCAqL1xuICBmb3JtUmlnaHRHcm91cDogYW55W10gPSBbXTtcbiAgLyoq5LuO5pWw5o2u5rqQ5byA5aeL5ouW5ou9ICovXG4gIGZyb21EYXRhU291cmNlRHJhZ1N0YXJ0KGVsZW1lbnQsIGZpZWxkSW5kZXgsIGdyb3VwSW5kZXgpIHtcbiAgICB0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsID0gZWxlbWVudDtcbiAgICB0aGlzLkRhdGFTb3VyY2VGaWVsZEluZGV4ID0gZmllbGRJbmRleDtcbiAgICB0aGlzLkRhdGFTb3VyY2VHcm91cEluZGV4ID0gZ3JvdXBJbmRleDtcbiAgICB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLyoq5LuO55uu5qCH5rqQ5byA5aeL5ouW5ou9ICovXG4gIGZyb21SZXN1bHRTb3VyY2VEcmFnU3RhcnQoZWxlbWVudCkge1xuICAgIHRoaXMuZnJvbVJlc3VsdFNvdXJjZURyYWdFbCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLkRhdGFTb3VyY2VGaWVsZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuRGF0YVNvdXJjZUdyb3VwSW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLyoq5ouW5ou95Yiw5pWw5o2u5rqQ5pe26Kem5Y+RICovXG4gIGRyYWdUb0RhdGFTb3VyY2VEcm9wcGVkKCkge1xuICAgIC8v5LuO5pWw5o2u5rqQ5ouW5ou95Yiw5pWw5o2u5rqQLeaOkuW6j1xuICAgIGlmICh0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsKSB7XG4gICAgICAvKiBlbXB0eSAqL1xuICAgIH1cbiAgICBjb25zdCBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCA9IHRoaXMuZnJvbVJlc3VsdFNvdXJjZURyYWdFbDtcbiAgICBjb25zdCBmb3JtUmlnaHRHcm91cCA9IHRoaXMuZGVlcENsb25lKHRoaXMuZm9ybVJpZ2h0R3JvdXApO1xuICAgIGNvbnN0IGZpZWxkTGlzdCA9IHRoaXMuZGVlcENsb25lKHRoaXMuZmllbGRMaXN0KTtcblxuICAgIGlmIChfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCkge1xuICAgICAgLy/np7vliqhcbiAgICAgIC8v5LuO55uu5qCH5rqQ5ouW5ou95Yiw5pWw5o2u5rqQXG4gICAgICAvLyDmi5bmi73nm67moIfmupDnmoTkuIvmoIdcbiAgICAgIGNvbnN0IGRyYWdSZXN1bHRTb3VyY2VJbmRleCA9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZmluZEluZGV4KFxuICAgICAgICBlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCxcbiAgICAgICk7XG4gICAgICAvL+WIoOmZpOebruagh+a6kOS4reeahOaVsOaNrlxuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5zcGxpY2UoZHJhZ1Jlc3VsdFNvdXJjZUluZGV4LCAxKTtcbiAgICAgIGZvcm1SaWdodEdyb3VwLnNwbGljZShcbiAgICAgICAgZm9ybVJpZ2h0R3JvdXAuZmluZEluZGV4KGVsID0+IGVsLmlkID09IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsLmlkKSxcbiAgICAgICAgMSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuZ3JvdXBJZCkge1xuICAgICAgICAgIGNvbnN0IGVsRmllbGRzQWxsID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgICBlbC5maWVsZHMgPSBlbEZpZWxkc0FsbC5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+ICFmb3JtUmlnaHRHcm91cC5zb21lKGl0ZW1CID0+IGl0ZW0uaWQgPT09IGl0ZW1CLmlkKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybVJpZ2h0R3JvdXAgPSBmb3JtUmlnaHRHcm91cDtcbiAgICB9XG5cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuICAvKirmi5bmi73liLDnm67moIfmupDml7bop6blj5FcbiAgICpcbiAgICovXG4gIGRyYWdUb1Jlc3VsdFNvdXJjZURyb3BwZWQoZmllbGRUYWJzdGVtOiBhbnksIGZpZWxkVGFic0luZGV4KSB7XG4gICAgY29uc3QgX2Zyb21EYXRhU291cmNlRHJhZ0VsID0gdGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbDtcbiAgICAvL+S7juaVsOaNrua6kOaLluaLveWIsOebruagh+a6kFxuICAgIGlmIChfZnJvbURhdGFTb3VyY2VEcmFnRWwpIHtcbiAgICAgIHRoaXMuZmllbGRHcm91cExpc3RbdGhpcy5EYXRhU291cmNlR3JvdXBJbmRleCB8fCAwXS5maWVsZHMuc3BsaWNlKFxuICAgICAgICB0aGlzLkRhdGFTb3VyY2VGaWVsZEluZGV4LFxuICAgICAgICAxLFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVzdWx0U291cmNlW2ZpZWxkVGFic0luZGV4XS5maWVsZHMucHVzaChfZnJvbURhdGFTb3VyY2VEcmFnRWwpO1xuICAgICAgdGhpcy5mb3JtUmlnaHRHcm91cC5wdXNoKF9mcm9tRGF0YVNvdXJjZURyYWdFbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gIH1cbiAgLyoqIOS7juebruagh+a6kOaLluaLveWIsOebruagh+a6kCovXG4gIGRyYWdUb1Jlc3VsdFNvdXJjZUl0ZW1Ecm9wcGVkKGZpZWxkc0luZGV4KSB7XG4gICAgY29uc3QgX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWw7XG4gICAgaWYgKF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsKSB7XG4gICAgICAvLyDmi5bmi73nm67moIfmupDnmoTkuIvmoIdcbiAgICAgIGNvbnN0IGRyYWdSZXN1bHRTb3VyY2VJbmRleCA9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZmluZEluZGV4KFxuICAgICAgICBlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCxcbiAgICAgICk7XG4gICAgICAvL+WIoOmZpOebruagh+a6kOS4reeahOaVsOaNrlxuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5zcGxpY2UoZHJhZ1Jlc3VsdFNvdXJjZUluZGV4LCAxKTtcbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuc3BsaWNlKGZpZWxkc0luZGV4LCAwLCBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCk7XG4gICAgfVxuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKuiuvue9rmZvcm1B6KGo5Y2VICovXG4gIHNldGZpZWxkVGFic0Zyb20oKSB7XG4gICAgY29uc3Qgc2V0QXJyYXk6IGFueVtdID0gW107XG4gICAgdGhpcy5yZXN1bHRTb3VyY2UuZm9yRWFjaChlbCA9PiB7XG4gICAgICBjb25zdCBmaWVsZHNBcnJheTogYW55W10gPSBbXTtcbiAgICAgIGVsLmZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBmaWVsZHNBcnJheS5wdXNoKHtcbiAgICAgICAgICBmaWVsZElkOiBpdGVtLmlkIHx8IGl0ZW0uZmllbGRJZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogaXRlbS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICByZXF1aXJlZDogaXRlbT8ucmVxdWlyZWQsXG4gICAgICAgICAgc2hvd0luTGlzdDogaXRlbT8uc2hvd0luTGlzdCxcbiAgICAgICAgICBlbmFibGVTZWFyY2g6IGl0ZW0/LmVuYWJsZVNlYXJjaCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNldEFycmF5LnB1c2goe1xuICAgICAgICBuYW1lOiBlbC5uYW1lLFxuICAgICAgICBmaWVsZHM6IGZpZWxkc0FycmF5LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5uZXdFbnRpdHk/LnBhdGNoVmFsdWUoe1xuICAgICAgZmllbGRUYWJzOiBzZXRBcnJheSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIF9WYWxpZGF0b3JzU2VydmljZSA9IGluamVjdChWYWxpZGF0b3JzU2VydmljZSk7XG4gIC8qKuihqOWNlemqjOivgeeKtuaAgVxuICAgKiB7XG4gICAqICB0aXRsZTp0cnVlLFxuICAgKiB9XG4gICAqL1xuICBmb3JtVmFsaWRhdGlvbjogYW55ID0gJyc7XG4gIGlzU3VibWl0OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKuS/neWtmOihqOWNlSAqL1xuICBzYXZlKCkge1xuICAgIGlmICh0aGlzLmlzU3VibWl0KSByZXR1cm47XG4gICAgdGhpcy5pc1N1Ym1pdCA9IHRydWU7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLm5ld0VudGl0eT8udmFsdWU7XG5cbiAgICB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5fVmFsaWRhdG9yc1NlcnZpY2UuZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXModGhpcy5uZXdFbnRpdHkpO1xuICAgIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnQ21zJykpXG4gICAgICByZXR1cm4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5lbnRyeVR5cGVzU2VsZWN0KSB7XG4gICAgICB0aGlzLl9FbnRyeVR5cGVBZG1pblNlcnZpY2VcbiAgICAgICAgLnVwZGF0ZSh0aGlzLmVudHJ5VHlwZXNTZWxlY3QuaWQsIGlucHV0KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQ21zOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5wdXQuc2VjdGlvbklkID0gdGhpcy5zZWN0aW9uSWQ7XG4gICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlXG4gICAgICAuY3JlYXRlKGlucHV0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgfSk7XG4gIH1cbiAgLyoq57yW6L6RVGFic+ihqOWNlSAqL1xuICBlZGl0RmllbGRUYWJzRnJvbTogRm9ybUdyb3VwO1xuICAvKirmqKHmgIHmoYbnirbmgIEgKi9cbiAgdmlzaWJsZVRhYnNPcGVuOiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKuaYr+WQpuaYr+W/meeijOeKtuaAgSAqL1xuICBtb2RhbEJ1c3k6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgLyoq5q2j5Zyo57yW6L6R55qEdGFicyAqL1xuICBlZGl0RmllbGRUYWJzU2VsZWN0OiBhbnk7XG4gIC8qKuato+WcqOmAieS4reeahG5hdiAqL1xuICBuYXZBY3RpdmU6IGFueSA9IDA7XG5cbiAgLyoq6KGo5Y2V5o6n5Lu25qih5p2/LeWKqOaAgei1i+WAvOihqOWNleaOp+S7tiAqL1xuICBAVmlld0NoaWxkKCdlZGl0RmllbGRUYWJzTW9kYWxTdWJtaXRCdG4nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZWRpdEZpZWxkVGFic01vZGFsU3VibWl0QnRuOiBFbGVtZW50UmVmO1xuXG4gIC8qKuaooeaAgeahhueKtuaAgeaUueWPmOWbnuiwgyAqL1xuICBWaXNpYmxlVGFic0NoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9ICcnO1xuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvKirmlrDlu7rlop7liqBGaWVsZFRhYnMgKi9cbiAgYWRkRmllbGRUYWJzKCkge1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9ICcnO1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic0Zyb20gPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZFRhYnNCYXNlKCkpO1xuICAgIHRoaXMudmlzaWJsZVRhYnNPcGVuID0gdHJ1ZTtcbiAgfVxuICAvKirmraPlnKjnvJbovpHnmoR0YWLkuIvmoIcgKi9cbiAgbmV3RWRpdEZpZWxkVGFic0luZGV4OiBudW1iZXIgfCBhbnk7XG4gIC8qKue8lui+kUZpZWxkVGFicyAqL1xuICBlZGl0RmllbGRUYWJzKGl0ZW0sIGkpIHtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tID0gdGhpcy5mYi5ncm91cChuZXcgZmllbGRUYWJzQmFzZSgpKTtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnBhdGNoVmFsdWUoe1xuICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9IGl0ZW07XG4gICAgdGhpcy52aXNpYmxlVGFic09wZW4gPSB0cnVlO1xuICAgIHRoaXMubmV3RWRpdEZpZWxkVGFic0luZGV4ID0gaTtcbiAgfVxuXG4gIC8qKuS/neWtmOe8lui+kXRhYnPooajljZUgKi9cbiAgZWRpdEZpZWxkVGFic1NhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy/nvJbovpFcbiAgICBpZiAodGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0KSB7XG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5ld0VkaXRGaWVsZFRhYnNJbmRleF0ubmFtZSA9IHRoaXMuZWRpdEZpZWxkVGFic0Zyb20udmFsdWUubmFtZTtcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gdGhpcy5uZXdFZGl0RmllbGRUYWJzSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8v5paw5bu6XG4gICAgICB0aGlzLmFkZENvbnRyb2xUb0ZpZWxkVGFicyh0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnZpc2libGVUYWJzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuVmlzaWJsZVRhYnNDaGFuZ2UoZmFsc2UpO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKuWIoOmZpOafkOS4qnRhYnPooajljZUgKi9cbiAgZGVsZXRlRmllbGRUYWJzKGluZGV4KSB7XG4gICAgdGhpcy5kZWxldGVUYWJGaWVsZEdyb3VwTGlzdCh0aGlzLnJlc3VsdFNvdXJjZVtpbmRleF0uZmllbGRzKTtcbiAgICAvLyByZXR1cm5cbiAgICB0aGlzLmZpZWxkVGFicy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZih0aGlzLm5hdkFjdGl2ZT09PWluZGV4KXtcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gMDtcbiAgICB9XG4gICAgaWYodGhpcy5uYXZBY3RpdmU+aW5kZXgpe1xuICAgICAgdGhpcy5uYXZBY3RpdmUgPSB0aGlzLm5hdkFjdGl2ZS0xO1xuICAgIH1cbiAgfVxuXG4gIC8qKuWIoOmZpHRhYuagh+etvuWQjui/mOWOnyBmaWVsZEdyb3VwTGlzdCAqL1xuICBkZWxldGVUYWJGaWVsZEdyb3VwTGlzdChkZWxldGVGaWVsZHMpIHtcbiAgICAvL+WOn+aVsOaNrlxuICAgIGNvbnN0IGZpZWxkTGlzdD10aGlzLmRlZXBDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG4gICAgLy/lj7PkvqfmiYvpo47nkLTmlbDmja5cbiAgICBjb25zdCBmb3JtUmlnaHRHcm91cD10aGlzLmRlZXBDbG9uZSh0aGlzLmZvcm1SaWdodEdyb3VwKTtcblxuICAgIC8vIOiOt+WPluimgeWIoOmZpOeahOWOn+aVsOaNrlxuICAgIGNvbnN0IGRlbGV0ZUZpZWxkTGlzdCA9IGZpZWxkTGlzdC5maWx0ZXIoZWw9PmRlbGV0ZUZpZWxkcy5tYXAoaXRlbSA9PiBpdGVtLmlkKS5pbmNsdWRlcyhlbC5pZCkpIDtcbiAgICBkZWxldGVGaWVsZExpc3QuZm9yRWFjaChpdGVtPT57XG4gICAgICBjb25zdCBpbmRleD1mb3JtUmlnaHRHcm91cC5maW5kSW5kZXgoZWw9PmVsLmlkPT09aXRlbS5pZCk7XG4gICAgICBmb3JtUmlnaHRHcm91cC5zcGxpY2UoXG4gICAgICAgIGluZGV4LFxuICAgICAgICAxLFxuICAgICAgKTtcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IGRlbGV0ZUZpZWxkTGlzdEdyb3VwSWRzPWRlbGV0ZUZpZWxkTGlzdC5tYXAoaXRlbT0+aXRlbS5ncm91cElkKTtcbiAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goZWwgPT4ge1xuICAgICAgaWYgKCBkZWxldGVGaWVsZExpc3RHcm91cElkcy5pbmNsdWRlcyhlbC5pZCkpIHtcbiAgICAgICAgY29uc3QgZWxGaWVsZHNBbGwgPSBmaWVsZExpc3QuZmlsdGVyKGVscyA9PiBlbHMuZ3JvdXBJZCA9PT0gZWwuaWQpO1xuICAgICAgICBlbC5maWVsZHMgPSBlbEZpZWxkc0FsbC5maWx0ZXIoXG4gICAgICAgICAgaXRlbSA9PiAhZm9ybVJpZ2h0R3JvdXAuc29tZShpdGVtQiA9PiBpdGVtLmlkID09PSBpdGVtQi5pZCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtUmlnaHRHcm91cD1mb3JtUmlnaHRHcm91cDtcblxuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG5cbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG54q25oCBICovXG4gIHZpc2libGVFZGl0RmllbGRPcGVuOiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKue8lui+keWtl+auteaooeaAgeahhuihqOWNlSAqL1xuICBlZGl0RmllbGRGcm9tOiBGb3JtR3JvdXA7XG4gIC8qKuihqOWNleaOp+S7tuaooeadvy3liqjmgIHotYvlgLzooajljZXmjqfku7Yt57yW6L6R5a2X5q61ICovXG4gIEBWaWV3Q2hpbGQoJ2VkaXRGaWVsZE1vZGFsU3VibWl0QnRuJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGaWVsZE1vZGFsU3VibWl0QnRuOiBFbGVtZW50UmVmO1xuICAvKirmraPlnKjnvJbovpHnmoTlrZfmrrXkuIvmoIcgKi9cbiAgRWRpdEZpZWxkSW5kZXg6IG51bWJlciB8IGFueTtcbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG54q25oCB54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIFZpc2libGVFZGl0RmllbGRDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLkVkaXRGaWVsZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpc1Nob3dJbkxpc3Q6IGJvb2xlYW4gfCBhbnkgPSB0cnVlO1xuICBpc0VuYWJsZVNlYXJjaDogYm9vbGVhbiB8IGFueSA9IHRydWU7XG4gIC8qKuaJk+W8gOe8lui+keWtl+auteaooeaAgeahhiAqL1xuICBFZGl0RmllbGRNb2RhbE9wZW4oaXRlbXMsIGVsSW5kZXgpIHtcbiAgICB0aGlzLnZpc2libGVFZGl0RmllbGRPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLkVkaXRGaWVsZEluZGV4ID0gZWxJbmRleDtcbiAgICB0aGlzLmVkaXRGaWVsZEZyb20gPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZHNCYXNlKCkpO1xuICAgIGNvbnN0IGZpZWxkc09wdGlvbnMgPSB0aGlzLmZpZWxkVGFicy52YWx1ZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW2VsSW5kZXhdO1xuICAgIC8vIHRoaXMuaXNTaG93SW5MaXN0ID0gIXRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0LmluY2x1ZGVzKGZpZWxkc09wdGlvbnMuZmllbGQuZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAvLyB0aGlzLmlzRW5hYmxlU2VhcmNoID0gdGhpcy5lbmFibGVTZWFyY2hUeXBlTGlzdC5pbmNsdWRlcyhmaWVsZHNPcHRpb25zLmZpZWxkLmZvcm1Db250cm9sTmFtZSk7XG4gICAgdGhpcy5lZGl0RmllbGRGcm9tLnBhdGNoVmFsdWUoZmllbGRzT3B0aW9ucyk7XG4gICAgLy8gdGhpcy5kaXNhYmxlc2hvd2luVHlwZUxpc3RcbiAgfVxuICAvKirkv53lrZjnvJbovpHlrZfmrrUgKi9cbiAgZWRpdEZpZWxkU2F2ZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWRpdEZpZWxkRnJvbS52YWx1ZTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW3RoaXMuRWRpdEZpZWxkSW5kZXhdLmRpc3BsYXlOYW1lID0gaW5wdXQuZGlzcGxheU5hbWU7XG4gICAgLy8gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5yZXF1aXJlZCA9IGlucHV0LnJlcXVpcmVkO1xuICAgIC8vIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbdGhpcy5FZGl0RmllbGRJbmRleF0uc2hvd0luTGlzdCA9IGlucHV0LnNob3dJbkxpc3Q7XG4gICAgLy8gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5lbmFibGVTZWFyY2ggPSBpbnB1dC5lbmFibGVTZWFyY2g7XG4gICAgdGhpcy52aXNpYmxlRWRpdEZpZWxkT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG5cbiAgLyoq54K55Ye74oCc5a2X5q615biD5bGA4oCd5aSN6YCJ5qGG5LqL5Lu2ICovXG4gIGNoZWNrYm94Q2hhbmdlKGV2ZW50LGlucHV0KSB7XG4gICAgY29uc3Qge2NoZWNrZWQsbmFtZX09ZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IHtyb3csaW5kZXh9PWlucHV0O1xuICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbaW5kZXhdW25hbWVdPWNoZWNrZWQ7XG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gICAgY29uc29sZS5sb2coZXZlbnQudGFyZ2V0LCfngrnlh7vigJzlrZfmrrXluIPlsYDigJ3lpI3pgInmoYbkuovku7YgJyxldmVudCxpbnB1dCwncmVzdWx0U291cmNlJyx0aGlzLnJlc3VsdFNvdXJjZSwnbmV3RW50aXR5Jyx0aGlzLm5ld0VudGl0eSk7XG4gIH1cblxuXG5cblxuXG4gIC8qKm5hbWXooajljZXmjqfku7YgKi9cbiAgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZXdFbnRpdHkuZ2V0KCduYW1lJyk7XG4gIH1cbiAgLyoq5a2X5q615qCH562+aW5wdXTlpLHljrvmoIfngrnnlJ/miJDlrZfmrrXlkI3lrZcgKi9cbiAgZGlzUGxheU5hbWVJbnB1dEJsdXIoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBwaW55aW4gPSB0aGlzLl9DbXNBcGlTZXJ2aWNlLmNoaW5lc2VUb1Bpbnlpbih2YWx1ZSk7XG4gICAgY29uc3QgbmFtZUlucHV0OiBhbnkgPSB0aGlzLm5hbWVJbnB1dDtcbiAgICBpZiAobmFtZUlucHV0LnZhbHVlKSByZXR1cm47XG4gICAgbmFtZUlucHV0LnBhdGNoVmFsdWUocGlueWluKTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJyb3cgZy0zIG5lZWRzLXZhbGlkYXRpb25cIiBbZm9ybUdyb3VwXT1cIm5ld0VudGl0eVwiIFtjbGFzc109XCJ7J3dhcy12YWxpZGF0ZWQnOmZvcm1WYWxpZGF0aW9ufVwiXG4gICAgKHN1Ym1pdCk9XCJzYXZlKClcIj5cbiAgICA8YWJwLXBhZ2UgW3RpdGxlXT1cImVudHJ5VHlwZXNJZCA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKTooJ0Ntczo6TmV3JyB8IGFicExvY2FsaXphdGlvbilcIlxuICAgICAgICBbdG9vbGJhcl09XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUtb3ItZWRpdC1lbnRyeS10eXBlLXBhZ2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RGlzcGxheU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJkaXNQbGF5TmFtZUlucHV0Qmx1cigkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6Ok5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmllbGRUYWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RmllbGRMYXlvdXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04IGJvcmRlciByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBuZ2JOYXYgI25hdj1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cIm5hdkFjdGl2ZVwiIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc3VsdFNvdXJjZTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbbmdiTmF2SXRlbV09XCJpXCIgbmdiRHJvcGRvd24gY2xhc3M9XCJuYXYtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiIChjbGljay5zdG9wKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgc3R5bGU9XCJ6LWluZGV4OiA5OTk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBuZ2JEcm9wZG93bkl0ZW0gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiZWRpdEZpZWxkVGFicyhpdGVtLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWRpdFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmdiRHJvcGRvd25JdGVtICpuZ0lmPVwicmVzdWx0U291cmNlLmxlbmd0aCAhPT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cImRlbGV0ZUZpZWxkVGFicyhpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FicFVpOjpEZWxldGUnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiIG9uZHJhZ292ZXI9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlRHJvcHBlZChpdGVtLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpEcmFnQW5kRHJvcEZpZWxkVGlwcycgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eydDbXM6OkRpc3BsYXlOYW1lJyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7J0Ntczo6UmVxdWlyZWQnIHwgYWJwTG9jYWxpemF0aW9ufX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImZyb21SZXN1bHRTb3VyY2VEcmFnU3RhcnQoZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlIGQtaW5saW5lXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBlbC5kaXNwbGF5TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2NoZWNrZWRdPVwiZWwucmVxdWlyZWRcIiAgbmFtZT1cInJlcXVpcmVkXCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJlbC5zaG93SW5MaXN0XCIgIG5hbWU9XCJzaG93SW5MaXN0XCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJlbC5lbmFibGVTZWFyY2hcIiAgICBuYW1lPVwiZW5hYmxlU2VhcmNoXCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDElO1wiPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMCBidG4gYnRuLXNtIGJ0bi1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiRWRpdEZpZWxkTW9kYWxPcGVuKGVsLGllbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS13cmVuY2ggcC1zbS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiB1bnNldDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLTAgYnRuIGJ0bi1zbSBidG4tbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJFZGl0RmllbGRNb2RhbE9wZW4oZWwsaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtd3JlbmNoIHAtc20tMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJhZGRGaWVsZFRhYnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpOZXdUYWInIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIiBjbGFzcz1cIm10LTIgYm9yZGVybk5hdnMgcC0wXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uICNhY2NvcmRpb249XCJuZ2JBY2NvcmRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25kcmFnb3Zlcj1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7XCIgKGRyb3ApPVwiZHJhZ1RvRGF0YVNvdXJjZURyb3BwZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDgwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkR3JvdXBMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiQWNjb3JkaW9uSXRlbV09XCJpdGVtLm5hbWVcIiAqbmdJZj1cIml0ZW0uZmllbGRzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIG5nYkFjY29yZGlvbkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiQWNjb3JkaW9uQnV0dG9uPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDbXM6OicraXRlbS5uYW1lKSB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGlpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZnJvbURhdGFTb3VyY2VEcmFnU3RhcnQoZWwsaWksaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgIDwvYWJwLXBhZ2U+XG5cbjwvZm9ybT5cbjwhLS0g55So5LqO5Yib5bu657yW6L6RdGFi55qE5qih5oCB5qGGIC0tPlxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVUYWJzT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVUYWJzQ2hhbmdlKCRldmVudClcIj5cbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICAgICAgPGgzPnt7IGVkaXRGaWVsZFRhYnNTZWxlY3QgPyAoJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbik6KCdDbXM6Ok5ldycgfCBhYnBMb2NhbGl6YXRpb24pfX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZFRhYnNGcm9tOyBlbHNlIGxvYWRlclJlZlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJzaXRlcy1tb2RhbC1mb3JtXCIgW2Zvcm1Hcm91cF09XCJlZGl0RmllbGRUYWJzRnJvbVwiIFtjbGFzc109XCJ7J3dhcy12YWxpZGF0ZWQnOmZvcm1WYWxpZGF0aW9ufVwiXG4gICAgICAgICAgICAgICAgKHN1Ym1pdCk9XCJlZGl0RmllbGRUYWJzU2F2ZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgI2VkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0biBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgKGNsaWNrKT1cImVkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKClcIj57eydBYnBVaTo6U2F2ZSdcbiAgICAgICAgICAgIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuXG48IS0tIOeUqOS6juS/ruaUueWtl+autemFjee9rueahOaooeaAgeahhiAtLT5cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlRWRpdEZpZWxkT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVFZGl0RmllbGRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZEZyb207IGVsc2UgbG9hZGVyUmVmXCI+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInNpdGVzLW1vZGFsLWZvcm1cIiBbZm9ybUdyb3VwXT1cImVkaXRGaWVsZEZyb21cIiAoc3VibWl0KT1cImVkaXRGaWVsZFNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNlZGl0RmllbGRNb2RhbFN1Ym1pdEJ0biBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlcXVpcmVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJyZXF1aXJlZFwiPiB7eydDbXM6OlJlcXVpcmVkJyB8IGFicExvY2FsaXphdGlvbn19IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIEBpZihpc1Nob3dJbkxpc3Qpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd0luTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzaG93SW5MaXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzaG93SW5MaXN0XCI+IHt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZihpc0VuYWJsZVNlYXJjaCl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZW5hYmxlU2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJlbmFibGVTZWFyY2hcIj4ge3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiBbZGlzYWJsZWRdPVwiIWVkaXRGaWVsZEZyb20udmFsaWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRGaWVsZE1vZGFsU3VibWl0QnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zZWN0aW9ucy9lbnRyeS10eXBlcy9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NlY3Rpb25zL2VudHJ5LXR5cGVzL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBDQUEwQztBQUMxQyx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsYUFBYSxFQUNiLFVBQVUsR0FDWCxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsc0JBQXNCLEdBQ3ZCLE1BQU0sNENBQTRDLENB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U0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQS9nQlUscUJBQXFCO2tHQUFyQixxQkFBcUIsNkNBUHJCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0I7YUFDN0M7U0FDRixzWUNsQ0gsb3RxQkE4UVk7OzJGRDFPQyxxQkFBcUI7a0JBWGpDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFFBQVEsRUFBRSxhQUFhLENBQUMsb0JBQW9CO3lCQUM3QztxQkFDRjs2VkFxQzJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkEwVTFDLDJCQUEyQjtzQkFEMUIsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBaUdGLHVCQUF1QjtzQkFBL0UsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cbmltcG9ydCB7IEVYVEVOU0lPTlNfSURFTlRJRklFUiB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9leHRlbnNpYmxlJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIENyZWF0ZU9yRWRpdEVudHJ5VHlwZUlucHV0QmFzZSxcbiAgZmllbGRUYWJzQmFzZSxcbiAgZmllbGRzQmFzZSxcbn0gZnJvbSAnLi9jcmVhdGUtb3ItZWRpdC4tZW50cnktdHlwZS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IEVDbXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzU2VydmljZSB9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBGaWVsZEFkbWluU2VydmljZSxcbiAgRmllbGRHcm91cEFkbWluU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vcHJveHkvZGlnbml0ZS9jbXMvYWRtaW4vZmllbGRzJztcbmltcG9ydCB7IEVudHJ5VHlwZUFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3h5L2RpZ25pdGUvY21zL2FkbWluL3NlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1Db250cm9sc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLWNvbnRyb2xzLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBUb1BpbnlpblNlcnZpY2UsIExvY2F0aW9uQmFja1NlcnZpY2UsIFVwZGF0ZUxpc3RTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbXMtY3JlYXRlLW9yLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFWFRFTlNJT05TX0lERU5USUZJRVIsXG4gICAgICB1c2VWYWx1ZTogRUNtc0NvbXBvbmVudC5TZWN0aW9uc0NyZWF0ZU9yRWRpdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYXRpb25CYWNrU2VydmljZTogTG9jYXRpb25CYWNrU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwdWJsaWMgX0ZpZWxkR3JvdXBBZG1pblNlcnZpY2U6IEZpZWxkR3JvdXBBZG1pblNlcnZpY2UsXG4gICAgcHVibGljIF9GaWVsZEFkbWluU2VydmljZTogRmllbGRBZG1pblNlcnZpY2UsXG4gICAgcHVibGljIF9FbnRyeVR5cGVBZG1pblNlcnZpY2U6IEVudHJ5VHlwZUFkbWluU2VydmljZSxcbiAgICBwdWJsaWMgX0xvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgcHVibGljIF9Gb3JtQ29udHJvbHNTZXJ2aWNlOiBGb3JtQ29udHJvbHNTZXJ2aWNlLFxuICAgICBwcml2YXRlIHRvUGlueWluU2VydmljZTpUb1BpbnlpblNlcnZpY2VcbiAgKSB7fVxuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSBfVXBkYXRlTGlzdFNlcnZpY2UgPSBpbmplY3QoVXBkYXRlTGlzdFNlcnZpY2UpO1xuICAvKirooajljZXlrp7kvZMgKi9cbiAgbmV3RW50aXR5OiBGb3JtR3JvdXAgfCBhbnk7XG4gIC8qKueJiOWdl2lkICovXG4gIHNlY3Rpb25JZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebruexu+Wei2lkICovXG4gIGVudHJ5VHlwZXNJZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebruexu+Wei+ivpuaDhSAqL1xuICBlbnRyeVR5cGVzU2VsZWN0OiBhbnk7XG5cbiAgLyoq5piv5ZCm5YWo6YCJICovXG4gIGlzQWxsU2VsZWN0PXtcbiAgICBpc1JlcXVpcmVkOmZhbHNlLFxuICAgIGlzU2hvd0luTGlzdDpmYWxzZSxcbiAgICBpc0VuYWJsZVNlYXJjaDpmYWxzZVxuICB9O1xuXG4gIGdldCBmaWVsZFRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubmV3RW50aXR5Py5nZXQoJ2ZpZWxkVGFicycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIC8qKuiOt+WPluaPkOS6pOaMiemSruabv+i6q++8jOeUqOS6juecn+WunuinpuWPkeihqOWNleaPkOS6pCAqL1xuICBAVmlld0NoaWxkKCdzdWJtaXRjbGljaycsIHsgc3RhdGljOiB0cnVlIH0pIHN1Ym1pdGNsaWNrOiBFbGVtZW50UmVmO1xuXG4gIC8qKuinpuWPkeaPkOS6pOaMiemSriAqL1xuICBzdWJtaXRjbGlja0J0bigpIHtcbiAgICB0aGlzLnN1Ym1pdGNsaWNrLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKumcgOimgeafpeivoueahOWKqOaAgeihqOWNleexu+WeiyAqL1xuICBlbmFibGVTZWFyY2hUeXBlTGlzdDogYW55W10gPSBbXTtcbiAgLyoq5LiN6ZyA6KaB5bGV56S655qE5Yqo5oCB6KGo5Y2V57G75Z6LICovXG4gIGRpc2FibGVzaG93aW5UeXBlTGlzdDogYW55W10gPSBbXTtcbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VjdGlvbklkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuc2VjdGlvbnNJZDtcbiAgICAvL+adoeebruexu+Wei2lkXG4gICAgdGhpcy5lbnRyeVR5cGVzSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5lbnRyeVR5cGVzSWQgfHwgJyc7XG4gICAgLy/mnb/lnZdpZFxuICAgIHRoaXMuc2VjdGlvbklkID0gc2VjdGlvbklkO1xuICAgIHRoaXMubmV3RW50aXR5ID0gdGhpcy5mYi5ncm91cChuZXcgQ3JlYXRlT3JFZGl0RW50cnlUeXBlSW5wdXRCYXNlKCkpO1xuICAgXG4gICAgLy/ojrflj5bmnaHnm67nsbvlnovor6bmg4VcbiAgICBpZih0aGlzLmVudHJ5VHlwZXNJZCl7XG4gICAgICBhd2FpdCB0aGlzLmdldEVudHJ5VHlwZXMoKTtcbiAgICB9XG4gICAgLy/ojrflj5blrZfmrrXliIbnu4RcbiAgICBhd2FpdCB0aGlzLmdldEZpZWxkR3JvdXAoKTtcbiAgICAvL+WkhOeQhuaVsOaNrlxuICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcbiAgfVxuICAvKirlpITnkIbmlbDmja4gKi9cbiAgcHJvY2Vzc0RhdGEoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3RzKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZExpc3Q6IGFueSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLmVudHJ5VHlwZXNTZWxlY3Q7XG4gICAgICBpZiAoIXJlcykge1xuICAgICAgICB0aGlzLmFkZENvbnRyb2xUb0ZpZWxkVGFicygpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHJlcy5maWVsZFRhYnMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRDb250cm9sVG9GaWVsZFRhYnMoKTtcbiAgICAgICAgICBlbC5maWVsZHMuZm9yRWFjaCgoZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGVsZC5pZCA9IGVsZC5maWVsZElkO1xuICAgICAgICAgICAgZWxkLmdyb3VwSWQgPSBmaWVsZExpc3QuZmluZChlbGZkID0+IGVsZmQuaWQgPT0gZWxkLmZpZWxkSWQpLmdyb3VwSWQ7XG4gICAgICAgICAgICB0aGlzLmZvcm1SaWdodEdyb3VwLnB1c2goZWxkKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkaW5kZXggPSBmaWVsZExpc3QuZmluZEluZGV4KGVsZmwgPT4gZWxmbC5pZCA9PSBlbGQuZmllbGRJZCk7XG4gICAgICAgICAgICBmaWVsZExpc3Quc3BsaWNlKGZpZWxkaW5kZXgsIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICBcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwTGlzdC5mb3JFYWNoKChlbDogYW55LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGVsLmZpZWxkcyA9IGZpZWxkTGlzdC5maWx0ZXIoZWxzID0+IGVscy5ncm91cElkID09PSBlbC5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5ld0VudGl0eT8ucGF0Y2hWYWx1ZShyZXMpO1xuICAgICAgICB0aGlzLm5hdkFjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMucmVzdWx0U291cmNlID0gcmVzLmZpZWxkVGFicztcblxuICAgICAgIHRoaXMuc2V0QWxsU2VsZWN0U3RhdXRzKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5pc0FsbFNlbGVjdCwndGhpcy5pc0FsbFNlbGVjdCcscmVzLmZpZWxkVGFicyx0aGlzLm5hdkFjdGl2ZSk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICB9XG4gIC8qKuiuvue9ruWFqOmAieeKtuaAgSAqL1xuICBzZXRBbGxTZWxlY3RTdGF1dHMoKXtcbiAgICB0aGlzLmlzQWxsU2VsZWN0LmlzUmVxdWlyZWQ9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZXZlcnkoZWxkPT5lbGQucmVxdWlyZWQpO1xuICAgICAgICB0aGlzLmlzQWxsU2VsZWN0LmlzU2hvd0luTGlzdD0gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5ldmVyeShlbGQ9PmVsZC5zaG93SW5MaXN0KTtcbiAgICAgICAgdGhpcy5pc0FsbFNlbGVjdC5pc0VuYWJsZVNlYXJjaD0gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5ldmVyeShlbGQ9PmVsZC5lbmFibGVTZWFyY2gpO1xuICB9XG5cbiAgLyoq57uZZmllbGRUYWJz5re75Yqg5paw5o6n5Lu2ICovXG4gIGFkZENvbnRyb2xUb0ZpZWxkVGFicyhuYW1lVmFsdWUgPSAnJykge1xuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAobmV3IGZpZWxkVGFic0Jhc2UoKSk7XG4gICAgbmV3Rm9ybUdyb3VwXG4gICAgICAuZ2V0KCduYW1lJylcbiAgICAgID8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy5maWVsZFRhYnMubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyB0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6RmllbGRUYWJgKVxuICAgICAgICAgIDogbmFtZVZhbHVlLFxuICAgICAgKTtcbiAgICB0aGlzLmZpZWxkVGFicy5wdXNoKG5ld0Zvcm1Hcm91cCk7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2UucHVzaChuZXdGb3JtR3JvdXAudmFsdWUpO1xuICAgIHRoaXMubmF2QWN0aXZlID0gdGhpcy5yZXN1bHRTb3VyY2UubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKuiOt+WPluWtl+auteWIhue7hCAqL1xuICBnZXRGaWVsZEdyb3VwKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRmllbGRHcm91cEFkbWluU2VydmljZS5nZXRMaXN0KHt9KS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRMaXN0OiBhbnkgPSBhd2FpdCB0aGlzLmdldEZpZWxkTGlzdCgpO1xuICAgICAgICBjb25zdCBmaWVsZEdyb3VwTGlzdDogYW55ID0gcmVzLml0ZW1zO1xuICAgICAgICBmaWVsZEdyb3VwTGlzdC51bnNoaWZ0KHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICBuYW1lOiAnVW5ncm91cGVkRmllbGRzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkR3JvdXBMaXN0LmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgZWwuZmllbGRzID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmllbGRHcm91cExpc3QgPSBmaWVsZEdyb3VwTGlzdDtcbiAgICAgICAgdGhpcy5maWVsZExpc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoZmllbGRMaXN0KTtcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoq6I635Y+W5p2h55uu57G75Z6L6K+m5oOFICovXG4gIGdldEVudHJ5VHlwZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3RzKSA9PiB7XG4gICAgICB0aGlzLl9FbnRyeVR5cGVBZG1pblNlcnZpY2UuZ2V0KHRoaXMuZW50cnlUeXBlc0lkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5lbnRyeVR5cGVzU2VsZWN0ID0gcmVzO1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuIFxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5hbWVWYWx1ZSDojrflj5bmiYDmnInlrZfmrrVcbiAgICovXG4gIGdldEZpZWxkTGlzdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX0ZpZWxkQWRtaW5TZXJ2aWNlXG4gICAgICAgIC5nZXRMaXN0KHtcbiAgICAgICAgICBtYXhSZXN1bHRDb3VudDogMTAwMCxcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXMuaXRlbXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZWwuc2hvd0luTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgZWwuZW5hYmxlU2VhcmNoID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXMuaXRlbXMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmi5bmi70g5Yqf6IO9Ki9cbiAgLyoq5pWw5o2u5rqQICovXG4gIC8qKuaVsOaNrua6kC3lrZfmrrXliIbnu4TmlbDmja4t5YyF5ZCr5a2X5q615pWw5o2uIGZpZWxkcyAqL1xuICBmaWVsZEdyb3VwTGlzdDogYW55W10gPSBbXTtcbiAgLyoq5pWw5o2u5rqQLeaJgOacieWtl+auteWIl+ihqCAqL1xuICBmaWVsZExpc3Q6IGFueVtdID0gW107XG4gIC8qKuaVsOaNrua6kOaLluaLveeahOWIhue7hOS4i+aghyAqL1xuICBEYXRhU291cmNlR3JvdXBJbmRleDogbnVtYmVyIHwgYW55O1xuICAvKirmlbDmja7mupDmi5bmi73nmoTlrZfmrrXkuIvmoIcgKi9cbiAgRGF0YVNvdXJjZUZpZWxkSW5kZXg6IG51bWJlciB8IGFueTtcbiAgLyoq55uu5qCH5rqQIOe7k+aenCovXG4gIHJlc3VsdFNvdXJjZTogYW55W10gPSBbXTtcblxuICAvKirku47mlbDmja7mupDmi5bmi73nmoTlhYPntKAgKi9cbiAgZnJvbURhdGFTb3VyY2VEcmFnRWw6IGFueTtcbiAgLyoq5LuO55uu5qCH5rqQ5ouW5ou955qE5YWD57SgICovXG4gIGZyb21SZXN1bHRTb3VyY2VEcmFnRWw6IGFueTtcblxuICAvKirmnaXoh6rmlbDmja7mupDnmoTpm4blkIjvvIznlKjkuo7ku47nm67moIfmupDmi5blm57mlbDmja7mupDml7bnmoTliKTmlq3vvIzkuI7lj5blgLwgKi9cbiAgZm9ybVJpZ2h0R3JvdXA6IGFueVtdID0gW107XG4gIC8qKuS7juaVsOaNrua6kOW8gOWni+aLluaLvSAqL1xuICBmcm9tRGF0YVNvdXJjZURyYWdTdGFydChlbGVtZW50LCBmaWVsZEluZGV4LCBncm91cEluZGV4KSB7XG4gICAgdGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5EYXRhU291cmNlRmllbGRJbmRleCA9IGZpZWxkSW5kZXg7XG4gICAgdGhpcy5EYXRhU291cmNlR3JvdXBJbmRleCA9IGdyb3VwSW5kZXg7XG4gICAgdGhpcy5mcm9tUmVzdWx0U291cmNlRHJhZ0VsID0gdW5kZWZpbmVkO1xuICB9XG4gIC8qKuS7juebruagh+a6kOW8gOWni+aLluaLvSAqL1xuICBmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsZW1lbnQpIHtcbiAgICB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSBlbGVtZW50O1xuICAgIHRoaXMuZnJvbURhdGFTb3VyY2VEcmFnRWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5EYXRhU291cmNlRmllbGRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLkRhdGFTb3VyY2VHcm91cEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8qKuaLluaLveWIsOaVsOaNrua6kOaXtuinpuWPkSAqL1xuICBkcmFnVG9EYXRhU291cmNlRHJvcHBlZCgpIHtcbiAgICAvL+S7juaVsOaNrua6kOaLluaLveWIsOaVsOaNrua6kC3mjpLluo9cbiAgICBpZiAodGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbCkge1xuICAgICAgLyogZW1wdHkgKi9cbiAgICB9XG4gICAgY29uc3QgX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWw7XG4gICAgY29uc3QgZm9ybVJpZ2h0R3JvdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5mb3JtUmlnaHRHcm91cCk7XG4gICAgY29uc3QgZmllbGRMaXN0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuZmllbGRMaXN0KTtcblxuICAgIGlmIChfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCkge1xuICAgICAgLy/np7vliqhcbiAgICAgIC8v5LuO55uu5qCH5rqQ5ouW5ou95Yiw5pWw5o2u5rqQXG4gICAgICAvLyDmi5bmi73nm67moIfmupDnmoTkuIvmoIdcbiAgICAgIGNvbnN0IGRyYWdSZXN1bHRTb3VyY2VJbmRleCA9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZmluZEluZGV4KFxuICAgICAgICBlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCxcbiAgICAgICk7XG4gICAgICAvL+WIoOmZpOebruagh+a6kOS4reeahOaVsOaNrlxuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5zcGxpY2UoZHJhZ1Jlc3VsdFNvdXJjZUluZGV4LCAxKTtcbiAgICAgIGZvcm1SaWdodEdyb3VwLnNwbGljZShcbiAgICAgICAgZm9ybVJpZ2h0R3JvdXAuZmluZEluZGV4KGVsID0+IGVsLmlkID09IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsLmlkKSxcbiAgICAgICAgMSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuZ3JvdXBJZCkge1xuICAgICAgICAgIGNvbnN0IGVsRmllbGRzQWxsID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgICBlbC5maWVsZHMgPSBlbEZpZWxkc0FsbC5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+ICFmb3JtUmlnaHRHcm91cC5zb21lKGl0ZW1CID0+IGl0ZW0uaWQgPT09IGl0ZW1CLmlkKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybVJpZ2h0R3JvdXAgPSBmb3JtUmlnaHRHcm91cDtcbiAgICB9XG5cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgICB0aGlzLnNldEFsbFNlbGVjdFN0YXV0cygpO1xuICB9XG4gIC8qKuaLluaLveWIsOebruagh+a6kOaXtuinpuWPkVxuICAgKlxuICAgKi9cbiAgZHJhZ1RvUmVzdWx0U291cmNlRHJvcHBlZChmaWVsZFRhYnN0ZW06IGFueSwgZmllbGRUYWJzSW5kZXgpIHtcbiAgICBjb25zdCBfZnJvbURhdGFTb3VyY2VEcmFnRWwgPSB0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsO1xuICAgIC8v5LuO5pWw5o2u5rqQ5ouW5ou95Yiw55uu5qCH5rqQXG4gICAgaWYgKF9mcm9tRGF0YVNvdXJjZURyYWdFbCkge1xuICAgICAgdGhpcy5maWVsZEdyb3VwTGlzdFt0aGlzLkRhdGFTb3VyY2VHcm91cEluZGV4IHx8IDBdLmZpZWxkcy5zcGxpY2UoXG4gICAgICAgIHRoaXMuRGF0YVNvdXJjZUZpZWxkSW5kZXgsXG4gICAgICAgIDEsXG4gICAgICApO1xuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbZmllbGRUYWJzSW5kZXhdLmZpZWxkcy5wdXNoKF9mcm9tRGF0YVNvdXJjZURyYWdFbCk7XG4gICAgICB0aGlzLmZvcm1SaWdodEdyb3VwLnB1c2goX2Zyb21EYXRhU291cmNlRHJhZ0VsKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgICB0aGlzLnNldEFsbFNlbGVjdFN0YXV0cygpO1xuICB9XG4gIC8qKiDku47nm67moIfmupDmi5bmi73liLDnm67moIfmupAqL1xuICBkcmFnVG9SZXN1bHRTb3VyY2VJdGVtRHJvcHBlZChmaWVsZHNJbmRleCkge1xuICAgIGNvbnN0IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsID0gdGhpcy5mcm9tUmVzdWx0U291cmNlRHJhZ0VsO1xuICAgIGlmIChfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCkge1xuICAgICAgLy8g5ouW5ou955uu5qCH5rqQ55qE5LiL5qCHXG4gICAgICBjb25zdCBkcmFnUmVzdWx0U291cmNlSW5kZXggPSB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLmZpbmRJbmRleChcbiAgICAgICAgZWwgPT4gZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuaWQsXG4gICAgICApO1xuICAgICAgLy/liKDpmaTnm67moIfmupDkuK3nmoTmlbDmja5cbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuc3BsaWNlKGRyYWdSZXN1bHRTb3VyY2VJbmRleCwgMSk7XG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLnNwbGljZShmaWVsZHNJbmRleCwgMCwgX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwpO1xuICAgIH1cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgICB0aGlzLnNldEFsbFNlbGVjdFN0YXV0cygpO1xuICB9XG4gIC8qKuiuvue9rmZvcm1B6KGo5Y2VICovXG4gIHNldGZpZWxkVGFic0Zyb20oKSB7XG4gICAgY29uc3Qgc2V0QXJyYXk6IGFueVtdID0gW107XG4gICAgdGhpcy5yZXN1bHRTb3VyY2UuZm9yRWFjaChlbCA9PiB7XG4gICAgICBjb25zdCBmaWVsZHNBcnJheTogYW55W10gPSBbXTtcbiAgICAgIGVsLmZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBmaWVsZHNBcnJheS5wdXNoKHtcbiAgICAgICAgICBmaWVsZElkOiBpdGVtLmlkIHx8IGl0ZW0uZmllbGRJZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogaXRlbS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICByZXF1aXJlZDogaXRlbT8ucmVxdWlyZWQsXG4gICAgICAgICAgc2hvd0luTGlzdDogaXRlbT8uc2hvd0luTGlzdCxcbiAgICAgICAgICBlbmFibGVTZWFyY2g6IGl0ZW0/LmVuYWJsZVNlYXJjaCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNldEFycmF5LnB1c2goe1xuICAgICAgICBuYW1lOiBlbC5uYW1lLFxuICAgICAgICBmaWVsZHM6IGZpZWxkc0FycmF5LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5uZXdFbnRpdHk/LnBhdGNoVmFsdWUoe1xuICAgICAgZmllbGRUYWJzOiBzZXRBcnJheSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIF9WYWxpZGF0b3JzU2VydmljZSA9IGluamVjdChWYWxpZGF0b3JzU2VydmljZSk7XG4gIC8qKuihqOWNlemqjOivgeeKtuaAgVxuICAgKiB7XG4gICAqICB0aXRsZTp0cnVlLFxuICAgKiB9XG4gICAqL1xuICBmb3JtVmFsaWRhdGlvbjogYW55ID0gJyc7XG4gIGlzU3VibWl0OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKuS/neWtmOihqOWNlSAqL1xuICBzYXZlKCkge1xuICAgIGlmICh0aGlzLmlzU3VibWl0KSByZXR1cm47XG4gICAgdGhpcy5pc1N1Ym1pdCA9IHRydWU7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLm5ld0VudGl0eT8udmFsdWU7XG5cbiAgICB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5fVmFsaWRhdG9yc1NlcnZpY2UuZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXModGhpcy5uZXdFbnRpdHkpO1xuICAgIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnQ21zJykpXG4gICAgICByZXR1cm4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5lbnRyeVR5cGVzU2VsZWN0KSB7XG4gICAgICB0aGlzLl9FbnRyeVR5cGVBZG1pblNlcnZpY2VcbiAgICAgICAgLnVwZGF0ZSh0aGlzLmVudHJ5VHlwZXNTZWxlY3QuaWQsIGlucHV0KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQ21zOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgICAvLyB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgICAgICAgdGhpcy5fTG9jYXRpb25CYWNrU2VydmljZS5iYWNrVG8oe1xuICAgICAgICAgIHVybDogYC9jbXMvYWRtaW4vZmllbGRzYCxcbiAgICAgICAgICByZXBsZW5pc2g6ICcvZWRpdCcgXG4gICAgICAgIH0pXG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5wdXQuc2VjdGlvbklkID0gdGhpcy5zZWN0aW9uSWQ7XG4gICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlXG4gICAgICAuY3JlYXRlKGlucHV0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICAgIC8vIHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgICAgdGhpcy5fTG9jYXRpb25CYWNrU2VydmljZS5iYWNrVG8oe1xuICAgICAgICAgIHVybDogYC9jbXMvYWRtaW4vc2VjdGlvbnNgLFxuICAgICAgICAgIHJlcGxlbmlzaDogJy9jcmVhdGUnIFxuICAgICAgICB9KVxuICAgICAgICB0aGlzLl9VcGRhdGVMaXN0U2VydmljZS51cGRhdGVMaXN0KCk7XG4gICAgICB9KTtcbiAgfVxuICAvKirnvJbovpFUYWJz6KGo5Y2VICovXG4gIGVkaXRGaWVsZFRhYnNGcm9tOiBGb3JtR3JvdXA7XG4gIC8qKuaooeaAgeahhueKtuaAgSAqL1xuICB2aXNpYmxlVGFic09wZW46IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgLyoq5piv5ZCm5piv5b+Z56KM54q25oCBICovXG4gIG1vZGFsQnVzeTogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xuICAvKirmraPlnKjnvJbovpHnmoR0YWJzICovXG4gIGVkaXRGaWVsZFRhYnNTZWxlY3Q6IGFueTtcbiAgLyoq5q2j5Zyo6YCJ5Lit55qEbmF2ICovXG4gIG5hdkFjdGl2ZTogYW55ID0gMDtcblxuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXG4gIEBWaWV3Q2hpbGQoJ2VkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBlZGl0RmllbGRUYWJzTW9kYWxTdWJtaXRCdG46IEVsZW1lbnRSZWY7XG5cbiAgLyoq5qih5oCB5qGG54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIFZpc2libGVUYWJzQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0ID0gJyc7XG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIC8qKuaWsOW7uuWinuWKoEZpZWxkVGFicyAqL1xuICBhZGRGaWVsZFRhYnMoKSB7XG4gICAgdGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0ID0gJyc7XG4gICAgdGhpcy5lZGl0RmllbGRUYWJzRnJvbSA9IHRoaXMuZmIuZ3JvdXAobmV3IGZpZWxkVGFic0Jhc2UoKSk7XG4gICAgdGhpcy52aXNpYmxlVGFic09wZW4gPSB0cnVlO1xuICB9XG4gIC8qKuato+WcqOe8lui+keeahHRhYuS4i+aghyAqL1xuICBuZXdFZGl0RmllbGRUYWJzSW5kZXg6IG51bWJlciB8IGFueTtcbiAgLyoq57yW6L6RRmllbGRUYWJzICovXG4gIGVkaXRGaWVsZFRhYnMoaXRlbSwgaSkge1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic0Zyb20gPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZFRhYnNCYXNlKCkpO1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic0Zyb20ucGF0Y2hWYWx1ZSh7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0ID0gaXRlbTtcbiAgICB0aGlzLnZpc2libGVUYWJzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5uZXdFZGl0RmllbGRUYWJzSW5kZXggPSBpO1xuICB9XG5cbiAgLyoq5L+d5a2Y57yW6L6RdGFic+ihqOWNlSAqL1xuICBlZGl0RmllbGRUYWJzU2F2ZSgpIHtcbiAgICBpZiAoIXRoaXMuZWRpdEZpZWxkVGFic0Zyb20udmFsdWUubmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL+e8lui+kVxuICAgIGlmICh0aGlzLmVkaXRGaWVsZFRhYnNTZWxlY3QpIHtcbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmV3RWRpdEZpZWxkVGFic0luZGV4XS5uYW1lID0gdGhpcy5lZGl0RmllbGRUYWJzRnJvbS52YWx1ZS5uYW1lO1xuICAgICAgdGhpcy5uYXZBY3RpdmUgPSB0aGlzLm5ld0VkaXRGaWVsZFRhYnNJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy/mlrDlu7pcbiAgICAgIHRoaXMuYWRkQ29udHJvbFRvRmllbGRUYWJzKHRoaXMuZWRpdEZpZWxkVGFic0Zyb20udmFsdWUubmFtZSk7XG4gICAgfVxuICAgIHRoaXMudmlzaWJsZVRhYnNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5WaXNpYmxlVGFic0NoYW5nZShmYWxzZSk7XG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gIH1cbiAgLyoq5Yig6Zmk5p+Q5LiqdGFic+ihqOWNlSAqL1xuICBkZWxldGVGaWVsZFRhYnMoaW5kZXgpIHtcbiAgICB0aGlzLmRlbGV0ZVRhYkZpZWxkR3JvdXBMaXN0KHRoaXMucmVzdWx0U291cmNlW2luZGV4XS5maWVsZHMpO1xuICAgIC8vIHJldHVyblxuICAgIHRoaXMuZmllbGRUYWJzLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmKHRoaXMubmF2QWN0aXZlPT09aW5kZXgpe1xuICAgICAgdGhpcy5uYXZBY3RpdmUgPSAwO1xuICAgIH1cbiAgICBpZih0aGlzLm5hdkFjdGl2ZT5pbmRleCl7XG4gICAgICB0aGlzLm5hdkFjdGl2ZSA9IHRoaXMubmF2QWN0aXZlLTE7XG4gICAgfVxuICB9XG5cbiAgLyoq5Yig6ZmkdGFi5qCH562+5ZCO6L+Y5Y6fIGZpZWxkR3JvdXBMaXN0ICovXG4gIGRlbGV0ZVRhYkZpZWxkR3JvdXBMaXN0KGRlbGV0ZUZpZWxkcykge1xuICAgIC8v5Y6f5pWw5o2uXG4gICAgY29uc3QgZmllbGRMaXN0PXN0cnVjdHVyZWRDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG4gICAgLy/lj7PkvqfmiYvpo47nkLTmlbDmja5cbiAgICBjb25zdCBmb3JtUmlnaHRHcm91cD1zdHJ1Y3R1cmVkQ2xvbmUodGhpcy5mb3JtUmlnaHRHcm91cCk7XG5cbiAgICAvLyDojrflj5bopoHliKDpmaTnmoTljp/mlbDmja5cbiAgICBjb25zdCBkZWxldGVGaWVsZExpc3QgPSBmaWVsZExpc3QuZmlsdGVyKGVsPT5kZWxldGVGaWVsZHMubWFwKGl0ZW0gPT4gaXRlbS5pZCkuaW5jbHVkZXMoZWwuaWQpKSA7XG4gICAgZGVsZXRlRmllbGRMaXN0LmZvckVhY2goaXRlbT0+e1xuICAgICAgY29uc3QgaW5kZXg9Zm9ybVJpZ2h0R3JvdXAuZmluZEluZGV4KGVsPT5lbC5pZD09PWl0ZW0uaWQpO1xuICAgICAgZm9ybVJpZ2h0R3JvdXAuc3BsaWNlKFxuICAgICAgICBpbmRleCxcbiAgICAgICAgMSxcbiAgICAgICk7XG4gICAgfSlcbiAgICBcbiAgICBjb25zdCBkZWxldGVGaWVsZExpc3RHcm91cElkcz1kZWxldGVGaWVsZExpc3QubWFwKGl0ZW09Pml0ZW0uZ3JvdXBJZCk7XG4gICAgdGhpcy5maWVsZEdyb3VwTGlzdC5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGlmICggZGVsZXRlRmllbGRMaXN0R3JvdXBJZHMuaW5jbHVkZXMoZWwuaWQpKSB7XG4gICAgICAgIGNvbnN0IGVsRmllbGRzQWxsID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgZWwuZmllbGRzID0gZWxGaWVsZHNBbGwuZmlsdGVyKFxuICAgICAgICAgIGl0ZW0gPT4gIWZvcm1SaWdodEdyb3VwLnNvbWUoaXRlbUIgPT4gaXRlbS5pZCA9PT0gaXRlbUIuaWQpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybVJpZ2h0R3JvdXA9Zm9ybVJpZ2h0R3JvdXA7XG5cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuXG4gIC8qKue8lui+keWtl+auteaooeaAgeahhueKtuaAgSAqL1xuICB2aXNpYmxlRWRpdEZpZWxkT3BlbjogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xuICAvKirnvJbovpHlrZfmrrXmqKHmgIHmoYbooajljZUgKi9cbiAgZWRpdEZpZWxkRnJvbTogRm9ybUdyb3VwO1xuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2Lee8lui+keWtl+autSAqL1xuICBAVmlld0NoaWxkKCdlZGl0RmllbGRNb2RhbFN1Ym1pdEJ0bicsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0RmllbGRNb2RhbFN1Ym1pdEJ0bjogRWxlbWVudFJlZjtcbiAgLyoq5q2j5Zyo57yW6L6R55qE5a2X5q615LiL5qCHICovXG4gIEVkaXRGaWVsZEluZGV4OiBudW1iZXIgfCBhbnk7XG4gIC8qKue8lui+keWtl+auteaooeaAgeahhueKtuaAgeeKtuaAgeaUueWPmOWbnuiwgyAqL1xuICBWaXNpYmxlRWRpdEZpZWxkQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5FZGl0RmllbGRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaXNTaG93SW5MaXN0OiBib29sZWFuIHwgYW55ID0gdHJ1ZTtcbiAgaXNFbmFibGVTZWFyY2g6IGJvb2xlYW4gfCBhbnkgPSB0cnVlO1xuICAvKirmiZPlvIDnvJbovpHlrZfmrrXmqKHmgIHmoYYgKi9cbiAgRWRpdEZpZWxkTW9kYWxPcGVuKGl0ZW1zLCBlbEluZGV4KSB7XG4gICAgdGhpcy52aXNpYmxlRWRpdEZpZWxkT3BlbiA9IHRydWU7XG4gICAgdGhpcy5FZGl0RmllbGRJbmRleCA9IGVsSW5kZXg7XG4gICAgdGhpcy5lZGl0RmllbGRGcm9tID0gdGhpcy5mYi5ncm91cChuZXcgZmllbGRzQmFzZSgpKTtcbiAgICBjb25zdCBmaWVsZHNPcHRpb25zID0gdGhpcy5maWVsZFRhYnMudmFsdWVbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1tlbEluZGV4XTtcbiAgICAvLyB0aGlzLmlzU2hvd0luTGlzdCA9ICF0aGlzLmRpc2FibGVzaG93aW5UeXBlTGlzdC5pbmNsdWRlcyhmaWVsZHNPcHRpb25zLmZpZWxkLmZvcm1Db250cm9sTmFtZSk7XG4gICAgLy8gdGhpcy5pc0VuYWJsZVNlYXJjaCA9IHRoaXMuZW5hYmxlU2VhcmNoVHlwZUxpc3QuaW5jbHVkZXMoZmllbGRzT3B0aW9ucy5maWVsZC5mb3JtQ29udHJvbE5hbWUpO1xuICAgIHRoaXMuZWRpdEZpZWxkRnJvbS5wYXRjaFZhbHVlKGZpZWxkc09wdGlvbnMpO1xuICAgIC8vIHRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0XG4gIH1cbiAgLyoq5L+d5a2Y57yW6L6R5a2X5q61ICovXG4gIGVkaXRGaWVsZFNhdmUoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmVkaXRGaWVsZEZyb20udmFsdWU7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5kaXNwbGF5TmFtZSA9IGlucHV0LmRpc3BsYXlOYW1lO1xuICAgIHRoaXMudmlzaWJsZUVkaXRGaWVsZE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuXG4gIC8qKueCueWHu+KAnOWtl+auteW4g+WxgOKAneWkjemAieahhuS6i+S7tiAqL1xuICBjaGVja2JveENoYW5nZShldmVudCxpbnB1dCkge1xuICAgIGNvbnN0IHtjaGVja2VkLG5hbWV9PWV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB7aW5kZXh9PWlucHV0O1xuICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbaW5kZXhdW25hbWVdPWNoZWNrZWQ7XG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gICAgdGhpcy5zZXRBbGxTZWxlY3RTdGF1dHMoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhldmVudC50YXJnZXQsJ+eCueWHu+KAnOWtl+auteW4g+WxgOKAneWkjemAieahhuS6i+S7tiAnLGV2ZW50LGlucHV0LCdyZXN1bHRTb3VyY2UnLHRoaXMucmVzdWx0U291cmNlLCduZXdFbnRpdHknLHRoaXMubmV3RW50aXR5KTtcbiAgfVxuXG4gIC8qKuWFqOmAieeKtuaAgeaUueWPmCAqL1xuICBhbGxTZWxlY3RDaGFuZ2UoZXZlbnQsbmFtZSl7XG4gICAgY29uc3Qge2NoZWNrZWR9PWV2ZW50LnRhcmdldDtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLmZvckVhY2goZWw9PntcbiAgICAgIGVsW25hbWVdPWNoZWNrZWQ7XG4gICAgfSlcbiAgICBjb25zb2xlLmxvZyh0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLCd0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzJyxuYW1lLGNoZWNrZWQpO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICAgIHRoaXMuc2V0QWxsU2VsZWN0U3RhdXRzKCk7XG4gIH1cblxuXG5cblxuICAvKipuYW1l6KGo5Y2V5o6n5Lu2ICovXG4gIGdldCBuYW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmV3RW50aXR5LmdldCgnbmFtZScpO1xuICB9XG4gIC8qKuWtl+auteagh+etvmlucHV05aSx5Y675qCH54K555Sf5oiQ5a2X5q615ZCN5a2XICovXG4gIGRpc1BsYXlOYW1lSW5wdXRCbHVyKGV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3QgcGlueWluID0gdGhpcy50b1BpbnlpblNlcnZpY2UuZ2V0KHZhbHVlKTtcbiAgICBjb25zdCBuYW1lSW5wdXQ6IGFueSA9IHRoaXMubmFtZUlucHV0O1xuICAgIGlmIChuYW1lSW5wdXQudmFsdWUpIHJldHVybjtcbiAgICBuYW1lSW5wdXQucGF0Y2hWYWx1ZShwaW55aW4pO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cInJvdyBnLTMgbmVlZHMtdmFsaWRhdGlvblwiIFtmb3JtR3JvdXBdPVwibmV3RW50aXR5XCIgW2NsYXNzXT1cInsnd2FzLXZhbGlkYXRlZCc6Zm9ybVZhbGlkYXRpb259XCJcbiAgICAoc3VibWl0KT1cInNhdmUoKVwiPlxuICAgIDxhYnAtcGFnZSBbdGl0bGVdPVwiZW50cnlUeXBlc0lkID8gKCdBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb24pOignQ21zOjpOZXcnIHwgYWJwTG9jYWxpemF0aW9uKVwiXG4gICAgICAgIFt0b29sYmFyXT1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZS1vci1lZGl0LWVudHJ5LXR5cGUtcGFnZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cImRpc1BsYXlOYW1lSW5wdXRCbHVyKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaWVsZFRhYnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpGaWVsZExheW91dCcgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTggYm9yZGVyIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwibmF2QWN0aXZlXCIgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVzdWx0U291cmNlOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cImlcIiBuZ2JEcm9wZG93biBjbGFzcz1cIm5hdi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBuZ2JOYXZMaW5rIGNsYXNzPVwibmF2LWxpbmtcIiAoY2xpY2suc3RvcCk9XCJzZXRBbGxTZWxlY3RTdGF1dHMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTFcIiAoY2xpY2suc3RvcCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IHN0eWxlPVwiei1pbmRleDogOTk5O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmdiRHJvcGRvd25JdGVtIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljay5zdG9wKT1cImVkaXRGaWVsZFRhYnMoaXRlbSxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWVkaXRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIG5nYkRyb3Bkb3duSXRlbSAqbmdJZj1cInJlc3VsdFNvdXJjZS5sZW5ndGggIT09IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2suc3RvcCk9XCJkZWxldGVGaWVsZFRhYnMoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBYnBVaTo6RGVsZXRlJyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiBvbmRyYWdvdmVyPVwiZXZlbnQucHJldmVudERlZmF1bHQoKTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcm9wKT1cImRyYWdUb1Jlc3VsdFNvdXJjZURyb3BwZWQoaXRlbSxpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5maWVsZHMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0Ntczo6RHJhZ0FuZERyb3BGaWVsZFRpcHMnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIiAqbmdJZj1cIml0ZW0uZmllbGRzLmxlbmd0aD4wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7J0Ntczo6RGlzcGxheU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTFcIiBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdC5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJhbGxTZWxlY3RDaGFuZ2UoJGV2ZW50LCdyZXF1aXJlZCcpXCIgLz57eydDbXM6OlJlcXVpcmVkJyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cImJ1dHRvblwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0xXCIgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3QuaXNTaG93SW5MaXN0XCIgKGNoYW5nZSk9XCJhbGxTZWxlY3RDaGFuZ2UoJGV2ZW50LCdzaG93SW5MaXN0JylcIiAvPnt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMVwiIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0LmlzRW5hYmxlU2VhcmNoXCIgKGNoYW5nZSk9XCJhbGxTZWxlY3RDaGFuZ2UoJGV2ZW50LCdlbmFibGVTZWFyY2gnKVwiIC8+e3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImZyb21SZXN1bHRTb3VyY2VEcmFnU3RhcnQoZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlIGQtaW5saW5lXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBlbC5kaXNwbGF5TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2NoZWNrZWRdPVwiZWwucmVxdWlyZWRcIiAgbmFtZT1cInJlcXVpcmVkXCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJlbC5zaG93SW5MaXN0XCIgIG5hbWU9XCJzaG93SW5MaXN0XCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJlbC5lbmFibGVTZWFyY2hcIiAgICBuYW1lPVwiZW5hYmxlU2VhcmNoXCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDElO1wiPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMCBidG4gYnRuLXNtIGJ0bi1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiRWRpdEZpZWxkTW9kYWxPcGVuKGVsLGllbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS13cmVuY2ggcC1zbS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiB1bnNldDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLTAgYnRuIGJ0bi1zbSBidG4tbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJFZGl0RmllbGRNb2RhbE9wZW4oZWwsaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtd3JlbmNoIHAtc20tMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJhZGRGaWVsZFRhYnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpOZXdUYWInIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIiBjbGFzcz1cIm10LTIgYm9yZGVybk5hdnMgcC0wXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uICNhY2NvcmRpb249XCJuZ2JBY2NvcmRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25kcmFnb3Zlcj1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7XCIgKGRyb3ApPVwiZHJhZ1RvRGF0YVNvdXJjZURyb3BwZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDgwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkR3JvdXBMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiQWNjb3JkaW9uSXRlbV09XCJpdGVtLm5hbWVcIiAqbmdJZj1cIml0ZW0uZmllbGRzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIG5nYkFjY29yZGlvbkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiQWNjb3JkaW9uQnV0dG9uPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDbXM6OicraXRlbS5uYW1lKSB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGlpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZnJvbURhdGFTb3VyY2VEcmFnU3RhcnQoZWwsaWksaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgIDwvYWJwLXBhZ2U+XG5cbjwvZm9ybT5cbjwhLS0g55So5LqO5Yib5bu657yW6L6RdGFi55qE5qih5oCB5qGGIC0tPlxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVUYWJzT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVUYWJzQ2hhbmdlKCRldmVudClcIj5cbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICAgICAgPGgzPnt7IGVkaXRGaWVsZFRhYnNTZWxlY3QgPyAoJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbik6KCdDbXM6Ok5ldycgfCBhYnBMb2NhbGl6YXRpb24pfX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZFRhYnNGcm9tOyBlbHNlIGxvYWRlclJlZlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJzaXRlcy1tb2RhbC1mb3JtXCIgW2Zvcm1Hcm91cF09XCJlZGl0RmllbGRUYWJzRnJvbVwiIFtjbGFzc109XCJ7J3dhcy12YWxpZGF0ZWQnOmZvcm1WYWxpZGF0aW9ufVwiXG4gICAgICAgICAgICAgICAgKHN1Ym1pdCk9XCJlZGl0RmllbGRUYWJzU2F2ZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgI2VkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0biBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgKGNsaWNrKT1cImVkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKClcIj57eydBYnBVaTo6U2F2ZSdcbiAgICAgICAgICAgIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuXG48IS0tIOeUqOS6juS/ruaUueWtl+autemFjee9rueahOaooeaAgeahhiAtLT5cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlRWRpdEZpZWxkT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVFZGl0RmllbGRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZEZyb207IGVsc2UgbG9hZGVyUmVmXCI+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInNpdGVzLW1vZGFsLWZvcm1cIiBbZm9ybUdyb3VwXT1cImVkaXRGaWVsZEZyb21cIiAoc3VibWl0KT1cImVkaXRGaWVsZFNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNlZGl0RmllbGRNb2RhbFN1Ym1pdEJ0biBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlcXVpcmVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJyZXF1aXJlZFwiPiB7eydDbXM6OlJlcXVpcmVkJyB8IGFicExvY2FsaXphdGlvbn19IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIEBpZihpc1Nob3dJbkxpc3Qpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd0luTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzaG93SW5MaXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzaG93SW5MaXN0XCI+IHt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZihpc0VuYWJsZVNlYXJjaCl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZW5hYmxlU2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJlbmFibGVTZWFyY2hcIj4ge3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiBbZGlzYWJsZWRdPVwiIWVkaXRGaWVsZEZyb20udmFsaWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRGaWVsZE1vZGFsU3VibWl0QnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
|