@bnsights/bbsf-admin-portal 1.0.76 → 1.0.78

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.
Files changed (79) hide show
  1. package/README.md +4 -0
  2. package/bnsights-bbsf-admin-portal-1.0.78.tgz +0 -0
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js +6984 -423
  4. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  5. package/esm2015/lib/Pages/documents/document-template-info/document-template-info.component.js +98 -40
  6. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +1 -1
  7. package/esm2015/lib/Pages/shared/Services/DocumentTemplateService.service.js +16 -1
  8. package/esm2015/lib/Pages/shared/word/constants.js +105 -0
  9. package/esm2015/lib/Pages/shared/word/docx-document.js +348 -0
  10. package/esm2015/lib/Pages/shared/word/helpers/index.js +4 -0
  11. package/esm2015/lib/Pages/shared/word/helpers/render-document-file.js +278 -0
  12. package/esm2015/lib/Pages/shared/word/helpers/xml-builder.js +1678 -0
  13. package/esm2015/lib/Pages/shared/word/html-to-docx.js +183 -0
  14. package/esm2015/lib/Pages/shared/word/index.js +53 -0
  15. package/esm2015/lib/Pages/shared/word/namespaces.js +37 -0
  16. package/esm2015/lib/Pages/shared/word/schemas/content-types.js +26 -0
  17. package/esm2015/lib/Pages/shared/word/schemas/core.js +27 -0
  18. package/esm2015/lib/Pages/shared/word/schemas/document-rels.js +16 -0
  19. package/esm2015/lib/Pages/shared/word/schemas/document.template.js +45 -0
  20. package/esm2015/lib/Pages/shared/word/schemas/font-table.js +40 -0
  21. package/esm2015/lib/Pages/shared/word/schemas/generic-rels.js +8 -0
  22. package/esm2015/lib/Pages/shared/word/schemas/index.js +13 -0
  23. package/esm2015/lib/Pages/shared/word/schemas/numbering.js +17 -0
  24. package/esm2015/lib/Pages/shared/word/schemas/rels.js +11 -0
  25. package/esm2015/lib/Pages/shared/word/schemas/settings.js +13 -0
  26. package/esm2015/lib/Pages/shared/word/schemas/styles.js +147 -0
  27. package/esm2015/lib/Pages/shared/word/schemas/theme.js +198 -0
  28. package/esm2015/lib/Pages/shared/word/schemas/web-settings.js +9 -0
  29. package/esm2015/lib/Pages/shared/word/utils/color-conversion.js +60 -0
  30. package/esm2015/lib/Pages/shared/word/utils/list.js +51 -0
  31. package/esm2015/lib/Pages/shared/word/utils/unit-conversion.js +30 -0
  32. package/esm2015/lib/Pages/shared/word/utils/url.js +7 -0
  33. package/esm2015/lib/Pages/shared/word/utils/vnode.js +3 -0
  34. package/esm2015/lib/Pages/shared/word/word-work/templates/documentTemplate.js +54 -0
  35. package/esm2015/lib/Pages/shared/word/word-work/templates/index.js +4 -0
  36. package/esm2015/lib/Pages/shared/word/word-work/templates/mhtDocumentTemplate.js +21 -0
  37. package/esm2015/lib/Pages/shared/word/word-work/templates/mhtPartTemplate.js +10 -0
  38. package/esm2015/lib/Pages/shared/word/word-work/utils.js +24 -0
  39. package/esm2015/lib/masterlayout.module.js +4 -1
  40. package/esm2015/public-api.js +5 -2
  41. package/fesm2015/bnsights-bbsf-admin-portal.js +7022 -74
  42. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  43. package/lib/Pages/documents/document-template-info/document-template-info.component.d.ts +4 -3
  44. package/lib/Pages/shared/Services/DocumentTemplateService.service.d.ts +3 -0
  45. package/lib/Pages/shared/word/constants.d.ts +124 -0
  46. package/lib/Pages/shared/word/docx-document.d.ts +73 -0
  47. package/lib/Pages/shared/word/helpers/index.d.ts +1 -0
  48. package/lib/Pages/shared/word/helpers/render-document-file.d.ts +4 -0
  49. package/lib/Pages/shared/word/helpers/xml-builder.d.ts +14 -0
  50. package/lib/Pages/shared/word/html-to-docx.d.ts +1 -0
  51. package/lib/Pages/shared/word/index.d.ts +1 -0
  52. package/lib/Pages/shared/word/namespaces.d.ts +36 -0
  53. package/lib/Pages/shared/word/schemas/content-types.d.ts +1 -0
  54. package/lib/Pages/shared/word/schemas/core.d.ts +1 -0
  55. package/lib/Pages/shared/word/schemas/document-rels.d.ts +1 -0
  56. package/lib/Pages/shared/word/schemas/document.template.d.ts +3 -0
  57. package/lib/Pages/shared/word/schemas/font-table.d.ts +1 -0
  58. package/lib/Pages/shared/word/schemas/generic-rels.d.ts +1 -0
  59. package/lib/Pages/shared/word/schemas/index.d.ts +12 -0
  60. package/lib/Pages/shared/word/schemas/numbering.d.ts +1 -0
  61. package/lib/Pages/shared/word/schemas/rels.d.ts +1 -0
  62. package/lib/Pages/shared/word/schemas/settings.d.ts +1 -0
  63. package/lib/Pages/shared/word/schemas/styles.d.ts +1 -0
  64. package/lib/Pages/shared/word/schemas/theme.d.ts +1 -0
  65. package/lib/Pages/shared/word/schemas/web-settings.d.ts +1 -0
  66. package/lib/Pages/shared/word/utils/color-conversion.d.ts +7 -0
  67. package/lib/Pages/shared/word/utils/list.d.ts +6 -0
  68. package/lib/Pages/shared/word/utils/unit-conversion.d.ts +29 -0
  69. package/lib/Pages/shared/word/utils/url.d.ts +1 -0
  70. package/lib/Pages/shared/word/utils/vnode.d.ts +1 -0
  71. package/lib/Pages/shared/word/word-work/templates/documentTemplate.d.ts +12 -0
  72. package/lib/Pages/shared/word/word-work/templates/index.d.ts +3 -0
  73. package/lib/Pages/shared/word/word-work/templates/mhtDocumentTemplate.d.ts +1 -0
  74. package/lib/Pages/shared/word/word-work/templates/mhtPartTemplate.d.ts +1 -0
  75. package/lib/Pages/shared/word/word-work/utils.d.ts +1 -0
  76. package/package.json +18 -3
  77. package/public-api.d.ts +2 -0
  78. package/src/lib/assets/images/menu/Sectors.svg +1 -1
  79. package/bnsights-bbsf-admin-portal-1.0.76.tgz +0 -0
@@ -1,11 +1,12 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component } from '@angular/core';
3
- import { AppBaseComponent, ControlLayout, DataType, DropdownOptions, EnglishArabicDTO, FormOptions, InputType, MultiLingualTextAreaOptions, MultiLingualTextBoxOptions, RepeaterField, RepeaterOptions, TextAreaOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
3
+ import { AppBaseComponent, ControlLayout, DataType, DropdownOptions, EnglishArabicDTO, FormOptions, InputType, MultiLingualTextAreaOptions, MultiLingualTextBoxOptions, RepeaterField, RepeaterOptions, TextAreaOptions, TextBoxOptions, } from '@bnsights/bbsf-controls';
4
4
  import { FormGroup } from '@angular/forms';
5
5
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
6
6
  import { DocumentTemplateDTO } from '../../shared/models/DocumentsModels/DocumentTemplateDTO';
7
- import * as saveAs from "file-saver";
8
- import { DocumentExportDTO, DocumentExportItemDTO } from '../../shared/models/DocumentsModels/DocumentExportDTO';
7
+ import * as saveAs from 'file-saver';
8
+ import { DocumentExportDTO, DocumentExportItemDTO, } from '../../shared/models/DocumentsModels/DocumentExportDTO';
9
+ import { generateContainer as GenerateDOCX } from '../../shared/word/index';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@bnsights/bbsf-utilities";
11
12
  import * as i2 from "ngx-clipboard";
@@ -31,21 +32,22 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
31
32
  this.modalService = modalService;
32
33
  this.datepipe = datepipe;
33
34
  this.requestHandlerService = requestHandlerService;
34
- this.TemplateIdEnc = "";
35
+ this.TemplateIdEnc = '';
35
36
  this.isDataLoaded = false;
36
37
  this.saveAs = saveAs;
38
+ this.exportType = 1;
37
39
  //Required lists
38
40
  this.CategoryList = [];
39
41
  this.OrganizationList = [];
40
42
  this.MasterLayoutList = [];
41
43
  //GenerateCode Model Controls
42
44
  this.GenerateCodeForm = new FormGroup({});
43
- this.ValueToCopy = "";
45
+ this.ValueToCopy = '';
44
46
  //Edit Model Controls
45
47
  this.EditTemplateForm = new FormGroup({});
46
48
  //Test Export Model Controls
47
49
  this.TestExportDocumentForm = new FormGroup({});
48
- this.TestExportDocumentFormOptions = new FormOptions;
50
+ this.TestExportDocumentFormOptions = new FormOptions();
49
51
  this.getEditTemplateModel = () => {
50
52
  let paramArray = [];
51
53
  let ResultModel = this.EditTemplateForm.value;
@@ -54,7 +56,8 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
54
56
  EditModel.Name.Arabic = ResultModel.Name.Arabic;
55
57
  EditModel.Name.English = ResultModel.Name.English;
56
58
  EditModel.SysName = ResultModel.SysName;
57
- EditModel.DocumentHeaderAndFooterTemplateID_GUID = ResultModel.DocumentHeaderAndFooterTemplateID_GUID;
59
+ EditModel.DocumentHeaderAndFooterTemplateID_GUID =
60
+ ResultModel.DocumentHeaderAndFooterTemplateID_GUID;
58
61
  EditModel.Description.English = ResultModel.Description.English;
59
62
  EditModel.Description.Arabic = ResultModel.Description.Arabic;
60
63
  EditModel.OrganizationID_GUID = ResultModel.OrganizationID_GUID;
@@ -85,15 +88,46 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
85
88
  return paramArray;
86
89
  };
87
90
  this.getTestExportDocumentFunction = (ExportDocumentTemplateModel) => {
91
+ if (this.exportType == 2)
92
+ return this.templateService.exportWord(ExportDocumentTemplateModel);
88
93
  return this.templateService.exportPDF(ExportDocumentTemplateModel);
89
94
  };
90
- this.onSuccessExportHandler = (result) => {
95
+ this.onSuccessExportHandler = (result) => __awaiter(this, void 0, void 0, function* () {
91
96
  let now = new Date().toISOString();
92
97
  let latest_date = this.datepipe.transform(now, 'dd-MM-yyyy HH.mm');
93
- let fileName = this.TemplateInfo.localizedTemplateName + "_" + latest_date + ".pdf";
98
+ if (this.exportType == 2) {
99
+ let fileName = this.TemplateInfo.localizedTemplateName + '_' + latest_date + '.doc';
100
+ let documentOptions = {};
101
+ if (result.isLandscape)
102
+ documentOptions.orientation = 'landscape';
103
+ documentOptions.pageNumber = result.showPaging;
104
+ documentOptions.pageSize = {
105
+ width: result.pageWidth * 15,
106
+ height: result.pageHeight * 15
107
+ };
108
+ documentOptions.margins = {
109
+ top: result.top * 15,
110
+ right: result.right * 15,
111
+ bottom: result.bottom * 15,
112
+ left: result.left * 15,
113
+ header: 720,
114
+ footer: 720,
115
+ gutter: 0,
116
+ };
117
+ documentOptions.footer = true;
118
+ documentOptions.header = true;
119
+ documentOptions.pageNumber = true;
120
+ documentOptions.table = { row: { cantSplit: true } };
121
+ var fileBuffer = yield GenerateDOCX(result.body, result.header, documentOptions, result.footer);
122
+ this.downloadWord(fileBuffer, fileName);
123
+ var fileBufferLib = yield this.templateService.generateWordByteFile(result.body, result.header, documentOptions, result.footer);
124
+ this.downloadWord(fileBuffer, "Lib" + fileName);
125
+ return;
126
+ }
127
+ let fileName = this.TemplateInfo.localizedTemplateName + '_' + latest_date + '.pdf';
94
128
  this.downloadPDF(result, fileName);
95
- };
96
- this.activatedRoute.params.subscribe(params => {
129
+ });
130
+ this.activatedRoute.params.subscribe((params) => {
97
131
  this.TemplateId = params['id'];
98
132
  });
99
133
  }
@@ -111,15 +145,27 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
111
145
  //Initialize page info
112
146
  initializePage() {
113
147
  this.isDataLoaded = false;
114
- this.templateService.getTemplateInfo(this.TemplateId).subscribe((result) => {
148
+ this.templateService
149
+ .getTemplateInfo(this.TemplateId)
150
+ .subscribe((result) => {
115
151
  let Result = result;
116
152
  this.TemplateInfo = Result.val;
117
153
  PageInfoService.PageTitle = this.TemplateInfo.localizedTemplateName;
118
154
  PageInfoService.PageBreadcrumbs = [
119
- { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
155
+ {
156
+ title: this.utilityService.getResourceValue('Home'),
157
+ path: '/Admin/Home',
158
+ isSeparator: false,
159
+ isActive: false,
160
+ },
161
+ { title: '', path: '', isSeparator: true, isActive: false },
162
+ {
163
+ title: this.utilityService.getResourceValue('Templates'),
164
+ path: '/Admin/Documents/Templates',
165
+ isSeparator: false,
166
+ isActive: false,
167
+ },
120
168
  { title: '', path: '', isSeparator: true, isActive: false },
121
- { title: this.utilityService.getResourceValue("Templates"), path: '/Admin/Documents/Templates', isSeparator: false, isActive: false },
122
- { title: '', path: '', isSeparator: true, isActive: false }
123
169
  ];
124
170
  this.isDataLoaded = true;
125
171
  this.utilityService.stopBlockUI();
@@ -129,10 +175,12 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
129
175
  }
130
176
  //Generate Code
131
177
  showGenerateCodeByIdModal(GenerateCodeModal) {
132
- this.templateService.generateCodeById(this.TemplateId).subscribe((result) => {
178
+ this.templateService
179
+ .generateCodeById(this.TemplateId)
180
+ .subscribe((result) => {
133
181
  var Value = result;
134
182
  this.GenerateCodeTextArea = new TextAreaOptions();
135
- this.GenerateCodeTextArea.Name = "GenerateCodeTextArea";
183
+ this.GenerateCodeTextArea.Name = 'GenerateCodeTextArea';
136
184
  this.GenerateCodeTextArea.Value = Value.val.toString();
137
185
  this.ValueToCopy = Value.val.toString();
138
186
  this.GenerateCodeTextArea.IsDisabled = true;
@@ -145,10 +193,12 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
145
193
  }
146
194
  showGenerateUpdateCodeByIdModal(GenerateCodeModal) {
147
195
  this.GenerateCodeForm = new FormGroup({});
148
- this.templateService.generateUpdateCodeById(this.TemplateId).subscribe((result) => {
196
+ this.templateService
197
+ .generateUpdateCodeById(this.TemplateId)
198
+ .subscribe((result) => {
149
199
  var Value = result;
150
200
  this.GenerateCodeTextArea = new TextAreaOptions();
151
- this.GenerateCodeTextArea.Name = "GenerateCodeTextArea";
201
+ this.GenerateCodeTextArea.Name = 'GenerateCodeTextArea';
152
202
  this.GenerateCodeTextArea.Value = Value.val.toString();
153
203
  this.ValueToCopy = Value.val.toString();
154
204
  this.GenerateCodeTextArea.IsDisabled = true;
@@ -166,7 +216,9 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
166
216
  //Edit Template
167
217
  showEditTemplateModal(EditTemplateModal) {
168
218
  this.utilityService.startBlockUI();
169
- this.templateService.getEditTemplateData(this.TemplateId).subscribe((result) => {
219
+ this.templateService
220
+ .getEditTemplateData(this.TemplateId)
221
+ .subscribe((result) => {
170
222
  var _a, _b, _c;
171
223
  let resultObj = result;
172
224
  let template = resultObj.model;
@@ -177,7 +229,8 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
177
229
  this.EditTemplateForm = new FormGroup({});
178
230
  this.EditTemplateFormOptions = new FormOptions();
179
231
  this.EditTemplateFormOptions.FormGroup = this.EditTemplateForm;
180
- this.EditTemplateFormOptions.GetModelFunction = this.getEditTemplateModel;
232
+ this.EditTemplateFormOptions.GetModelFunction =
233
+ this.getEditTemplateModel;
181
234
  this.EditTemplateFormOptions.ServiceSubmitFunction =
182
235
  this.getEditTemplateFunction;
183
236
  let Name = new EnglishArabicDTO();
@@ -233,52 +286,57 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
233
286
  this.EditCategory.AllowSearchFilter = true;
234
287
  this.EditCategory.Placeholder = '';
235
288
  this.EditCategory.IsRequired = true;
236
- this.EditCategory.SelectedItems = (_c = template.categoryItemID_GUID) === null || _c === void 0 ? void 0 : _c.toLowerCase();
289
+ this.EditCategory.SelectedItems =
290
+ (_c = template.categoryItemID_GUID) === null || _c === void 0 ? void 0 : _c.toLowerCase();
237
291
  this.modalService.open(EditTemplateModal);
238
292
  this.utilityService.stopBlockUI();
239
293
  });
240
294
  }
241
295
  //Test Send Email
242
- showTestExportDocumentModal(TestExportDocumentModal) {
296
+ showTestExportDocumentModal(TestExportDocumentModal, type = 1) {
297
+ this.exportType = type;
243
298
  this.TestExportDocumentForm = new FormGroup({});
244
299
  this.TestExportDocumentFormOptions = new FormOptions();
245
300
  this.TestExportDocumentFormOptions.FormGroup = this.TestExportDocumentForm;
246
- this.TestExportDocumentFormOptions.GetModelFunction = this.getTestExportDocumentModel;
247
- this.TestExportDocumentFormOptions.ServiceSubmitFunction = this.getTestExportDocumentFunction;
248
- this.TestExportDocumentFormOptions.OnSuccessHandler = this.onSuccessExportHandler;
301
+ this.TestExportDocumentFormOptions.GetModelFunction =
302
+ this.getTestExportDocumentModel;
303
+ this.TestExportDocumentFormOptions.ServiceSubmitFunction =
304
+ this.getTestExportDocumentFunction;
305
+ this.TestExportDocumentFormOptions.OnSuccessHandler =
306
+ this.onSuccessExportHandler;
249
307
  this.TestExportDocumentFormOptions.DisableSuccessNotification = true;
250
308
  let Key = new TextBoxOptions();
251
- Key.Name = "Key";
309
+ Key.Name = 'Key';
252
310
  Key.HideLabel = true;
253
311
  Key.ViewType = ControlLayout.Vertical;
254
312
  Key.Type = InputType.Text;
255
313
  let Value = new TextBoxOptions();
256
- Value.Name = "Value";
314
+ Value.Name = 'Value';
257
315
  Value.HideLabel = true;
258
316
  Value.ViewType = ControlLayout.Vertical;
259
317
  Value.Type = InputType.Text;
260
318
  let KeyRepeater = new RepeaterField();
261
319
  KeyRepeater.ControlType = DataType.Text;
262
320
  KeyRepeater.ControlOptions = Key;
263
- KeyRepeater.HeaderTitle = this.utilityService.getResourceValue("Key");
321
+ KeyRepeater.HeaderTitle = this.utilityService.getResourceValue('Key');
264
322
  let ValueRepeater = new RepeaterField();
265
323
  ValueRepeater.ControlType = DataType.Text;
266
324
  ValueRepeater.ControlOptions = Value;
267
- ValueRepeater.HeaderTitle = this.utilityService.getResourceValue("Value");
325
+ ValueRepeater.HeaderTitle = this.utilityService.getResourceValue('Value');
268
326
  this.addKeyValueRepeaterOptions = new RepeaterOptions();
269
327
  this.addKeyValueRepeaterOptions.IsRequired = false;
270
- this.addKeyValueRepeaterOptions.Name = "values";
328
+ this.addKeyValueRepeaterOptions.Name = 'values';
271
329
  this.addKeyValueRepeaterOptions.DeleteButtonExtraClasses =
272
- "btn btn-danger btn-sm btn-icon";
330
+ 'btn btn-danger btn-sm btn-icon';
273
331
  this.addKeyValueRepeaterOptions.DeleteButtonText = `<i class="fa fa-trash"></i>`;
274
332
  this.addKeyValueRepeaterOptions.RepeaterTableExtraClasses =
275
- "table align-middle table-row-dashed fs-6 gy-9 dataTable no-footer validation-table-text";
333
+ 'table align-middle table-row-dashed fs-6 gy-9 dataTable no-footer validation-table-text';
276
334
  this.addKeyValueRepeaterOptions.RepeaterTableRowExtraClasses =
277
- "text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0";
278
- this.addKeyValueRepeaterOptions.ActionLabelKey = "Action";
335
+ 'text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0';
336
+ this.addKeyValueRepeaterOptions.ActionLabelKey = 'Action';
279
337
  this.addKeyValueRepeaterOptions.AddButtonExtraClasses =
280
- "btn btn-primary btn-block";
281
- this.addKeyValueRepeaterOptions.AddButtonText = `<i class="fa fa-plus"></i>${this.utilityService.getResourceValue("Add")}`;
338
+ 'btn btn-primary btn-block';
339
+ this.addKeyValueRepeaterOptions.AddButtonText = `<i class="fa fa-plus"></i>${this.utilityService.getResourceValue('Add')}`;
282
340
  this.addKeyValueRepeaterOptions.MinRequiredItems = 1;
283
341
  this.addKeyValueRepeaterOptions.RepeaterValue = [];
284
342
  this.addKeyValueRepeaterOptions.RepeaterStructure = [
@@ -293,12 +351,12 @@ export class DocumentTemplateInfoComponent extends AppBaseComponent {
293
351
  }
294
352
  }
295
353
  DocumentTemplateInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: DocumentTemplateInfoComponent, deps: [{ token: i0.Injector }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i2.ClipboardService }, { token: i3.DocumentTemplateService }, { token: i4.ActivatedRoute }, { token: i5.PageInfoService }, { token: i6.NgbModal }, { token: i7.DatePipe }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
296
- DocumentTemplateInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: DocumentTemplateInfoComponent, selector: "lib-document-template-info", usesInheritance: true, ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n<div class=\"container-fluid\" *ngIf=\"isDataLoaded\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-light-primary\"\r\n (click)=\"showEditTemplateModal(EditTemplateModal)\">\r\n <i class=\"fa fa fa-edit\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-light-primary\"\r\n (click)=\"showTestExportDocumentModal(ExportDocumentModal)\">\r\n <i class=\"fa fa fa-download\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"Export\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateCodeByIdModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-bars\"></i>{{utilityService.getResourceValue(\"GenerateCode\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateUpdateCodeByIdModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-key\"></i>{{utilityService.getResourceValue(\"GenerateUpdateCode\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center \">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light\r\n py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5\r\n fw-boldest fs-2\">\r\n English:\r\n {{TemplateInfo.templateNameEN}}\r\n </a>\r\n\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm\r\n btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3\">\r\n <div innerHTML=\"{{TemplateInfo.headerEN}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.bodyEN}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.footerEN}}\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center\">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light\r\n py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5\r\n fw-boldest fs-2\">\r\n Arabic:\r\n {{TemplateInfo.templateNameAR}}\r\n </a>\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm\r\n btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3 ar\">\r\n <div innerHTML=\"{{TemplateInfo.headerAR}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.bodyAR}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.footerAR}}\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<!-- edit Modal -->\r\n<ng-template #EditTemplateModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn\r\n btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Edit\")}}\r\n {{utilityService.getResourceValue(\"Template\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"EditTemplateFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\"\r\n [group]=\"EditTemplateForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"EditDescription\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditSysName\" [group]=\"EditTemplateForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditOrganization\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditCategory\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditMasterLayout\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditTemplateModal id=\"CloseEditTemplateModal\"\r\n type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<!-- Export Document Modal -->\r\n<ng-template #ExportDocumentModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Export\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"TestExportDocumentFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-repeater-table [options]=\"addKeyValueRepeaterOptions\" [group]=\"TestExportDocumentForm\">\r\n </BBSF-repeater-table>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseSendEmailForm id=\"CloseSendEmailForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Export\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- GenerateCode Modal -->\r\n<ng-template #GenerateCodeModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn\r\n btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"GenerateCode\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"GenerateCodeForm\">\r\n\r\n <div class=\"Row\">\r\n <BBSF-TextArea [options]=\"GenerateCodeTextArea\"\r\n [group]=\"GenerateCodeForm\" #GenerateCodeInput>\r\n </BBSF-TextArea>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseGenerateCodeModal id=\"CloseGenerateCodeModal\"\r\n type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"copyInputMessage()\">\r\n {{utilityService.getResourceValue(\"CopyToClipboard\")}}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n", components: [{ type: i8.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i9.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { type: i9.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.MultiLingualTextAreaComponent, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i9.RepeaterTableComponent, selector: "BBSF-repeater-table", inputs: ["group", "options"] }, { type: i9.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
354
+ DocumentTemplateInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: DocumentTemplateInfoComponent, selector: "lib-document-template-info", usesInheritance: true, ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n<div class=\"container-fluid\" *ngIf=\"isDataLoaded\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-light-primary\"\r\n (click)=\"showEditTemplateModal(EditTemplateModal)\">\r\n <i class=\"fa fa fa-edit\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-light-primary\"\r\n (click)=\"showTestExportDocumentModal(ExportDocumentModal)\">\r\n <i class=\"fa fa fa-download\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"Export\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-light-primary\"\r\n (click)=\"showTestExportDocumentModal(ExportDocumentModal,2)\">\r\n <i class=\"fa fa fa-download\" aria-hidden=\"true\"></i>\r\n <span>{{utilityService.getResourceValue(\"ExportWord\")}}</span>\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateCodeByIdModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-bars\"></i>{{utilityService.getResourceValue(\"GenerateCode\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnSetPass\" class=\"btn btn-sm me-3\r\n btn-primary\" *ngIf=\"!ProductionMode\"\r\n (click)=\"showGenerateUpdateCodeByIdModal(GenerateCodeModal)\">\r\n <i class=\"fa fa-key\"></i>{{utilityService.getResourceValue(\"GenerateUpdateCode\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center \">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light\r\n py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5\r\n fw-boldest fs-2\">\r\n English:\r\n {{TemplateInfo.templateNameEN}}\r\n </a>\r\n\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'en']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm\r\n btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3\">\r\n <div innerHTML=\"{{TemplateInfo.headerEN}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.bodyEN}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.footerEN}}\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n <div class=\"col-xl-6 mb-10\">\r\n <div class=\"d-flex h-100 align-items-center\">\r\n <!--begin::Option-->\r\n <div class=\"w-100 d-flex flex-column flex-center rounded-3 bg-light\r\n py-10 px-10 h-100\">\r\n <!--begin::Heading-->\r\n <div class=\"mb-7 d-flex justify-content-between w-100\">\r\n <!--begin::Title-->\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary mb-5\r\n fw-boldest fs-2\">\r\n Arabic:\r\n {{TemplateInfo.templateNameAR}}\r\n </a>\r\n <a\r\n [routerLink]=\"['/Admin/Documents/EditTemplate',TemplateId,'ar']\"\r\n routerLinkActive=\"router-link-active\" class=\"btn btn-sm\r\n btn-light-primary btn-icon\">\r\n <i class=\"fa fa-pen\"></i>\r\n </a>\r\n </div>\r\n <div class=\"w-100 mb-10\">\r\n <!--begin::Item-->\r\n <div class=\"d-flex align-items-center mb-5\">\r\n <div class=\"fw-bold fs-6 text-gray-800 flex-grow-1 pe-3 ar\">\r\n <div innerHTML=\"{{TemplateInfo.headerAR}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.bodyAR}}\">\r\n </div>\r\n <div innerHTML=\"{{TemplateInfo.footerAR}}\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!--end::Select-->\r\n </div>\r\n <!--end::Option-->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<!-- edit Modal -->\r\n<ng-template #EditTemplateModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn\r\n btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Edit\")}}\r\n {{utilityService.getResourceValue(\"Template\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"EditTemplateFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\"\r\n [group]=\"EditTemplateForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"EditDescription\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditSysName\" [group]=\"EditTemplateForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditOrganization\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditCategory\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditMasterLayout\"\r\n [group]=\"EditTemplateForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditTemplateModal id=\"CloseEditTemplateModal\"\r\n type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<!-- Export Document Modal -->\r\n<ng-template #ExportDocumentModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Export\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"TestExportDocumentFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-repeater-table [options]=\"addKeyValueRepeaterOptions\" [group]=\"TestExportDocumentForm\">\r\n </BBSF-repeater-table>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseSendEmailForm id=\"CloseSendEmailForm\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Export\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- GenerateCode Modal -->\r\n<ng-template #GenerateCodeModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn\r\n btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"GenerateCode\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"GenerateCodeForm\">\r\n\r\n <div class=\"Row\">\r\n <BBSF-TextArea [options]=\"GenerateCodeTextArea\"\r\n [group]=\"GenerateCodeForm\" #GenerateCodeInput>\r\n </BBSF-TextArea>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseGenerateCodeModal id=\"CloseGenerateCodeModal\"\r\n type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"copyInputMessage()\">\r\n {{utilityService.getResourceValue(\"CopyToClipboard\")}}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n", components: [{ type: i8.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i9.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { type: i9.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.MultiLingualTextAreaComponent, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i9.RepeaterTableComponent, selector: "BBSF-repeater-table", inputs: ["group", "options"] }, { type: i9.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
297
355
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: DocumentTemplateInfoComponent, decorators: [{
298
356
  type: Component,
299
357
  args: [{
300
358
  selector: 'lib-document-template-info',
301
- templateUrl: './document-template-info.component.html'
359
+ templateUrl: './document-template-info.component.html',
302
360
  }]
303
361
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i2.ClipboardService }, { type: i3.DocumentTemplateService }, { type: i4.ActivatedRoute }, { type: i5.PageInfoService }, { type: i6.NgbModal }, { type: i7.DatePipe }, { type: i1.RequestHandlerService }]; } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdGVtcGxhdGUtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2RvY3VtZW50cy9kb2N1bWVudC10ZW1wbGF0ZS1pbmZvL2RvY3VtZW50LXRlbXBsYXRlLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9kb2N1bWVudHMvZG9jdW1lbnQtdGVtcGxhdGUtaW5mby9kb2N1bWVudC10ZW1wbGF0ZS1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLGFBQWEsRUFBVyxRQUFRLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQWdCLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpULE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFLckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFFOUYsT0FBTyxLQUFLLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFNakgsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjtJQXFDakUsWUFBb0IsUUFBa0IsRUFBUyxjQUE4QixFQUFRLG9C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QUFnQyxDQUFDO1FBQ25DLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsR0FBRyw2QkFBNkIsQ0FBQztRQUNqRixJQUFJLENBQUMsMEJBQTBCLENBQUMseUJBQXlCO1lBQ3ZELHlGQUF5RixDQUFDO1FBQzVGLElBQUksQ0FBQywwQkFBMEIsQ0FBQyw0QkFBNEI7WUFDMUQsNkRBQTZELENBQUM7UUFDaEUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDMUQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQjtZQUNuRCwyQkFBMkIsQ0FBQztRQUM5QixJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxHQUFHLDZCQUE4QixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUNoSCxLQUFLLENBQ04sRUFBRSxDQUFDO1FBQ0osSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLEdBQUc7WUFDbEQsV0FBVztZQUNYLGFBQWE7U0FDZCxDQUFDO1FBR0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUVwRCxDQUFDO0lBc0NELFlBQVk7SUFDWixXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7OzJIQXpVVSw2QkFBNkI7K0dBQTdCLDZCQUE2Qix5RkN2QjFDLGdyV0FrUkE7NEZEM1BhLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUseUNBQXlDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQsIENoZWNrQm94T3B0aW9ucywgQ29udHJvbExheW91dCwgQ291bnRyeSwgRGF0YVR5cGUsIERyb3Bkb3duT3B0aW9ucywgRW5nbGlzaEFyYWJpY0RUTywgRm9ybU9wdGlvbnMsIElucHV0VHlwZSwgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGhvbmVPcHRpb25zLCBSZXBlYXRlckZpZWxkLCBSZXBlYXRlck9wdGlvbnMsIFRleHRBcmVhT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFRlbXBsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9UZW1wbGF0ZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ25neC1jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBFbWFpbFRlbXBsYXRlVGVzdGVyTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RlbHMvRW1haWxUZW1wbGF0ZVRlc3Rlck1vZGVsJztcclxuaW1wb3J0IHsgU01TVGVtcGxhdGVUZXN0ZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGVscy9TTVNUZW1wbGF0ZVRlc3Rlck1vZGVsJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEVE8gfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RlbHMvVGVtcGxhdGVEVE8nO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEb2N1bWVudFRlbXBsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Eb2N1bWVudFRlbXBsYXRlU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRUZW1wbGF0ZURUTyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvRG9jdW1lbnRzTW9kZWxzL0RvY3VtZW50VGVtcGxhdGVEVE8nO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCAqIGFzIHNhdmVBcyBmcm9tIFwiZmlsZS1zYXZlclwiO1xyXG5pbXBvcnQgeyBEb2N1bWVudEV4cG9ydERUTywgRG9jdW1lbnRFeHBvcnRJdGVtRFRPIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Eb2N1bWVudHNNb2RlbHMvRG9jdW1lbnRFeHBvcnREVE8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZG9jdW1lbnQtdGVtcGxhdGUtaW5mbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50LXRlbXBsYXRlLWluZm8uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudFRlbXBsYXRlSW5mb0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbjtcclxuICBUZW1wbGF0ZUlkOiBzdHJpbmc7XHJcbiAgVGVtcGxhdGVJZEVuYzogc3RyaW5nID0gXCJcIlxyXG4gIFRlbXBsYXRlSW5mbzogYW55XHJcbiAgVGVtcGxhdGU6IGFueVxyXG4gIGlzRGF0YUxvYWRlZDpib29sZWFuPWZhbHNlO1xyXG4gIHNhdmVBcz1zYXZlQXNcclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgQ2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgT3JnYW5pemF0aW9uTGlzdCA9IFtdO1xyXG4gIE1hc3RlckxheW91dExpc3QgPSBbXTtcclxuXHJcbiAgLy9HZW5lcmF0ZUNvZGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgR2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIElzT3BlbkdlbmVyYXRlQ29kZU1vZGFsOiBib29sZWFuO1xyXG4gIEdlbmVyYXRlQ29kZVRleHRBcmVhOiBUZXh0QXJlYU9wdGlvbnM7XHJcbiAgVmFsdWVUb0NvcHk6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vRWRpdCBNb2RlbCBDb250cm9sc1xyXG4gICBFZGl0VGVtcGxhdGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgIEVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zOiBGb3JtT3B0aW9ucztcclxuICAgRWRpdE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gICBFZGl0U3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgIEVkaXREZXNjcmlwdGlvbjogTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zO1xyXG4gICBFZGl0T3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgIEVkaXRDYXRlZ29yeTogRHJvcGRvd25PcHRpb25zO1xyXG4gICBFZGl0TWFzdGVyTGF5b3V0OiBEcm9wZG93bk9wdGlvbnM7XHJcblxyXG5cclxuICAgLy9UZXN0IEV4cG9ydCBNb2RlbCBDb250cm9sc1xyXG4gIFRlc3RFeHBvcnREb2N1bWVudEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBUZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBhZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9uczogUmVwZWF0ZXJPcHRpb25zO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UscHVibGljIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgICBwdWJsaWMgX2NsaXBib2FyZFNlcnZpY2U6IENsaXBib2FyZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdGVtcGxhdGVTZXJ2aWNlOiBEb2N1bWVudFRlbXBsYXRlU2VydmljZSwgcHVibGljIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHB1YmxpYyBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSwgcHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWwscHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcclxuICAgIHB1YmxpYyByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuVGVtcGxhdGVJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvL0luaXRpYWxpemUgcGFnZSBpbmZvXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICB0aGlzLmlzRGF0YUxvYWRlZD1mYWxzZTtcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmdldFRlbXBsYXRlSW5mbyh0aGlzLlRlbXBsYXRlSWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBSZXN1bHQ6IGFueSA9IHJlc3VsdFxyXG4gICAgICB0aGlzLlRlbXBsYXRlSW5mbyA9IFJlc3VsdC52YWw7XHJcbiAgICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLlRlbXBsYXRlSW5mby5sb2NhbGl6ZWRUZW1wbGF0ZU5hbWVcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlbXBsYXRlc1wiKSwgcGF0aDogJy9BZG1pbi9Eb2N1bWVudHMvVGVtcGxhdGVzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG5cclxuICAgICAgXTtcclxuICAgICAgdGhpcy5pc0RhdGFMb2FkZWQ9dHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9HZW5lcmF0ZSBDb2RlXHJcbiAgc2hvd0dlbmVyYXRlQ29kZUJ5SWRNb2RhbChHZW5lcmF0ZUNvZGVNb2RhbCkge1xyXG4gICAgdGhpcy50ZW1wbGF0ZVNlcnZpY2UuZ2VuZXJhdGVDb2RlQnlJZCh0aGlzLlRlbXBsYXRlSWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHZhciBWYWx1ZSA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYSA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5OYW1lID0gXCJHZW5lcmF0ZUNvZGVUZXh0QXJlYVwiO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLlZhbHVlID0gVmFsdWUudmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgIHRoaXMuVmFsdWVUb0NvcHkgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5Jc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLlJvd3MgPSAyMDtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5Db2xzID0gMjA7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuTWF4TGVuZ3RoID0gMTAwMDAwMDtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUNvZGVNb2RhbCk7XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNob3dHZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkTW9kYWwoR2VuZXJhdGVDb2RlTW9kYWwpIHtcclxuICAgIHRoaXMuR2VuZXJhdGVDb2RlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5nZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkKHRoaXMuVGVtcGxhdGVJZCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLk5hbWUgPSBcIkdlbmVyYXRlQ29kZVRleHRBcmVhXCI7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuVmFsdWUgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5WYWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLklzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuUm93cyA9IDIwO1xyXG4gICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkNvbHMgPSAyMDtcclxuICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5NYXhMZW5ndGggPSAxMDAwMDAwO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEdlbmVyYXRlQ29kZU1vZGFsKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKCkge1xyXG4gICAgdGhpcy5fY2xpcGJvYXJkU2VydmljZS5jb3B5KHRoaXMuVmFsdWVUb0NvcHkudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG4gIC8vRWRpdCBUZW1wbGF0ZVxyXG4gIC8vRWRpdCBUZW1wbGF0ZVxyXG4gIHNob3dFZGl0VGVtcGxhdGVNb2RhbCggRWRpdFRlbXBsYXRlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRFZGl0VGVtcGxhdGVEYXRhKHRoaXMuVGVtcGxhdGVJZCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLk9yZ2FuaXphdGlvbkxpc3QgPSBsaXN0cy5vcmdhbml6YXRpb247XHJcbiAgICAgIHRoaXMuTWFzdGVyTGF5b3V0TGlzdCA9IGxpc3RzLmRvY3VtZW50SGVhZGVyQW5kRm9vdGVyVGVtcGxhdGU7XHJcbiAgICAgIHRoaXMuQ2F0ZWdvcnlMaXN0ID0gbGlzdHMubG9va1VwSXRlbXNDYXRlZ29yeTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFRlbXBsYXRlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFRlbXBsYXRlRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5FZGl0VGVtcGxhdGVGb3JtO1xyXG4gICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRUZW1wbGF0ZU1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0VGVtcGxhdGVGdW5jdGlvbjtcclxuICAgICAgbGV0IE5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBOYW1lLkFyYWJpYyA9IHRlbXBsYXRlLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLkVuZ2xpc2ggPSB0ZW1wbGF0ZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTmFtZSA9ICdOYW1lJztcclxuICAgICAgdGhpcy5FZGl0TmFtZS5BcmFiaWNMYWJlbEtleSA9ICdOYW1lSW5BcmFiaWMnO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLkVuZ2xpc2hMYWJlbEtleSA9ICdOYW1lSW5FbmdsaXNoJztcclxuICAgICAgdGhpcy5FZGl0TmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5WYWx1ZSA9IE5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5FZGl0U3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRTeXNOYW1lLk5hbWUgPSAnU3lzTmFtZSc7XHJcbiAgICAgIHRoaXMuRWRpdFN5c05hbWUuTGFiZWxLZXkgPSAnU3lzTmFtZSc7XHJcbiAgICAgIHRoaXMuRWRpdFN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTeXNOYW1lLlZhbHVlID0gdGVtcGxhdGUuc3lzTmFtZTtcclxuICAgICAgdGhpcy5FZGl0U3lzTmFtZS5NYXhMZW5ndGggPSAxMDA7XHJcblxyXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBkZXNjcmlwdGlvbi5BcmFiaWMgPSB0ZW1wbGF0ZS5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICAgIGRlc2NyaXB0aW9uLkVuZ2xpc2ggPSB0ZW1wbGF0ZS5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24gPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk5hbWUgPSAnRGVzY3JpcHRpb24nO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9ICdEZXNjcmlwdGlvbkluQXJhYmljJztcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uRW5nbGlzaExhYmVsS2V5ID0gJ0Rlc2NyaXB0aW9uSW5FbmdsaXNoJztcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uVmFsdWUgPSBkZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uTWF4TGVuZ3RoID0gMjUwO1xyXG5cclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uTmFtZSA9ICdPcmdhbml6YXRpb25JRF9HVUlEJztcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLkxhYmVsS2V5ID0gJ09yZ2FuaXphdGlvbic7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5EYXRhU291cmNlID0gdGhpcy5Pcmdhbml6YXRpb25MaXN0O1xyXG4gICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLlBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLlNlbGVjdGVkSXRlbXMgPVxyXG4gICAgICAgIHRlbXBsYXRlLm9yZ2FuaXphdGlvbklEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5OYW1lID0gJ0RvY3VtZW50SGVhZGVyQW5kRm9vdGVyVGVtcGxhdGVJRF9HVUlEJztcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LkxhYmVsS2V5ID0gJ01hc3RlckxheW91dCc7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5EYXRhU291cmNlID0gdGhpcy5NYXN0ZXJMYXlvdXRMaXN0O1xyXG4gICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LlBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LlNlbGVjdGVkSXRlbXMgPVxyXG4gICAgICAgIHRlbXBsYXRlLmRvY3VtZW50SGVhZGVyQW5kRm9vdGVyVGVtcGxhdGVJRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5Lk5hbWUgPSAnQ2F0ZWdvcnlJdGVtSURfR1VJRCc7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LkxhYmVsS2V5ID0gJ0NhdGVnb3J5JztcclxuICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuRGF0YVNvdXJjZSA9IHRoaXMuQ2F0ZWdvcnlMaXN0O1xyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LlBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICAgIHRoaXMuRWRpdENhdGVnb3J5LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRDYXRlZ29yeS5TZWxlY3RlZEl0ZW1zID10ZW1wbGF0ZS5jYXRlZ29yeUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFRlbXBsYXRlTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0RWRpdFRlbXBsYXRlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFRlbXBsYXRlRm9ybS52YWx1ZTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgRG9jdW1lbnRUZW1wbGF0ZURUTygpO1xyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLlRlbXBsYXRlSWQ7XHJcbiAgICBFZGl0TW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5OYW1lLkFyYWJpYztcclxuICAgIEVkaXRNb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5OYW1lLkVuZ2xpc2g7XHJcbiAgICBFZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWU7XHJcbiAgICBFZGl0TW9kZWwuRG9jdW1lbnRIZWFkZXJBbmRGb290ZXJUZW1wbGF0ZUlEX0dVSUQgPSBSZXN1bHRNb2RlbC5Eb2N1bWVudEhlYWRlckFuZEZvb3RlclRlbXBsYXRlSURfR1VJRDtcclxuICAgIEVkaXRNb2RlbC5EZXNjcmlwdGlvbi5FbmdsaXNoID0gUmVzdWx0TW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaDtcclxuICAgIEVkaXRNb2RlbC5EZXNjcmlwdGlvbi5BcmFiaWMgPSBSZXN1bHRNb2RlbC5EZXNjcmlwdGlvbi5BcmFiaWM7XHJcbiAgICBFZGl0TW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRCA9IFJlc3VsdE1vZGVsLk9yZ2FuaXphdGlvbklEX0dVSUQ7XHJcbiAgICBFZGl0TW9kZWwuQ2F0ZWdvcnlJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkNhdGVnb3J5SXRlbUlEX0dVSUQ7XHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG5cclxuICBnZXRFZGl0VGVtcGxhdGVGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmVkaXREb2N1bWVudFRlbXBsYXRlKEVkaXRNb2RlbCk7XHJcbiAgfTtcclxuXHJcblxyXG4gICAvL1Rlc3QgU2VuZCBFbWFpbFxyXG4gICBzaG93VGVzdEV4cG9ydERvY3VtZW50TW9kYWwoVGVzdEV4cG9ydERvY3VtZW50TW9kYWwpIHtcclxuXHJcbiAgICAgIHRoaXMuVGVzdEV4cG9ydERvY3VtZW50Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICAgIHRoaXMuVGVzdEV4cG9ydERvY3VtZW50Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLlRlc3RFeHBvcnREb2N1bWVudEZvcm1cclxuICAgICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0RXhwb3J0RG9jdW1lbnRNb2RlbDtcclxuICAgICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFRlc3RFeHBvcnREb2N1bWVudEZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLlRlc3RFeHBvcnREb2N1bWVudEZvcm1PcHRpb25zLk9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLm9uU3VjY2Vzc0V4cG9ydEhhbmRsZXI7XHJcbiAgICAgIHRoaXMuVGVzdEV4cG9ydERvY3VtZW50Rm9ybU9wdGlvbnMuRGlzYWJsZVN1Y2Nlc3NOb3RpZmljYXRpb24gPXRydWU7XHJcblxyXG4gICAgICBsZXQgS2V5ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIEtleS5OYW1lID0gXCJLZXlcIjtcclxuICAgICAgS2V5LkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIEtleS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgIEtleS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgICBsZXQgVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgVmFsdWUuTmFtZSA9IFwiVmFsdWVcIjtcclxuICAgICAgVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgVmFsdWUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICBWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG5cclxuXHJcbiAgICAgIGxldCBLZXlSZXBlYXRlciA9IG5ldyBSZXBlYXRlckZpZWxkKCk7XHJcbiAgICAgIEtleVJlcGVhdGVyLkNvbnRyb2xUeXBlID0gRGF0YVR5cGUuVGV4dDtcclxuICAgICAgS2V5UmVwZWF0ZXIuQ29udHJvbE9wdGlvbnMgPSBLZXk7XHJcbiAgICAgIEtleVJlcGVhdGVyLkhlYWRlclRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiS2V5XCIpO1xyXG5cclxuICAgICAgbGV0IFZhbHVlUmVwZWF0ZXIgPSBuZXcgUmVwZWF0ZXJGaWVsZCgpO1xyXG4gICAgICBWYWx1ZVJlcGVhdGVyLkNvbnRyb2xUeXBlID0gRGF0YVR5cGUuVGV4dDtcclxuICAgICAgVmFsdWVSZXBlYXRlci5Db250cm9sT3B0aW9ucyA9IFZhbHVlO1xyXG4gICAgICBWYWx1ZVJlcGVhdGVyLkhlYWRlclRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFsdWVcIik7XHJcblxyXG5cclxuICAgICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucyA9IG5ldyBSZXBlYXRlck9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuTmFtZSA9IFwidmFsdWVzXCI7XHJcbiAgICAgIHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuRGVsZXRlQnV0dG9uRXh0cmFDbGFzc2VzID1cclxuICAgICAgICBcImJ0biBidG4tZGFuZ2VyIGJ0bi1zbSBidG4taWNvblwiO1xyXG4gICAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLkRlbGV0ZUJ1dHRvblRleHQgPSBgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5gO1xyXG4gICAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLlJlcGVhdGVyVGFibGVFeHRyYUNsYXNzZXMgPVxyXG4gICAgICAgIFwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS05IGRhdGFUYWJsZSBuby1mb290ZXIgdmFsaWRhdGlvbi10YWJsZS10ZXh0XCI7XHJcbiAgICAgIHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuUmVwZWF0ZXJUYWJsZVJvd0V4dHJhQ2xhc3NlcyA9XHJcbiAgICAgICAgXCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiO1xyXG4gICAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLkFjdGlvbkxhYmVsS2V5ID0gXCJBY3Rpb25cIjtcclxuICAgICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5BZGRCdXR0b25FeHRyYUNsYXNzZXMgPVxyXG4gICAgICAgIFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiO1xyXG4gICAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLkFkZEJ1dHRvblRleHQgPSBgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiR7IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcclxuICAgICAgICBcIkFkZFwiXHJcbiAgICAgICl9YDtcclxuICAgICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zID0gMTtcclxuICAgICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5SZXBlYXRlclZhbHVlID0gW107XHJcbiAgICAgIHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuUmVwZWF0ZXJTdHJ1Y3R1cmUgPSBbXHJcbiAgICAgICAgS2V5UmVwZWF0ZXIsXHJcbiAgICAgICAgVmFsdWVSZXBlYXRlcixcclxuICAgICAgXTtcclxuXHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRlc3RFeHBvcnREb2N1bWVudE1vZGFsKTtcclxuXHJcbiAgfVxyXG4gIGdldFRlc3RFeHBvcnREb2N1bWVudE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLlRlc3RFeHBvcnREb2N1bWVudEZvcm0udmFsdWU7XHJcbiAgICBsZXQgRXhwb3J0RG9jdW1lbnRUZW1wbGF0ZU1vZGVsID0gbmV3IERvY3VtZW50RXhwb3J0RFRPKCk7XHJcbiAgICBFeHBvcnREb2N1bWVudFRlbXBsYXRlTW9kZWwuSURfR1VJRCA9IHRoaXMuVGVtcGxhdGVJZDtcclxuICAgIGxldCByZXN1bHQ6IERvY3VtZW50RXhwb3J0SXRlbURUT1tdID0gW107XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICBpbmRleCA8IHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuUmVwZWF0ZXJWYWx1ZS5sZW5ndGg7XHJcbiAgICAgIGluZGV4KytcclxuICAgICkge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5SZXBlYXRlclZhbHVlW2luZGV4XTtcclxuICAgICAgaWYoZWxlbWVudC5LZXkmJmVsZW1lbnQuVmFsdWUpXHJcbiAgICAgIHtcclxuICAgICAgICBsZXQgaXRlbTogRG9jdW1lbnRFeHBvcnRJdGVtRFRPID0gbmV3IERvY3VtZW50RXhwb3J0SXRlbURUTygpO1xyXG4gICAgICAgIGl0ZW0uS2V5ID0gZWxlbWVudC5LZXk7XHJcbiAgICAgICAgaXRlbS5WYWx1ZSA9IGVsZW1lbnQuVmFsdWU7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBFeHBvcnREb2N1bWVudFRlbXBsYXRlTW9kZWwuSXRlbXMgPSByZXN1bHRcclxuICAgIHBhcmFtQXJyYXkucHVzaChFeHBvcnREb2N1bWVudFRlbXBsYXRlTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0RXhwb3J0RG9jdW1lbnRGdW5jdGlvbiA9IChFeHBvcnREb2N1bWVudFRlbXBsYXRlTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmV4cG9ydFBERihFeHBvcnREb2N1bWVudFRlbXBsYXRlTW9kZWwpXHJcbiAgfVxyXG5cclxuICBvblN1Y2Nlc3NFeHBvcnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICBsZXQgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgbGV0IGxhdGVzdF9kYXRlID10aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShub3csICdkZC1NTS15eXl5IEhILm1tJyk7XHJcbiAgICBsZXQgZmlsZU5hbWU9dGhpcy5UZW1wbGF0ZUluZm8ubG9jYWxpemVkVGVtcGxhdGVOYW1lICsgXCJfXCIgKyBsYXRlc3RfZGF0ZSArIFwiLnBkZlwiO1xyXG4gICAgdGhpcy5kb3dubG9hZFBERihyZXN1bHQgYXMgYW55LGZpbGVOYW1lKVxyXG4gIH07XHJcblxyXG4gIC8vT24gZGVzdHJveVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgKm5nSWY9XCJpc0RhdGFMb2FkZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWN1c3RvbS1oXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtM1xyXG4gICAgICAgICAgYnRuLWxpZ2h0LXByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0VGVtcGxhdGVNb2RhbChFZGl0VGVtcGxhdGVNb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEgZmEtZWRpdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtM1xyXG4gICAgICAgICAgYnRuLWxpZ2h0LXByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dUZXN0RXhwb3J0RG9jdW1lbnRNb2RhbChFeHBvcnREb2N1bWVudE1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYSBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuU2V0UGFzc1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBtZS0zXHJcbiAgICAgICAgICBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93R2VuZXJhdGVDb2RlQnlJZE1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzXCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlQ29kZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTNcclxuICAgICAgICAgIGJ0bi1wcmltYXJ5XCIgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dHZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkTW9kYWwoR2VuZXJhdGVDb2RlTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleVwiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZVVwZGF0ZUNvZGVcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14bC02IG1iLTEwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlciBcIj5cclxuICAgICAgICAgICAgPCEtLWJlZ2luOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLTMgYmctbGlnaHRcclxuICAgICAgICAgICAgICBweS0xMCBweC0xMCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgIDwhLS1iZWdpbjo6SGVhZGluZy0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpUaXRsZS0tPlxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vRG9jdW1lbnRzL0VkaXRUZW1wbGF0ZScsVGVtcGxhdGVJZCwnZW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtcHJpbWFyeSBtYi01XHJcbiAgICAgICAgICAgICAgICAgIGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBFbmdsaXNoOlxyXG4gICAgICAgICAgICAgICAgICB7e1RlbXBsYXRlSW5mby50ZW1wbGF0ZU5hbWVFTn19XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vRG9jdW1lbnRzL0VkaXRUZW1wbGF0ZScsVGVtcGxhdGVJZCwnZW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cImJ0biBidG4tc21cclxuICAgICAgICAgICAgICAgICAgYnRuLWxpZ2h0LXByaW1hcnkgYnRuLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJdGVtLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1ncmF5LTgwMCBmbGV4LWdyb3ctMSBwZS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5oZWFkZXJFTn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5ib2R5RU59fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZm9vdGVyRU59fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLWVuZDo6U2VsZWN0LS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tZW5kOjpPcHRpb24tLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtNiBtYi0xMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPCEtLWJlZ2luOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLTMgYmctbGlnaHRcclxuICAgICAgICAgICAgICBweS0xMCBweC0xMCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgIDwhLS1iZWdpbjo6SGVhZGluZy0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpUaXRsZS0tPlxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vRG9jdW1lbnRzL0VkaXRUZW1wbGF0ZScsVGVtcGxhdGVJZCwnYXInXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtcHJpbWFyeSBtYi01XHJcbiAgICAgICAgICAgICAgICAgIGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBBcmFiaWM6XHJcbiAgICAgICAgICAgICAgICAgIHt7VGVtcGxhdGVJbmZvLnRlbXBsYXRlTmFtZUFSfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL0RvY3VtZW50cy9FZGl0VGVtcGxhdGUnLFRlbXBsYXRlSWQsJ2FyJ11cIlxyXG4gICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCIgY2xhc3M9XCJidG4gYnRuLXNtXHJcbiAgICAgICAgICAgICAgICAgIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJdGVtLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1ncmF5LTgwMCBmbGV4LWdyb3ctMSBwZS0zIGFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5oZWFkZXJBUn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5ib2R5QVJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZm9vdGVyQVJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OlNlbGVjdC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLWVuZDo6T3B0aW9uLS0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcbjwhLS0gZWRpdCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNFZGl0VGVtcGxhdGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuXHJcbiAgICAgIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVtcGxhdGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCJcclxuICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJFZGl0RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0U3lzTmFtZVwiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdE9yZ2FuaXphdGlvblwiXHJcbiAgICAgICAgICAgIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0Q2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdE1hc3RlckxheW91dFwiXHJcbiAgICAgICAgICAgIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFRlbXBsYXRlTW9kYWwgaWQ9XCJDbG9zZUVkaXRUZW1wbGF0ZU1vZGFsXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbjwhLS0gRXhwb3J0IERvY3VtZW50IE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0V4cG9ydERvY3VtZW50TW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJUZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtcmVwZWF0ZXItdGFibGUgW29wdGlvbnNdPVwiYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnNcIiAgW2dyb3VwXT1cIlRlc3RFeHBvcnREb2N1bWVudEZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtcmVwZWF0ZXItdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZVNlbmRFbWFpbEZvcm0gaWQ9XCJDbG9zZVNlbmRFbWFpbEZvcm1cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS0gR2VuZXJhdGVDb2RlIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0dlbmVyYXRlQ29kZU1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG5cclxuICAgICAgYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiR2VuZXJhdGVDb2RlRm9ybVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIlJvd1wiPlxyXG4gICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkdlbmVyYXRlQ29kZVRleHRBcmVhXCJcclxuICAgICAgICAgIFtncm91cF09XCJHZW5lcmF0ZUNvZGVGb3JtXCIgI0dlbmVyYXRlQ29kZUlucHV0PlxyXG4gICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VHZW5lcmF0ZUNvZGVNb2RhbCBpZD1cIkNsb3NlR2VuZXJhdGVDb2RlTW9kYWxcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvcHlUb0NsaXBib2FyZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdGVtcGxhdGUtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2RvY3VtZW50cy9kb2N1bWVudC10ZW1wbGF0ZS1pbmZvL2RvY3VtZW50LXRlbXBsYXRlLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9kb2N1bWVudHMvZG9jdW1lbnQtdGVtcGxhdGUtaW5mby9kb2N1bWVudC10ZW1wbGF0ZS1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLGFBQWEsRUFFYixRQUFRLEVBQ1IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsU0FBUyxFQUNULDJCQUEyQixFQUMzQiwwQkFBMEIsRUFFMUIsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsY0FBYyxHQUNmLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQVVyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUU5RixPQUFPLEtBQUssTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBQyxpQkFBaUIsSUFBSSxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU0xRSxNQUFNLE9B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QUMsMEJBQTBCLENBQUMsYUFBYSxHQUFHLDZCQUE2QixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUMvRyxLQUFLLENBQ04sRUFBRSxDQUFDO1FBQ0osSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLEdBQUc7WUFDbEQsV0FBVztZQUNYLGFBQWE7U0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBdUVELFlBQVk7SUFDWixXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7OzJIQWpZVSw2QkFBNkI7K0dBQTdCLDZCQUE2Qix5RkNqRDFDLG9oWEF3UkE7NEZEdk9hLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUseUNBQXlDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgQXBwQmFzZUNvbXBvbmVudCxcclxuICBDaGVja0JveE9wdGlvbnMsXHJcbiAgQ29udHJvbExheW91dCxcclxuICBDb3VudHJ5LFxyXG4gIERhdGFUeXBlLFxyXG4gIERyb3Bkb3duT3B0aW9ucyxcclxuICBFbmdsaXNoQXJhYmljRFRPLFxyXG4gIEZvcm1PcHRpb25zLFxyXG4gIElucHV0VHlwZSxcclxuICBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMsXHJcbiAgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMsXHJcbiAgUGhvbmVPcHRpb25zLFxyXG4gIFJlcGVhdGVyRmllbGQsXHJcbiAgUmVwZWF0ZXJPcHRpb25zLFxyXG4gIFRleHRBcmVhT3B0aW9ucyxcclxuICBUZXh0Qm94T3B0aW9ucyxcclxufSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFRlbXBsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9UZW1wbGF0ZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ25neC1jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBFbWFpbFRlbXBsYXRlVGVzdGVyTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RlbHMvRW1haWxUZW1wbGF0ZVRlc3Rlck1vZGVsJztcclxuaW1wb3J0IHsgU01TVGVtcGxhdGVUZXN0ZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvTm90aWZpY2F0aW9uc01vZGVscy9TTVNUZW1wbGF0ZVRlc3Rlck1vZGVsJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEVE8gfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL05vdGlmaWNhdGlvbnNNb2RlbHMvVGVtcGxhdGVEVE8nO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1xyXG4gIFV0aWxpdHlTZXJ2aWNlLFxyXG4gIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gIEVudmlyb25tZW50U2VydmljZSxcclxuICBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEb2N1bWVudFRlbXBsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Eb2N1bWVudFRlbXBsYXRlU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRUZW1wbGF0ZURUTyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvRG9jdW1lbnRzTW9kZWxzL0RvY3VtZW50VGVtcGxhdGVEVE8nO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCAqIGFzIHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHtcclxuICBEb2N1bWVudEV4cG9ydERUTyxcclxuICBEb2N1bWVudEV4cG9ydEl0ZW1EVE8sXHJcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Eb2N1bWVudHNNb2RlbHMvRG9jdW1lbnRFeHBvcnREVE8nO1xyXG5pbXBvcnQge2dlbmVyYXRlQ29udGFpbmVyIGFzIEdlbmVyYXRlRE9DWH0gZnJvbSAnLi4vLi4vc2hhcmVkL3dvcmQvaW5kZXgnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZG9jdW1lbnQtdGVtcGxhdGUtaW5mbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50LXRlbXBsYXRlLWluZm8uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRUZW1wbGF0ZUluZm9Db21wb25lbnRcclxuICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG4gIFRlbXBsYXRlSWQ6IHN0cmluZztcclxuICBUZW1wbGF0ZUlkRW5jOiBzdHJpbmcgPSAnJztcclxuICBUZW1wbGF0ZUluZm86IGFueTtcclxuICBUZW1wbGF0ZTogYW55O1xyXG4gIGlzRGF0YUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNhdmVBcyA9IHNhdmVBcztcclxuICBleHBvcnRUeXBlOiBudW1iZXIgPSAxO1xyXG4gIC8vUmVxdWlyZWQgbGlzdHNcclxuICBDYXRlZ29yeUxpc3QgPSBbXTtcclxuICBPcmdhbml6YXRpb25MaXN0ID0gW107XHJcbiAgTWFzdGVyTGF5b3V0TGlzdCA9IFtdO1xyXG5cclxuICAvL0dlbmVyYXRlQ29kZSAgTW9kZWwgQ29udHJvbHNcclxuICBHZW5lcmF0ZUNvZGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgSXNPcGVuR2VuZXJhdGVDb2RlTW9kYWw6IGJvb2xlYW47XHJcbiAgR2VuZXJhdGVDb2RlVGV4dEFyZWE6IFRleHRBcmVhT3B0aW9ucztcclxuICBWYWx1ZVRvQ29weTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8vRWRpdCBNb2RlbCBDb250cm9sc1xyXG4gIEVkaXRUZW1wbGF0ZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0VGVtcGxhdGVGb3JtT3B0aW9uczogRm9ybU9wdGlvbnM7XHJcbiAgRWRpdE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRTeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0RGVzY3JpcHRpb246IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucztcclxuICBFZGl0T3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdENhdGVnb3J5OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdE1hc3RlckxheW91dDogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICAvL1Rlc3QgRXhwb3J0IE1vZGVsIENvbnRyb2xzXHJcbiAgVGVzdEV4cG9ydERvY3VtZW50Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFRlc3RFeHBvcnREb2N1bWVudEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnM6IFJlcGVhdGVyT3B0aW9ucztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIF9jbGlwYm9hcmRTZXJ2aWNlOiBDbGlwYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHVibGljIHRlbXBsYXRlU2VydmljZTogRG9jdW1lbnRUZW1wbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHVibGljIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICB0aGlzLlRlbXBsYXRlSWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLy9Jbml0aWFsaXplIHBhZ2UgaW5mb1xyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgdGhpcy5pc0RhdGFMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlXHJcbiAgICAgIC5nZXRUZW1wbGF0ZUluZm8odGhpcy5UZW1wbGF0ZUlkKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgUmVzdWx0OiBhbnkgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5UZW1wbGF0ZUluZm8gPSBSZXN1bHQudmFsO1xyXG4gICAgICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLlRlbXBsYXRlSW5mby5sb2NhbGl6ZWRUZW1wbGF0ZU5hbWU7XHJcbiAgICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnSG9tZScpLFxyXG4gICAgICAgICAgICBwYXRoOiAnL0FkbWluL0hvbWUnLFxyXG4gICAgICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnVGVtcGxhdGVzJyksXHJcbiAgICAgICAgICAgIHBhdGg6ICcvQWRtaW4vRG9jdW1lbnRzL1RlbXBsYXRlcycsXHJcbiAgICAgICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9HZW5lcmF0ZSBDb2RlXHJcbiAgc2hvd0dlbmVyYXRlQ29kZUJ5SWRNb2RhbChHZW5lcmF0ZUNvZGVNb2RhbCkge1xyXG4gICAgdGhpcy50ZW1wbGF0ZVNlcnZpY2VcclxuICAgICAgLmdlbmVyYXRlQ29kZUJ5SWQodGhpcy5UZW1wbGF0ZUlkKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB2YXIgVmFsdWUgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5OYW1lID0gJ0dlbmVyYXRlQ29kZVRleHRBcmVhJztcclxuICAgICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLlZhbHVlID0gVmFsdWUudmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy5WYWx1ZVRvQ29weSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuSXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuUm93cyA9IDIwO1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuQ29scyA9IDIwO1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuTWF4TGVuZ3RoID0gMTAwMDAwMDtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEdlbmVyYXRlQ29kZU1vZGFsKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93R2VuZXJhdGVVcGRhdGVDb2RlQnlJZE1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKSB7XHJcbiAgICB0aGlzLkdlbmVyYXRlQ29kZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMudGVtcGxhdGVTZXJ2aWNlXHJcbiAgICAgIC5nZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkKHRoaXMuVGVtcGxhdGVJZClcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdmFyIFZhbHVlID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuTmFtZSA9ICdHZW5lcmF0ZUNvZGVUZXh0QXJlYSc7XHJcbiAgICAgICAgdGhpcy5HZW5lcmF0ZUNvZGVUZXh0QXJlYS5WYWx1ZSA9IFZhbHVlLnZhbC50b1N0cmluZygpO1xyXG4gICAgICAgIHRoaXMuVmFsdWVUb0NvcHkgPSBWYWx1ZS52YWwudG9TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLklzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuR2VuZXJhdGVDb2RlVGV4dEFyZWEuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLlJvd3MgPSAyMDtcclxuICAgICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLkNvbHMgPSAyMDtcclxuICAgICAgICB0aGlzLkdlbmVyYXRlQ29kZVRleHRBcmVhLk1heExlbmd0aCA9IDEwMDAwMDA7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUNvZGVNb2RhbCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29weUlucHV0TWVzc2FnZSgpIHtcclxuICAgIHRoaXMuX2NsaXBib2FyZFNlcnZpY2UuY29weSh0aGlzLlZhbHVlVG9Db3B5LnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuICAvL0VkaXQgVGVtcGxhdGVcclxuICAvL0VkaXQgVGVtcGxhdGVcclxuICBzaG93RWRpdFRlbXBsYXRlTW9kYWwoRWRpdFRlbXBsYXRlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRlbXBsYXRlU2VydmljZVxyXG4gICAgICAuZ2V0RWRpdFRlbXBsYXRlRGF0YSh0aGlzLlRlbXBsYXRlSWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgICAgdGhpcy5Pcmdhbml6YXRpb25MaXN0ID0gbGlzdHMub3JnYW5pemF0aW9uO1xyXG4gICAgICAgIHRoaXMuTWFzdGVyTGF5b3V0TGlzdCA9IGxpc3RzLmRvY3VtZW50SGVhZGVyQW5kRm9vdGVyVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5DYXRlZ29yeUxpc3QgPSBsaXN0cy5sb29rVXBJdGVtc0NhdGVnb3J5O1xyXG5cclxuICAgICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICB0aGlzLkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5FZGl0VGVtcGxhdGVGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkVkaXRUZW1wbGF0ZUZvcm07XHJcbiAgICAgICAgdGhpcy5FZGl0VGVtcGxhdGVGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID1cclxuICAgICAgICAgIHRoaXMuZ2V0RWRpdFRlbXBsYXRlTW9kZWw7XHJcbiAgICAgICAgdGhpcy5FZGl0VGVtcGxhdGVGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPVxyXG4gICAgICAgICAgdGhpcy5nZXRFZGl0VGVtcGxhdGVGdW5jdGlvbjtcclxuICAgICAgICBsZXQgTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgICAgTmFtZS5BcmFiaWMgPSB0ZW1wbGF0ZS5uYW1lLmFyYWJpYztcclxuICAgICAgICBOYW1lLkVuZ2xpc2ggPSB0ZW1wbGF0ZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICAgIHRoaXMuRWRpdE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLkVkaXROYW1lLk5hbWUgPSAnTmFtZSc7XHJcbiAgICAgICAgdGhpcy5FZGl0TmFtZS5BcmFiaWNMYWJlbEtleSA9ICdOYW1lSW5BcmFiaWMnO1xyXG4gICAgICAgIHRoaXMuRWRpdE5hbWUuRW5nbGlzaExhYmVsS2V5ID0gJ05hbWVJbkVuZ2xpc2gnO1xyXG4gICAgICAgIHRoaXMuRWRpdE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5FZGl0TmFtZS5WYWx1ZSA9IE5hbWU7XHJcbiAgICAgICAgdGhpcy5FZGl0TmFtZS5NYXhMZW5ndGggPSAxMDA7XHJcblxyXG4gICAgICAgIHRoaXMuRWRpdFN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLkVkaXRTeXNOYW1lLk5hbWUgPSAnU3lzTmFtZSc7XHJcbiAgICAgICAgdGhpcy5FZGl0U3lzTmFtZS5MYWJlbEtleSA9ICdTeXNOYW1lJztcclxuICAgICAgICB0aGlzLkVkaXRTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLkVkaXRTeXNOYW1lLlZhbHVlID0gdGVtcGxhdGUuc3lzTmFtZTtcclxuICAgICAgICB0aGlzLkVkaXRTeXNOYW1lLk1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgICBkZXNjcmlwdGlvbi5BcmFiaWMgPSB0ZW1wbGF0ZS5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICAgICAgZGVzY3JpcHRpb24uRW5nbGlzaCA9IHRlbXBsYXRlLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcblxyXG4gICAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk5hbWUgPSAnRGVzY3JpcHRpb24nO1xyXG4gICAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLkFyYWJpY0xhYmVsS2V5ID0gJ0Rlc2NyaXB0aW9uSW5BcmFiaWMnO1xyXG4gICAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLkVuZ2xpc2hMYWJlbEtleSA9ICdEZXNjcmlwdGlvbkluRW5nbGlzaCc7XHJcbiAgICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uVmFsdWUgPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5NYXhMZW5ndGggPSAyNTA7XHJcblxyXG4gICAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uTmFtZSA9ICdPcmdhbml6YXRpb25JRF9HVUlEJztcclxuICAgICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uTGFiZWxLZXkgPSAnT3JnYW5pemF0aW9uJztcclxuICAgICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uRGF0YVNvdXJjZSA9IHRoaXMuT3JnYW5pemF0aW9uTGlzdDtcclxuICAgICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5QbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uU2VsZWN0ZWRJdGVtcyA9XHJcbiAgICAgICAgICB0ZW1wbGF0ZS5vcmdhbml6YXRpb25JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICB0aGlzLkVkaXRNYXN0ZXJMYXlvdXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0Lk5hbWUgPSAnRG9jdW1lbnRIZWFkZXJBbmRGb290ZXJUZW1wbGF0ZUlEX0dVSUQnO1xyXG4gICAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5MYWJlbEtleSA9ICdNYXN0ZXJMYXlvdXQnO1xyXG4gICAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5EYXRhU291cmNlID0gdGhpcy5NYXN0ZXJMYXlvdXRMaXN0O1xyXG4gICAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LlBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5FZGl0TWFzdGVyTGF5b3V0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdE1hc3RlckxheW91dC5TZWxlY3RlZEl0ZW1zID1cclxuICAgICAgICAgIHRlbXBsYXRlLmRvY3VtZW50SGVhZGVyQW5kRm9vdGVyVGVtcGxhdGVJRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICB0aGlzLkVkaXRDYXRlZ29yeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLkVkaXRDYXRlZ29yeS5OYW1lID0gJ0NhdGVnb3J5SXRlbUlEX0dVSUQnO1xyXG4gICAgICAgIHRoaXMuRWRpdENhdGVnb3J5LkxhYmVsS2V5ID0gJ0NhdGVnb3J5JztcclxuICAgICAgICB0aGlzLkVkaXRDYXRlZ29yeS5EYXRhU291cmNlID0gdGhpcy5DYXRlZ29yeUxpc3Q7XHJcbiAgICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRDYXRlZ29yeS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5FZGl0Q2F0ZWdvcnkuUGxhY2Vob2xkZXIgPSAnJztcclxuICAgICAgICB0aGlzLkVkaXRDYXRlZ29yeS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRDYXRlZ29yeS5TZWxlY3RlZEl0ZW1zID1cclxuICAgICAgICAgIHRlbXBsYXRlLmNhdGVnb3J5SXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFRlbXBsYXRlTW9kYWwpO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIGdldEVkaXRUZW1wbGF0ZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRUZW1wbGF0ZUZvcm0udmFsdWU7XHJcbiAgICBsZXQgRWRpdE1vZGVsID0gbmV3IERvY3VtZW50VGVtcGxhdGVEVE8oKTtcclxuICAgIEVkaXRNb2RlbC5JRF9HVUlEID0gdGhpcy5UZW1wbGF0ZUlkO1xyXG4gICAgRWRpdE1vZGVsLk5hbWUuQXJhYmljID0gUmVzdWx0TW9kZWwuTmFtZS5BcmFiaWM7XHJcbiAgICBFZGl0TW9kZWwuTmFtZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuTmFtZS5FbmdsaXNoO1xyXG4gICAgRWRpdE1vZGVsLlN5c05hbWUgPSBSZXN1bHRNb2RlbC5TeXNOYW1lO1xyXG4gICAgRWRpdE1vZGVsLkRvY3VtZW50SGVhZGVyQW5kRm9vdGVyVGVtcGxhdGVJRF9HVUlEID1cclxuICAgICAgUmVzdWx0TW9kZWwuRG9jdW1lbnRIZWFkZXJBbmRGb290ZXJUZW1wbGF0ZUlEX0dVSUQ7XHJcbiAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24uRW5nbGlzaCA9IFJlc3VsdE1vZGVsLkRlc2NyaXB0aW9uLkVuZ2xpc2g7XHJcbiAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24uQXJhYmljID0gUmVzdWx0TW9kZWwuRGVzY3JpcHRpb24uQXJhYmljO1xyXG4gICAgRWRpdE1vZGVsLk9yZ2FuaXphdGlvbklEX0dVSUQgPSBSZXN1bHRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEO1xyXG4gICAgRWRpdE1vZGVsLkNhdGVnb3J5SXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbC5DYXRlZ29yeUl0ZW1JRF9HVUlEO1xyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0RWRpdFRlbXBsYXRlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlU2VydmljZS5lZGl0RG9jdW1lbnRUZW1wbGF0ZShFZGl0TW9kZWwpO1xyXG4gIH07XHJcblxyXG4gIC8vVGVzdCBTZW5kIEVtYWlsXHJcbiAgc2hvd1Rlc3RFeHBvcnREb2N1bWVudE1vZGFsKFRlc3RFeHBvcnREb2N1bWVudE1vZGFsLCB0eXBlID0gMSkge1xyXG4gICAgdGhpcy5leHBvcnRUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuVGVzdEV4cG9ydERvY3VtZW50Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLlRlc3RFeHBvcnREb2N1bWVudEZvcm07XHJcbiAgICB0aGlzLlRlc3RFeHBvcnREb2N1bWVudEZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPVxyXG4gICAgICB0aGlzLmdldFRlc3RFeHBvcnREb2N1bWVudE1vZGVsO1xyXG4gICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPVxyXG4gICAgICB0aGlzLmdldFRlc3RFeHBvcnREb2N1bWVudEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5PblN1Y2Nlc3NIYW5kbGVyID1cclxuICAgICAgdGhpcy5vblN1Y2Nlc3NFeHBvcnRIYW5kbGVyO1xyXG4gICAgdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9ucy5EaXNhYmxlU3VjY2Vzc05vdGlmaWNhdGlvbiA9IHRydWU7XHJcblxyXG4gICAgbGV0IEtleSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgS2V5Lk5hbWUgPSAnS2V5JztcclxuICAgIEtleS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgS2V5LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgIEtleS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgbGV0IFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBWYWx1ZS5OYW1lID0gJ1ZhbHVlJztcclxuICAgIFZhbHVlLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBWYWx1ZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICBWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgbGV0IEtleVJlcGVhdGVyID0gbmV3IFJlcGVhdGVyRmllbGQoKTtcclxuICAgIEtleVJlcGVhdGVyLkNvbnRyb2xUeXBlID0gRGF0YVR5cGUuVGV4dDtcclxuICAgIEtleVJlcGVhdGVyLkNvbnRyb2xPcHRpb25zID0gS2V5O1xyXG4gICAgS2V5UmVwZWF0ZXIuSGVhZGVyVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0tleScpO1xyXG5cclxuICAgIGxldCBWYWx1ZVJlcGVhdGVyID0gbmV3IFJlcGVhdGVyRmllbGQoKTtcclxuICAgIFZhbHVlUmVwZWF0ZXIuQ29udHJvbFR5cGUgPSBEYXRhVHlwZS5UZXh0O1xyXG4gICAgVmFsdWVSZXBlYXRlci5Db250cm9sT3B0aW9ucyA9IFZhbHVlO1xyXG4gICAgVmFsdWVSZXBlYXRlci5IZWFkZXJUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnVmFsdWUnKTtcclxuXHJcbiAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zID0gbmV3IFJlcGVhdGVyT3B0aW9ucygpO1xyXG4gICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLk5hbWUgPSAndmFsdWVzJztcclxuICAgIHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuRGVsZXRlQnV0dG9uRXh0cmFDbGFzc2VzID1cclxuICAgICAgJ2J0biBidG4tZGFuZ2VyIGJ0bi1zbSBidG4taWNvbic7XHJcbiAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLkRlbGV0ZUJ1dHRvblRleHQgPSBgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5gO1xyXG4gICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5SZXBlYXRlclRhYmxlRXh0cmFDbGFzc2VzID1cclxuICAgICAgJ3RhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktOSBkYXRhVGFibGUgbm8tZm9vdGVyIHZhbGlkYXRpb24tdGFibGUtdGV4dCc7XHJcbiAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLlJlcGVhdGVyVGFibGVSb3dFeHRyYUNsYXNzZXMgPVxyXG4gICAgICAndGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTAnO1xyXG4gICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5BY3Rpb25MYWJlbEtleSA9ICdBY3Rpb24nO1xyXG4gICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5BZGRCdXR0b25FeHRyYUNsYXNzZXMgPVxyXG4gICAgICAnYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayc7XHJcbiAgICB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLkFkZEJ1dHRvblRleHQgPSBgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiR7dGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxyXG4gICAgICAnQWRkJ1xyXG4gICAgKX1gO1xyXG4gICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zID0gMTtcclxuICAgIHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuUmVwZWF0ZXJWYWx1ZSA9IFtdO1xyXG4gICAgdGhpcy5hZGRLZXlWYWx1ZVJlcGVhdGVyT3B0aW9ucy5SZXBlYXRlclN0cnVjdHVyZSA9IFtcclxuICAgICAgS2V5UmVwZWF0ZXIsXHJcbiAgICAgIFZhbHVlUmVwZWF0ZXIsXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGVzdEV4cG9ydERvY3VtZW50TW9kYWwpO1xyXG4gIH1cclxuICBnZXRUZXN0RXhwb3J0RG9jdW1lbnRNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5UZXN0RXhwb3J0RG9jdW1lbnRGb3JtLnZhbHVlO1xyXG4gICAgbGV0IEV4cG9ydERvY3VtZW50VGVtcGxhdGVNb2RlbCA9IG5ldyBEb2N1bWVudEV4cG9ydERUTygpO1xyXG4gICAgRXhwb3J0RG9jdW1lbnRUZW1wbGF0ZU1vZGVsLklEX0dVSUQgPSB0aGlzLlRlbXBsYXRlSWQ7XHJcbiAgICBsZXQgcmVzdWx0OiBEb2N1bWVudEV4cG9ydEl0ZW1EVE9bXSA9IFtdO1xyXG4gICAgZm9yIChcclxuICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgaW5kZXggPCB0aGlzLmFkZEtleVZhbHVlUmVwZWF0ZXJPcHRpb25zLlJlcGVhdGVyVmFsdWUubGVuZ3RoO1xyXG4gICAgICBpbmRleCsrXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnMuUmVwZWF0ZXJWYWx1ZVtpbmRleF07XHJcbiAgICAgIGlmIChlbGVtZW50LktleSAmJiBlbGVtZW50LlZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGl0ZW06IERvY3VtZW50RXhwb3J0SXRlbURUTyA9IG5ldyBEb2N1bWVudEV4cG9ydEl0ZW1EVE8oKTtcclxuICAgICAgICBpdGVtLktleSA9IGVsZW1lbnQuS2V5O1xyXG4gICAgICAgIGl0ZW0uVmFsdWUgPSBlbGVtZW50LlZhbHVlO1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBFeHBvcnREb2N1bWVudFRlbXBsYXRlTW9kZWwuSXRlbXMgPSByZXN1bHQ7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRXhwb3J0RG9jdW1lbnRUZW1wbGF0ZU1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH07XHJcblxyXG4gIGdldFRlc3RFeHBvcnREb2N1bWVudEZ1bmN0aW9uID0gKFxyXG4gICAgRXhwb3J0RG9jdW1lbnRUZW1wbGF0ZU1vZGVsXHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIGlmICh0aGlzLmV4cG9ydFR5cGUgPT0gMilcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVTZXJ2aWNlLmV4cG9ydFdvcmQoRXhwb3J0RG9jdW1lbnRUZW1wbGF0ZU1vZGVsKTtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlU2VydmljZS5leHBvcnRQREYoRXhwb3J0RG9jdW1lbnRUZW1wbGF0ZU1vZGVsKTtcclxuICB9O1xyXG5cclxuICBvblN1Y2Nlc3NFeHBvcnRIYW5kbGVyID0gYXN5bmMgKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICBsZXQgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgbGV0IGxhdGVzdF9kYXRlID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obm93LCAnZGQtTU0teXl5eSBISC5tbScpO1xyXG4gICAgaWYgKHRoaXMuZXhwb3J0VHlwZSA9PSAyKSB7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9XHJcbiAgICAgICAgdGhpcy5UZW1wbGF0ZUluZm8ubG9jYWxpemVkVGVtcGxhdGVOYW1lICsgJ18nICsgbGF0ZXN0X2RhdGUgKyAnLmRvYyc7XHJcbiAgICAgIGxldCBkb2N1bWVudE9wdGlvbnM6IGFueSA9IHt9O1xyXG4gICAgICBpZiAocmVzdWx0LmlzTGFuZHNjYXBlKVxyXG4gICAgICAgZG9jdW1lbnRPcHRpb25zLm9yaWVudGF0aW9uID0gJ2xhbmRzY2FwZSc7XHJcbiAgICAgICBkb2N1bWVudE9wdGlvbnMucGFnZU51bWJlciA9cmVzdWx0LnNob3dQYWdpbmc7XHJcbiAgICAgICBkb2N1bWVudE9wdGlvbnMucGFnZVNpemU9e1xyXG4gICAgICAgICB3aWR0aDpyZXN1bHQucGFnZVdpZHRoKjE1LFxyXG4gICAgICAgICBoZWlnaHQ6cmVzdWx0LnBhZ2VIZWlnaHQqMTVcclxuICAgICAgIH07XHJcbiAgICAgICBkb2N1bWVudE9wdGlvbnMubWFyZ2lucz17XHJcbiAgICAgICAgdG9wOnJlc3VsdC50b3AqMTUsXHJcbiAgICAgICAgcmlnaHQ6cmVzdWx0LnJpZ2h0KjE1LFxyXG4gICAgICAgIGJvdHRvbTpyZXN1bHQuYm90dG9tKjE1LFxyXG4gICAgICAgIGxlZnQ6cmVzdWx0LmxlZnQqMTUsXHJcbiAgICAgICAgaGVhZGVyOjcyMCxcclxuICAgICAgICBmb290ZXI6NzIwLFxyXG4gICAgICAgIGd1dHRlcjowLFxyXG4gICAgICB9O1xyXG4gICAgICBkb2N1bWVudE9wdGlvbnMuZm9vdGVyPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudE9wdGlvbnMuaGVhZGVyPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudE9wdGlvbnMucGFnZU51bWJlcj10cnVlO1xyXG4gICAgICBkb2N1bWVudE9wdGlvbnMudGFibGU9eyByb3c6IHsgY2FudFNwbGl0OiB0cnVlIH0gfTtcclxuICAgICAgdmFyIGZpbGVCdWZmZXIgPWF3YWl0IEdlbmVyYXRlRE9DWChyZXN1bHQuYm9keSwgcmVzdWx0LmhlYWRlciwgZG9jdW1lbnRPcHRpb25zLCByZXN1bHQuZm9vdGVyKVxyXG4gICAgICB0aGlzLmRvd25sb2FkV29yZChmaWxlQnVmZmVyIGFzIGFueSwgZmlsZU5hbWUpO1xyXG4gICAgICB2YXIgZmlsZUJ1ZmZlckxpYiA9YXdhaXQgdGhpcy50ZW1wbGF0ZVNlcnZpY2UuZ2VuZXJhdGVXb3JkQnl0ZUZpbGUocmVzdWx0LmJvZHksIHJlc3VsdC5oZWFkZXIsIGRvY3VtZW50T3B0aW9ucywgcmVzdWx0LmZvb3RlcilcclxuICAgICAgdGhpcy5kb3dubG9hZFdvcmQoZmlsZUJ1ZmZlciBhcyBhbnksIFwiTGliXCIrZmlsZU5hbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpbGVOYW1lID0gdGhpcy5UZW1wbGF0ZUluZm8ubG9jYWxpemVkVGVtcGxhdGVOYW1lICsgJ18nICsgbGF0ZXN0X2RhdGUgKyAnLnBkZic7XHJcbiAgICB0aGlzLmRvd25sb2FkUERGKHJlc3VsdCBhcyBhbnksIGZpbGVOYW1lKTtcclxuICB9O1xyXG5cclxuICAvL09uIGRlc3Ryb3lcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiICpuZ0lmPVwiaXNEYXRhTG9hZGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTNcclxuICAgICAgICAgIGJ0bi1saWdodC1wcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFRlbXBsYXRlTW9kYWwoRWRpdFRlbXBsYXRlTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICA8c3Bhbj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTNcclxuICAgICAgICAgIGJ0bi1saWdodC1wcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93VGVzdEV4cG9ydERvY3VtZW50TW9kYWwoRXhwb3J0RG9jdW1lbnRNb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICA8c3Bhbj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRcIil9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gbWUtM1xyXG4gICAgICAgICAgYnRuLWxpZ2h0LXByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dUZXN0RXhwb3J0RG9jdW1lbnRNb2RhbChFeHBvcnREb2N1bWVudE1vZGFsLDIpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgPHNwYW4+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXhwb3J0V29yZFwiKX19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuU2V0UGFzc1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBtZS0zXHJcbiAgICAgICAgICBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93R2VuZXJhdGVDb2RlQnlJZE1vZGFsKEdlbmVyYXRlQ29kZU1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzXCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlQ29kZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5TZXRQYXNzXCIgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTNcclxuICAgICAgICAgIGJ0bi1wcmltYXJ5XCIgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dHZW5lcmF0ZVVwZGF0ZUNvZGVCeUlkTW9kYWwoR2VuZXJhdGVDb2RlTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleVwiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZVVwZGF0ZUNvZGVcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14bC02IG1iLTEwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlciBcIj5cclxuICAgICAgICAgICAgPCEtLWJlZ2luOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLTMgYmctbGlnaHRcclxuICAgICAgICAgICAgICBweS0xMCBweC0xMCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgIDwhLS1iZWdpbjo6SGVhZGluZy0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpUaXRsZS0tPlxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vRG9jdW1lbnRzL0VkaXRUZW1wbGF0ZScsVGVtcGxhdGVJZCwnZW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtcHJpbWFyeSBtYi01XHJcbiAgICAgICAgICAgICAgICAgIGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBFbmdsaXNoOlxyXG4gICAgICAgICAgICAgICAgICB7e1RlbXBsYXRlSW5mby50ZW1wbGF0ZU5hbWVFTn19XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vRG9jdW1lbnRzL0VkaXRUZW1wbGF0ZScsVGVtcGxhdGVJZCwnZW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cImJ0biBidG4tc21cclxuICAgICAgICAgICAgICAgICAgYnRuLWxpZ2h0LXByaW1hcnkgYnRuLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJdGVtLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1ncmF5LTgwMCBmbGV4LWdyb3ctMSBwZS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5oZWFkZXJFTn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5ib2R5RU59fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZm9vdGVyRU59fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLWVuZDo6U2VsZWN0LS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tZW5kOjpPcHRpb24tLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtNiBtYi0xMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPCEtLWJlZ2luOjpPcHRpb24tLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLTMgYmctbGlnaHRcclxuICAgICAgICAgICAgICBweS0xMCBweC0xMCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgIDwhLS1iZWdpbjo6SGVhZGluZy0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpUaXRsZS0tPlxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vRG9jdW1lbnRzL0VkaXRUZW1wbGF0ZScsVGVtcGxhdGVJZCwnYXInXVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIiBjbGFzcz1cInRleHQtcHJpbWFyeSBtYi01XHJcbiAgICAgICAgICAgICAgICAgIGZ3LWJvbGRlc3QgZnMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBBcmFiaWM6XHJcbiAgICAgICAgICAgICAgICAgIHt7VGVtcGxhdGVJbmZvLnRlbXBsYXRlTmFtZUFSfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL0RvY3VtZW50cy9FZGl0VGVtcGxhdGUnLFRlbXBsYXRlSWQsJ2FyJ11cIlxyXG4gICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCIgY2xhc3M9XCJidG4gYnRuLXNtXHJcbiAgICAgICAgICAgICAgICAgIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJdGVtLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1ncmF5LTgwMCBmbGV4LWdyb3ctMSBwZS0zIGFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5oZWFkZXJBUn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7e1RlbXBsYXRlSW5mby5ib2R5QVJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaW5uZXJIVE1MPVwie3tUZW1wbGF0ZUluZm8uZm9vdGVyQVJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OlNlbGVjdC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLWVuZDo6T3B0aW9uLS0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcbjwhLS0gZWRpdCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNFZGl0VGVtcGxhdGVNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuXHJcbiAgICAgIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVtcGxhdGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRUZW1wbGF0ZUZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCJcclxuICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRUZW1wbGF0ZUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJFZGl0RGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLU11bHRpTGluZ3VhbFRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0U3lzTmFtZVwiIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdE9yZ2FuaXphdGlvblwiXHJcbiAgICAgICAgICAgIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0Q2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFRlbXBsYXRlRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdE1hc3RlckxheW91dFwiXHJcbiAgICAgICAgICAgIFtncm91cF09XCJFZGl0VGVtcGxhdGVGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFRlbXBsYXRlTW9kYWwgaWQ9XCJDbG9zZUVkaXRUZW1wbGF0ZU1vZGFsXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbjwhLS0gRXhwb3J0IERvY3VtZW50IE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0V4cG9ydERvY3VtZW50TW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJUZXN0RXhwb3J0RG9jdW1lbnRGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtcmVwZWF0ZXItdGFibGUgW29wdGlvbnNdPVwiYWRkS2V5VmFsdWVSZXBlYXRlck9wdGlvbnNcIiAgW2dyb3VwXT1cIlRlc3RFeHBvcnREb2N1bWVudEZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtcmVwZWF0ZXItdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZVNlbmRFbWFpbEZvcm0gaWQ9XCJDbG9zZVNlbmRFbWFpbEZvcm1cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS0gR2VuZXJhdGVDb2RlIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0dlbmVyYXRlQ29kZU1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG5cclxuICAgICAgYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZUNvZGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiR2VuZXJhdGVDb2RlRm9ybVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIlJvd1wiPlxyXG4gICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkdlbmVyYXRlQ29kZVRleHRBcmVhXCJcclxuICAgICAgICAgIFtncm91cF09XCJHZW5lcmF0ZUNvZGVGb3JtXCIgI0dlbmVyYXRlQ29kZUlucHV0PlxyXG4gICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VHZW5lcmF0ZUNvZGVNb2RhbCBpZD1cIkNsb3NlR2VuZXJhdGVDb2RlTW9kYWxcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvcHlUb0NsaXBib2FyZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=