nuxeo-development-framework 4.2.7 → 4.2.8

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 (172) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +2664 -3347
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/comments/comments.module.js +5 -9
  4. package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +23 -30
  5. package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +34 -28
  6. package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +77 -0
  7. package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +28 -0
  8. package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +29 -0
  9. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +35 -31
  10. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +41 -41
  11. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +34 -30
  12. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +3 -3
  13. package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +2 -6
  14. package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +24 -32
  15. package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
  16. package/esm2015/lib/components/diagrams/directive/diagram.directive.js +3 -2
  17. package/esm2015/lib/components/diagrams/editor/customize.js +4 -1
  18. package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +34 -21
  19. package/esm2015/lib/components/diagrams/editor/path-plugin.js +10 -11
  20. package/esm2015/lib/components/diagrams/models/base-node.model.js +1 -2
  21. package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
  22. package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
  23. package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
  24. package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
  25. package/esm2015/lib/components/diagrams/utilities/random.js +3 -9
  26. package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +9 -11
  27. package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +29 -30
  28. package/esm2015/lib/components/documents/documents.module.js +6 -2
  29. package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +40 -45
  30. package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +17 -21
  31. package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +164 -0
  32. package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +92 -98
  33. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +2 -2
  34. package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +29 -28
  35. package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +10 -13
  36. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +42 -58
  37. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +36 -65
  38. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +13 -39
  39. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +200 -238
  40. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +12 -14
  41. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +20 -48
  42. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +43 -45
  43. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +36 -62
  44. package/esm2015/lib/components/file-manger/components/move/move.component.js +31 -60
  45. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +81 -81
  46. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +30 -57
  47. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +66 -99
  48. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +75 -95
  49. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +11 -15
  50. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +23 -53
  51. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +24 -24
  52. package/esm2015/lib/components/file-manger/file-manager.abstract.js +19 -21
  53. package/esm2015/lib/components/file-manger/file-manger.module.js +6 -10
  54. package/esm2015/lib/components/notifications/components/base-notifications.component.js +16 -2
  55. package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +3 -3
  56. package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +1 -2
  57. package/esm2015/lib/components/notifications/services/notifications.service.js +17 -23
  58. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +90 -107
  59. package/esm2015/lib/components/permissions/permissions/permissions.component.js +57 -100
  60. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +52 -36
  61. package/esm2015/lib/components/permissions/permissions.module.js +7 -23
  62. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +22 -22
  63. package/esm2015/lib/shared-services/dialog-mangment.service.js +23 -27
  64. package/esm2015/lib/shared-services/shared-docs.service.js +27 -22
  65. package/esm2015/public-api.js +5 -4
  66. package/fesm2015/nuxeo-development-framework.js +1843 -2523
  67. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  68. package/lib/components/comments/comments.module.d.ts +1 -2
  69. package/lib/components/comments/components/comment-item/comment-item.component.d.ts +1 -3
  70. package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +5 -8
  71. package/lib/components/confirm-caller/confirm-caller.dialog.d.ts +46 -0
  72. package/lib/components/confirm-caller/confirm-caller.module.d.ts +17 -0
  73. package/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.d.ts +12 -0
  74. package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +2 -4
  75. package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +4 -6
  76. package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +2 -4
  77. package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +2 -3
  78. package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +5 -2
  79. package/lib/components/diagrams/models/base-node.model.d.ts +1 -1
  80. package/lib/components/diagrams/models/connection.model.d.ts +1 -2
  81. package/lib/components/diagrams/types/common.type.d.ts +0 -4
  82. package/lib/components/diagrams/types/diagram-config.type.d.ts +1 -1
  83. package/lib/components/diagrams/types/node-definition.d.ts +0 -1
  84. package/lib/components/diagrams/utilities/random.d.ts +1 -1
  85. package/lib/components/documents/components/document-list/documents-list.component.d.ts +1 -3
  86. package/lib/components/documents/documents.module.d.ts +14 -13
  87. package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +10 -11
  88. package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +6 -5
  89. package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +33 -0
  90. package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
  91. package/lib/components/dynamic-form/dynamic-form.module.d.ts +1 -2
  92. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +5 -11
  93. package/lib/components/file-manger/components/copy/copy.component.d.ts +4 -11
  94. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +4 -9
  95. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +19 -13
  96. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +4 -6
  97. package/lib/components/file-manger/components/delete/delete.component.d.ts +4 -11
  98. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +11 -9
  99. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +5 -11
  100. package/lib/components/file-manger/components/move/move.component.d.ts +4 -11
  101. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +10 -12
  102. package/lib/components/file-manger/components/rename/rename.component.d.ts +5 -11
  103. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +8 -9
  104. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +7 -6
  105. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +3 -4
  106. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +4 -11
  107. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +8 -9
  108. package/lib/components/file-manger/file-manager.abstract.d.ts +0 -2
  109. package/lib/components/file-manger/file-manger.module.d.ts +1 -2
  110. package/lib/components/notifications/components/base-notifications.component.d.ts +8 -2
  111. package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
  112. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +6 -8
  113. package/lib/components/permissions/permissions/permissions.component.d.ts +1 -3
  114. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
  115. package/lib/components/permissions/permissions.module.d.ts +1 -2
  116. package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +5 -5
  117. package/lib/shared-services/dialog-mangment.service.d.ts +3 -3
  118. package/lib/shared-services/shared-docs.service.d.ts +2 -4
  119. package/package.json +4 -3
  120. package/public-api.d.ts +4 -3
  121. package/esm2015/lib/components/charts/chart.const.js +0 -3
  122. package/esm2015/lib/components/charts/chart.token.js +0 -3
  123. package/esm2015/lib/components/charts/charts.module.js +0 -19
  124. package/esm2015/lib/components/charts/components/base-chart.component.js +0 -44
  125. package/esm2015/lib/components/charts/components/chart.component.js +0 -131
  126. package/esm2015/lib/components/charts/components/data-chart.component.js +0 -164
  127. package/esm2015/lib/components/charts/components/index.js +0 -4
  128. package/esm2015/lib/components/charts/defaults/bar.js +0 -18
  129. package/esm2015/lib/components/charts/defaults/doughnut.js +0 -18
  130. package/esm2015/lib/components/charts/defaults/index.js +0 -5
  131. package/esm2015/lib/components/charts/defaults/line.js +0 -36
  132. package/esm2015/lib/components/charts/defaults/pie.js +0 -20
  133. package/esm2015/lib/components/charts/index.js +0 -9
  134. package/esm2015/lib/components/charts/models/index.js +0 -5
  135. package/esm2015/lib/components/charts/models/options.js +0 -2
  136. package/esm2015/lib/components/charts/models/plugins-options.js +0 -2
  137. package/esm2015/lib/components/charts/models/response.js +0 -2
  138. package/esm2015/lib/components/charts/models/statistic-request-config.js +0 -2
  139. package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +0 -21
  140. package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +0 -30
  141. package/esm2015/lib/components/charts/plugins/index.js +0 -3
  142. package/esm2015/lib/components/charts/services/index.js +0 -2
  143. package/esm2015/lib/components/charts/services/statistic.service.js +0 -17
  144. package/esm2015/lib/components/charts/utility/colors.js +0 -79
  145. package/esm2015/lib/components/charts/utility/common.js +0 -7
  146. package/esm2015/lib/components/charts/utility/index.js +0 -3
  147. package/lib/components/charts/chart.const.d.ts +0 -2
  148. package/lib/components/charts/chart.token.d.ts +0 -8
  149. package/lib/components/charts/charts.module.d.ts +0 -9
  150. package/lib/components/charts/components/base-chart.component.d.ts +0 -21
  151. package/lib/components/charts/components/chart.component.d.ts +0 -28
  152. package/lib/components/charts/components/data-chart.component.d.ts +0 -32
  153. package/lib/components/charts/components/index.d.ts +0 -3
  154. package/lib/components/charts/defaults/bar.d.ts +0 -2
  155. package/lib/components/charts/defaults/doughnut.d.ts +0 -2
  156. package/lib/components/charts/defaults/index.d.ts +0 -4
  157. package/lib/components/charts/defaults/line.d.ts +0 -2
  158. package/lib/components/charts/defaults/pie.d.ts +0 -2
  159. package/lib/components/charts/index.d.ts +0 -8
  160. package/lib/components/charts/models/index.d.ts +0 -4
  161. package/lib/components/charts/models/options.d.ts +0 -11
  162. package/lib/components/charts/models/plugins-options.d.ts +0 -15
  163. package/lib/components/charts/models/response.d.ts +0 -5
  164. package/lib/components/charts/models/statistic-request-config.d.ts +0 -28
  165. package/lib/components/charts/plugins/doughnut-center-text.d.ts +0 -2
  166. package/lib/components/charts/plugins/doughnut-empty-state.d.ts +0 -2
  167. package/lib/components/charts/plugins/index.d.ts +0 -2
  168. package/lib/components/charts/services/index.d.ts +0 -1
  169. package/lib/components/charts/services/statistic.service.d.ts +0 -9
  170. package/lib/components/charts/utility/colors.d.ts +0 -11
  171. package/lib/components/charts/utility/common.d.ts +0 -4
  172. package/lib/components/charts/utility/index.d.ts +0 -2
@@ -2,32 +2,32 @@ import { Component, HostListener, Inject } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
4
  import * as moment from 'moment';
5
- import { forkJoin, of } from 'rxjs';
6
- import { BaseDialogComponent } from '../../../../shared/components/base/base-dialog.component';
7
- import { tap } from 'rxjs/operators';
5
+ import { forkJoin } from 'rxjs';
8
6
  import * as i0 from "@angular/core";
9
- import * as i1 from "../../../../shared-services/upload-managment.service";
10
- import * as i2 from "../../../../shared-services/dialog-mangment.service";
11
- import * as i3 from "../../../../shared-services/file-manager.service";
12
- import * as i4 from "../../../custom-toastr/services/custom-toastr.service";
13
- import * as i5 from "@angular/forms";
14
- import * as i6 from "../../../../core/adapters/adapter.service";
15
- import * as i7 from "../../../../configuration/app-config.service";
16
- import * as i8 from "../../../hijri-gregorian-datepicker/services/date-helper.service";
17
- import * as i9 from "../../../../shared-services/user.service";
18
- import * as i10 from "../../../../shared-services/dynamic-form.service";
19
- import * as i11 from "../../../../shared/components/nuxeo-dialog/nuxeo.dialog";
20
- import * as i12 from "../../../dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component";
21
- import * as i13 from "../../../dynamic-form/components/dynamic-form/dynamic-form.component";
22
- import * as i14 from "../../../attachment-modal/attachments/attachments.component";
23
- import * as i15 from "@angular/material/progress-spinner";
24
- import * as i16 from "@angular/common";
25
- import * as i17 from "../../../../directive/rtl/set-rtl.directive";
26
- import * as i18 from "@ngx-translate/core";
27
- export class CreateModalComponent extends BaseDialogComponent {
28
- constructor(data, uploadMangmentService, dialogMangmentService, fileMangerService, tosterService, formBuilder, adapeter, fileManagerService, appConfService, dateHelperService, userService, environment, injector, dynamicFormService) {
29
- super(injector);
7
+ import * as i1 from "@angular/material/dialog";
8
+ import * as i2 from "../../../../shared-services/upload-managment.service";
9
+ import * as i3 from "../../../../shared-services/dialog-mangment.service";
10
+ import * as i4 from "../../../../shared-services/file-manager.service";
11
+ import * as i5 from "../../../custom-toastr/services/custom-toastr.service";
12
+ import * as i6 from "@angular/forms";
13
+ import * as i7 from "../../../../core/adapters/adapter.service";
14
+ import * as i8 from "../../../../configuration/app-config.service";
15
+ import * as i9 from "../../../hijri-gregorian-datepicker/services/date-helper.service";
16
+ import * as i10 from "../../../../core/services/translation/translation.service";
17
+ import * as i11 from "../../../../shared-services/user.service";
18
+ import * as i12 from "../../../../core/services/nuxeo/nuxeo.service";
19
+ import * as i13 from "../../../../shared-services/dynamic-form.service";
20
+ import * as i14 from "../../../dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component";
21
+ import * as i15 from "../../../dynamic-form/components/dynamic-form/dynamic-form.component";
22
+ import * as i16 from "../../../attachment-modal/attachments/attachments.component";
23
+ import * as i17 from "@angular/material/progress-spinner";
24
+ import * as i18 from "@angular/common";
25
+ import * as i19 from "../../../../directive/rtl/set-rtl.directive";
26
+ import * as i20 from "@ngx-translate/core";
27
+ export class CreateModalComponent {
28
+ constructor(data, dialogRef, uploadMangmentService, dialogMangmentService, fileMangerService, tosterService, formBuilder, adapeter, fileManagerService, appConfService, dateHelperService, translationService, userService, nuxeoService, environment, dynamicFormService) {
30
29
  this.data = data;
30
+ this.dialogRef = dialogRef;
31
31
  this.uploadMangmentService = uploadMangmentService;
32
32
  this.dialogMangmentService = dialogMangmentService;
33
33
  this.fileMangerService = fileMangerService;
@@ -37,7 +37,9 @@ export class CreateModalComponent extends BaseDialogComponent {
37
37
  this.fileManagerService = fileManagerService;
38
38
  this.appConfService = appConfService;
39
39
  this.dateHelperService = dateHelperService;
40
+ this.translationService = translationService;
40
41
  this.userService = userService;
42
+ this.nuxeoService = nuxeoService;
41
43
  this.environment = environment;
42
44
  this.dynamicFormService = dynamicFormService;
43
45
  this.addingProperties = false;
@@ -46,149 +48,37 @@ export class CreateModalComponent extends BaseDialogComponent {
46
48
  this.showRenderer = false; // used to force renderer to feel changes in forms and value when changing files
47
49
  // uploadFinishSubscription: Subscription;
48
50
  this.usingExtraFields = false; // flage to switch between static form types
51
+ this.isArabic = false;
49
52
  this.showStaticForm = false;
50
53
  this.disableCreateWhenFinishBtn = true;
51
54
  this.creating = false;
52
55
  this.displayNoteMessage = true;
53
- this.createWhenFinish = () => {
54
- this.createWhenFinishMode = true;
55
- return this.minimizDialog();
56
- };
57
- this.startAddingProperties = () => {
58
- //if starting from filemnager then i have fixed file type for all attachmetn and single dynaimc form type
59
- if (this.source === 'fileManger') {
60
- // this.dynamicFormService.getDynamicForm(this.fileType).subscribe(res => {
61
- this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.forEach((file) => {
62
- file['fileType'] = this.source === 'fileManger' ? this.fileType : {};
63
- file['dynamicForm'] = this.dialogMangmentService.storedDynamicForm;
64
- file['dynamicData'] = {};
65
- file['staticFormValid'] = this.usingExtraFields ? false : true;
66
- file['staticData'] = this.setStaticData(file.title ? file.title : file.name);
67
- file['generalValidationValid'] = true;
68
- });
69
- this.uploadMangmentService.uploadedFilesStatus.allfiles.forEach((file) => {
70
- file['fileType'] = this.source === 'fileManger' ? this.fileType : {};
71
- file['dynamicForm'] = this.dialogMangmentService.storedDynamicForm;
72
- file['dynamicData'] = {};
73
- file['staticFormValid'] = this.usingExtraFields ? false : true;
74
- file['staticData'] = this.setStaticData(file.title ? file.title : file.name);
75
- file['generalValidationValid'] = true;
76
- });
77
- }
78
- this.addingProperties = true;
79
- this.uploadMangmentService.addingPropertiesMode = true;
80
- };
81
- this.createDocument = () => {
82
- var _a, _b;
83
- this.creating = true;
84
- this.uploadMangmentService.failedFiles = [];
85
- this.uploadMangmentService.GeneralFormValidation = this.checkValidation();
86
- if (this.uploadMangmentService.GeneralFormValidation) {
87
- let apiCalls = [];
88
- if (((_a = this.data) === null || _a === void 0 ? void 0 : _a.path.includes('/default-domain/workspaces/DMSWorkspaces')) ||
89
- ((_b = this.data) === null || _b === void 0 ? void 0 : _b.path.includes('/default-domain/UserWorkspaces/'))) {
90
- this.constructPayLoadToWorkSpace(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
91
- this.payloadList.forEach((payload) => {
92
- apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId, 'DMS.CreateDocumentFromBlob'));
93
- });
94
- }
95
- else {
96
- this.constructPayLoad(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
97
- this.payloadList.forEach((payload) => {
98
- apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId));
99
- });
100
- }
101
- return forkJoin(apiCalls).pipe(tap((response) => {
102
- this.creating = false;
103
- response.forEach((singleRes) => {
104
- if (singleRes['status'] && singleRes['status'] === 'failed') {
105
- this.uploadMangmentService.failedFiles.push(singleRes['originFile']);
106
- }
107
- });
108
- if (this.uploadMangmentService.failedFiles.length > 0) {
109
- this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.UPLOAD_ERROR');
110
- this.uploadMangmentService.uploadedFilesStatus.uploadedFiles = [];
111
- this.selectedFile = null;
112
- this.uploadMangmentService.uploadedFilesStatus.allfiles = [
113
- ...this.uploadMangmentService.failedFiles
114
- ];
115
- }
116
- else {
117
- this.fileMangerService.onRefreshingFileManger.next();
118
- this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.FILE_CREATED_SUCCE');
119
- super.close(false);
120
- this.uploadMangmentService.resetStatus();
121
- }
122
- }, (error) => {
123
- this.creating = false;
124
- }));
125
- }
126
- else {
127
- this.creating = false;
128
- return of(null);
129
- }
130
- };
131
- this.tryAgainCreateDocument = () => {
132
- this.uploadMangmentService.uploadFilesMangment(this.uploadMangmentService.failedFiles);
133
- return of(null);
134
- };
135
- this.minimizDialog = () => {
136
- super.close(true);
137
- return of(null);
138
- };
139
- this.ApplyChangesToAll = () => {
140
- this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.forEach((file) => {
141
- let title = file['staticData']
142
- ? file['staticData']['title']
143
- : file.name;
144
- file['fileType'] = this.selectedFile.fileType;
145
- file['dynamicForm'] = this.selectedFile.dynamicForm;
146
- file['dynamicData'] = this.selectedFile.dynamicData;
147
- file['staticFormValid'] = this.selectedFile.staticFormValid;
148
- file['staticData'] = Object.assign({}, this.fileForm.value);
149
- file['staticData']['title'] = title;
150
- });
151
- this.uploadMangmentService.uploadedFilesStatus.allfiles.forEach((file) => {
152
- let title = file['staticData'] ? file['staticData']['title'] : file.name;
153
- file['fileType'] = this.selectedFile.fileType;
154
- file['dynamicForm'] = this.selectedFile.dynamicForm;
155
- file['dynamicData'] = this.selectedFile.dynamicData;
156
- file['staticFormValid'] = this.selectedFile.staticFormValid;
157
- file['staticData'] = Object.assign({}, this.fileForm.value);
158
- file['staticData']['title'] = title;
159
- });
160
- return of(null);
161
- };
162
56
  this.myEnvironment = this.environment;
163
57
  this.createWhenFinishMode = false;
164
58
  this.addingProperties = this.uploadMangmentService.addingPropertiesMode;
165
59
  this.fileType = this.dialogMangmentService.fileType; // object that was constructed inside subtypes service
166
60
  this.source = this.dialogMangmentService.addingFrom;
167
- this.fileManagerService
168
- .getFileSchemas(this.fileType.type)
169
- .subscribe((schemas) => {
170
- schemas.map((item) => {
171
- if (item.name === 'generaldocument') {
61
+ this.fileManagerService.getFileSchemas(this.fileType.type).subscribe(schemas => {
62
+ schemas.map(item => {
63
+ if (item.name === "generaldocument") {
172
64
  this.usingExtraFields = true;
173
65
  }
174
66
  });
175
67
  this.initiatfileForm();
176
68
  this.uploadMangmentService.gettingPropFromModal({
177
- fileType: this.source === 'fileManger' ? this.fileType : {},
178
- dynamicForm: this.dialogMangmentService.storedDynamicForm,
179
- dynamicData: {},
180
- staticFormValid: this.usingExtraFields ? false : true,
181
- generalValidationValid: true,
182
- usingExtraFields: this.usingExtraFields,
183
- path: this.data.path
69
+ 'fileType': this.source === 'fileManger' ? this.fileType : {},
70
+ 'dynamicForm': this.dialogMangmentService.storedDynamicForm,
71
+ 'dynamicData': {},
72
+ 'staticFormValid': this.usingExtraFields ? false : true,
73
+ 'generalValidationValid': true,
74
+ 'usingExtraFields': this.usingExtraFields,
75
+ 'path': this.data.path
184
76
  });
185
77
  });
186
78
  }
187
79
  KeyUpEvent(event) {
188
- if (this.addingProperties &&
189
- this.uploadMangmentService.failedFiles.length === 0) {
190
- if (this.uploadMangmentService.uploadedFilesStatus.uploadInProgress &&
191
- !this.disableCreateWhenFinishBtn) {
80
+ if (this.addingProperties && this.uploadMangmentService.failedFiles.length === 0) {
81
+ if (this.uploadMangmentService.uploadedFilesStatus.uploadInProgress && !this.disableCreateWhenFinishBtn) {
192
82
  this.createWhenFinish();
193
83
  }
194
84
  else {
@@ -197,16 +87,17 @@ export class CreateModalComponent extends BaseDialogComponent {
197
87
  }
198
88
  }
199
89
  ngOnInit() {
90
+ this.langSubscription = this.translationService.isArabic.subscribe(res => {
91
+ this.isArabic = res;
92
+ });
200
93
  if (this.uploadMangmentService.uploadFinishSubscription) {
201
94
  this.uploadMangmentService.uploadFinishSubscription.unsubscribe();
202
95
  }
203
- this.uploadMangmentService.uploadFinishSubscription =
204
- this.uploadMangmentService.onUploadFinish.subscribe((res) => {
205
- if (this.createWhenFinishMode ||
206
- this.uploadMangmentService.failedFiles.length > 0) {
207
- this.createDocument();
208
- }
209
- });
96
+ this.uploadMangmentService.uploadFinishSubscription = this.uploadMangmentService.onUploadFinish.subscribe(res => {
97
+ if (this.createWhenFinishMode || this.uploadMangmentService.failedFiles.length > 0) {
98
+ this.createDocument();
99
+ }
100
+ });
210
101
  }
211
102
  initiatfileForm() {
212
103
  if (this.usingExtraFields) {
@@ -232,16 +123,43 @@ export class CreateModalComponent extends BaseDialogComponent {
232
123
  description: ['']
233
124
  });
234
125
  }
235
- this.staticFormFields =
236
- this.appConfService.myConfiguration.staticFormFields;
126
+ this.staticFormFields = this.appConfService.myConfiguration.staticFormFields;
237
127
  }
238
- close() {
128
+ createWhenFinish() {
129
+ this.createWhenFinishMode = true;
130
+ this.minimizDialog();
131
+ }
132
+ closeDialog() {
239
133
  this.uploadMangmentService.GeneralFormValidation = true;
240
134
  this.fileFormSubscription ? this.fileFormSubscription.unsubscribe() : '';
241
135
  this.addingProperties = false;
242
136
  this.uploadMangmentService.resetStatus();
243
- super.close();
244
- return of(null);
137
+ this.dialogRef.close(false);
138
+ }
139
+ startAddingProperties() {
140
+ //if starting from filemnager then i have fixed file type for all attachmetn and single dynaimc form type
141
+ if (this.source === 'fileManger') {
142
+ // this.dynamicFormService.getDynamicForm(this.fileType).subscribe(res => {
143
+ this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.map(file => {
144
+ file['fileType'] = this.source === 'fileManger' ? this.fileType : {};
145
+ file['dynamicForm'] = this.dialogMangmentService.storedDynamicForm;
146
+ file['dynamicData'] = {};
147
+ file['staticFormValid'] = this.usingExtraFields ? false : true;
148
+ file['staticData'] = this.setStaticData(file.title ? file.title : file.name);
149
+ file['generalValidationValid'] = true;
150
+ });
151
+ this.uploadMangmentService.uploadedFilesStatus.allfiles.map(file => {
152
+ file['fileType'] = this.source === 'fileManger' ? this.fileType : {};
153
+ file['dynamicForm'] = this.dialogMangmentService.storedDynamicForm;
154
+ file['dynamicData'] = {};
155
+ file['staticFormValid'] = this.usingExtraFields ? false : true;
156
+ file['staticData'] = this.setStaticData(file.title ? file.title : file.name);
157
+ file['generalValidationValid'] = true;
158
+ });
159
+ // })
160
+ }
161
+ this.addingProperties = true;
162
+ this.uploadMangmentService.addingPropertiesMode = true;
245
163
  }
246
164
  setStaticData(title) {
247
165
  if (this.usingExtraFields) {
@@ -268,36 +186,89 @@ export class CreateModalComponent extends BaseDialogComponent {
268
186
  };
269
187
  }
270
188
  }
189
+ createDocument() {
190
+ var _a, _b;
191
+ this.creating = true;
192
+ this.uploadMangmentService.failedFiles = [];
193
+ this.uploadMangmentService.GeneralFormValidation = this.checkValidation();
194
+ if (this.uploadMangmentService.GeneralFormValidation) {
195
+ let apiCalls = [];
196
+ if (((_a = this.data) === null || _a === void 0 ? void 0 : _a.path.includes('/default-domain/workspaces/DMSWorkspaces')) || ((_b = this.data) === null || _b === void 0 ? void 0 : _b.path.includes('/default-domain/UserWorkspaces/'))) {
197
+ this.constructPayLoadToWorkSpace(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
198
+ this.payloadList.map(payload => {
199
+ apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId, 'DMS.CreateDocumentFromBlob'));
200
+ });
201
+ }
202
+ else {
203
+ this.constructPayLoad(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
204
+ this.payloadList.map(payload => {
205
+ apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId));
206
+ });
207
+ }
208
+ forkJoin(apiCalls).subscribe(response => {
209
+ //console.log(res);
210
+ this.creating = false;
211
+ response.map(singleRes => {
212
+ if (singleRes['status'] && singleRes['status'] === 'failed') {
213
+ this.uploadMangmentService.failedFiles.push(singleRes['originFile']);
214
+ }
215
+ });
216
+ if (this.uploadMangmentService.failedFiles.length > 0) {
217
+ this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.UPLOAD_ERROR');
218
+ this.uploadMangmentService.uploadedFilesStatus.uploadedFiles = [];
219
+ this.selectedFile = null;
220
+ this.uploadMangmentService.uploadedFilesStatus.allfiles = [...this.uploadMangmentService.failedFiles];
221
+ }
222
+ else {
223
+ this.fileMangerService.onRefreshingFileManger.next();
224
+ this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.FILE_CREATED_SUCCE");
225
+ this.dialogRef.close(false);
226
+ this.uploadMangmentService.resetStatus();
227
+ }
228
+ }, error => {
229
+ this.creating = false;
230
+ // console.log(error);
231
+ // this.tosterService.show('error' , 'TOASTER.ERROR' , 'TOASTER.UPLOAD_ERROR');
232
+ // this.closeDialog();
233
+ });
234
+ }
235
+ else {
236
+ this.creating = false;
237
+ }
238
+ }
271
239
  constructPayLoadToWorkSpace(files) {
272
240
  this.payloadList = [];
273
- files.map((file) => {
241
+ files.map(file => {
274
242
  let param = {
275
- fileindex: 0,
276
- fileName: file.staticData.title,
277
- batchid: file.batch.blob['upload-batch'],
278
- description: this.fileForm.controls.description.value
243
+ "fileindex": 0,
244
+ "fileName": file.staticData.title,
245
+ "batchid": file.batch.blob['upload-batch'],
246
+ "description": this.fileForm.controls.description.value
279
247
  };
280
248
  this.payloadList.push({ params: param, originFile: file });
281
249
  });
282
250
  }
251
+ tryAgainCreateDocument() {
252
+ this.uploadMangmentService.uploadFilesMangment(this.uploadMangmentService.failedFiles);
253
+ }
283
254
  constructPayLoad(files) {
284
255
  this.payloadList = [];
285
- files.map((file) => {
256
+ files.map(file => {
286
257
  let props = this.dynamicFormService.constructDynamicFormPayload(file.dynamicData.data ? file.dynamicData.data : {}, file.dynamicForm);
287
258
  let staticFormData = this.mappingStaticData(file.staticData);
288
259
  let param = {
289
- document: {
290
- type: file.fileType.type,
291
- name: file.staticData.title,
292
- properties: Object.assign(Object.assign(Object.assign({}, props), staticFormData), { 'file:content': {
293
- 'upload-batch': file.batch.blob['upload-batch'],
294
- 'upload-fileId': file.batch.blob['upload-fileId'],
295
- 'mime-type': file.type
260
+ "document": {
261
+ "type": file.fileType.type,
262
+ "name": file.staticData.title,
263
+ "properties": Object.assign(Object.assign(Object.assign({}, props), staticFormData), { "file:content": {
264
+ "upload-batch": file.batch.blob['upload-batch'],
265
+ "upload-fileId": file.batch.blob['upload-fileId'],
266
+ "mime-type": file.type
296
267
  } })
297
268
  }
298
269
  };
299
270
  if (file.fileType.documentCode) {
300
- param['documentTypeCode'] = file.fileType.documentCode;
271
+ param["documentTypeCode"] = file.fileType.documentCode;
301
272
  }
302
273
  this.payloadList.push({ params: param, originFile: file });
303
274
  });
@@ -306,13 +277,12 @@ export class CreateModalComponent extends BaseDialogComponent {
306
277
  if (data.gdocumentDate && data.gdocumentDate !== null) {
307
278
  moment.locale('en');
308
279
  data['hdocumentDate'] = this.dateHelperService.gregorianToHijri(data.gdocumentDate, 'iYYYY-iMM-iDD');
309
- data.gdocumentDate =
310
- moment(data.gdocumentDate).format('YYYY-MM-DDT00:00:00.000') + 'Z';
280
+ data.gdocumentDate = (moment(data.gdocumentDate).format("YYYY-MM-DDT00:00:00.000") + "Z");
311
281
  }
312
282
  return this.adapeter.adaptOut(data, this.staticFormFields);
313
283
  }
314
284
  selectFile(file) {
315
- console.log('file in select', file);
285
+ console.log("file in select", file);
316
286
  this.showStaticForm = false;
317
287
  this.agencyNameFilter = undefined;
318
288
  this.countryNameFilter = undefined;
@@ -324,13 +294,8 @@ export class CreateModalComponent extends BaseDialogComponent {
324
294
  this.showRenderer = false;
325
295
  // check if file has properties of adding properties or not then add it to him
326
296
  if (!file.hasOwnProperty('fileType')) {
327
- this.dynamicFormService
328
- .getDynamicForm(this.fileType.documentCode
329
- ? this.fileType.documentCode
330
- : this.fileType.type)
331
- .subscribe((res) => {
332
- file['fileType'] =
333
- this.source === 'fileManger' ? this.fileType : {};
297
+ this.dynamicFormService.getDynamicForm(this.fileType.documentCode ? this.fileType.documentCode : this.fileType.type).subscribe(res => {
298
+ file['fileType'] = this.source === 'fileManger' ? this.fileType : {};
334
299
  file['dynamicForm'] = res;
335
300
  file['dynamicData'] = {};
336
301
  file['staticFormValid'] = this.usingExtraFields ? false : true;
@@ -342,8 +307,7 @@ export class CreateModalComponent extends BaseDialogComponent {
342
307
  }
343
308
  this.fileForm.patchValue(this.selectedFile['staticData']);
344
309
  this.temporaryDyanmicData = {};
345
- this.temporaryDyanmicData = this.selectedFile.dynamicData.data
346
- ? Object.assign({}, this.selectedFile.dynamicData.data) : {};
310
+ this.temporaryDyanmicData = this.selectedFile.dynamicData.data ? Object.assign({}, this.selectedFile.dynamicData.data) : {};
347
311
  setTimeout(() => {
348
312
  this.showRenderer = true;
349
313
  this.showStaticForm = true;
@@ -351,19 +315,12 @@ export class CreateModalComponent extends BaseDialogComponent {
351
315
  //console.log(file);
352
316
  if (!this.fileFormSubscription) {
353
317
  setTimeout(() => {
354
- this.fileFormSubscription =
355
- this.fileForm.valueChanges.subscribe((res) => {
356
- this.selectedFile.staticFormValid = this.fileForm
357
- ? this.fileForm.valid
358
- : false;
359
- this.selectedFile.staticData = this.fileForm
360
- ? this.fileForm.value
361
- : {};
362
- });
318
+ this.fileFormSubscription = this.fileForm.valueChanges.subscribe(res => {
319
+ this.selectedFile.staticFormValid = this.fileForm ? this.fileForm.valid : false;
320
+ this.selectedFile.staticData = this.fileForm ? this.fileForm.value : {};
321
+ });
363
322
  if (this.fileForm.get('agencyCategoryCode')) {
364
- this.agencyCategCodeSubscription = this.fileForm
365
- .get('agencyCategoryCode')
366
- .valueChanges.subscribe((res) => {
323
+ this.agencyCategCodeSubscription = this.fileForm.get('agencyCategoryCode').valueChanges.subscribe(res => {
367
324
  this.fileForm.get('agencyName').setValue(null);
368
325
  this.agencyNameFilter = {
369
326
  category: res
@@ -371,9 +328,7 @@ export class CreateModalComponent extends BaseDialogComponent {
371
328
  });
372
329
  }
373
330
  if (this.fileForm.get('countryCategoryCode')) {
374
- this.countryCategCodeSubscription = this.fileForm
375
- .get('countryCategoryCode')
376
- .valueChanges.subscribe((res) => {
331
+ this.countryCategCodeSubscription = this.fileForm.get('countryCategoryCode').valueChanges.subscribe(res => {
377
332
  this.fileForm.get('countryName').setValue(null);
378
333
  this.countryNameFilter = {
379
334
  category: res
@@ -401,27 +356,19 @@ export class CreateModalComponent extends BaseDialogComponent {
401
356
  };
402
357
  }
403
358
  this.temporaryDyanmicData = {};
404
- this.temporaryDyanmicData = this.selectedFile.dynamicData.data
405
- ? this.selectedFile.dynamicData.data
406
- : {};
359
+ this.temporaryDyanmicData = this.selectedFile.dynamicData.data ? this.selectedFile.dynamicData.data : {};
407
360
  setTimeout(() => {
408
361
  this.showRenderer = true;
409
362
  this.showStaticForm = true;
410
363
  }, 200);
411
364
  if (!this.fileFormSubscription) {
412
365
  setTimeout(() => {
413
- this.fileFormSubscription = this.fileForm.valueChanges.subscribe((res) => {
414
- this.selectedFile.staticFormValid = this.fileForm
415
- ? this.fileForm.valid
416
- : false;
417
- this.selectedFile.staticData = this.fileForm
418
- ? this.fileForm.value
419
- : {};
366
+ this.fileFormSubscription = this.fileForm.valueChanges.subscribe(res => {
367
+ this.selectedFile.staticFormValid = this.fileForm ? this.fileForm.valid : false;
368
+ this.selectedFile.staticData = this.fileForm ? this.fileForm.value : {};
420
369
  });
421
370
  if (this.fileForm.get('agencyCategoryCode')) {
422
- this.agencyCategCodeSubscription = this.fileForm
423
- .get('agencyCategoryCode')
424
- .valueChanges.subscribe((res) => {
371
+ this.agencyCategCodeSubscription = this.fileForm.get('agencyCategoryCode').valueChanges.subscribe(res => {
425
372
  this.fileForm.get('agencyName').setValue(null);
426
373
  this.agencyNameFilter = {
427
374
  category: res
@@ -429,9 +376,7 @@ export class CreateModalComponent extends BaseDialogComponent {
429
376
  });
430
377
  }
431
378
  if (this.fileForm.get('countryCategoryCode')) {
432
- this.countryCategCodeSubscription = this.fileForm
433
- .get('countryCategoryCode')
434
- .valueChanges.subscribe((res) => {
379
+ this.countryCategCodeSubscription = this.fileForm.get('countryCategoryCode').valueChanges.subscribe(res => {
435
380
  this.fileForm.get('countryName').setValue(null);
436
381
  this.countryNameFilter = {
437
382
  category: res
@@ -453,8 +398,11 @@ export class CreateModalComponent extends BaseDialogComponent {
453
398
  this.selectedFile.dynamicData = Object.assign({}, dynamicData);
454
399
  }
455
400
  }
401
+ minimizDialog() {
402
+ this.dialogRef.close(true);
403
+ }
456
404
  removeItem(item, listofFiles) {
457
- const removeIndex = listofFiles.findIndex((file) => file.name === item.name);
405
+ const removeIndex = listofFiles.findIndex(file => file.name === item.name);
458
406
  listofFiles.splice(removeIndex, 1);
459
407
  if (item.name === this.selectedFile.name) {
460
408
  if (this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.length > 0) {
@@ -466,14 +414,32 @@ export class CreateModalComponent extends BaseDialogComponent {
466
414
  // this.selectedFile = null;
467
415
  }
468
416
  }
417
+ ApplyChangesToAll() {
418
+ this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.map(file => {
419
+ let title = file['staticData'] ? file['staticData']['title'] : file.name;
420
+ file['fileType'] = this.selectedFile.fileType;
421
+ file['dynamicForm'] = this.selectedFile.dynamicForm;
422
+ file['dynamicData'] = this.selectedFile.dynamicData;
423
+ file['staticFormValid'] = this.selectedFile.staticFormValid;
424
+ file['staticData'] = Object.assign({}, this.fileForm.value);
425
+ file['staticData']['title'] = title;
426
+ });
427
+ this.uploadMangmentService.uploadedFilesStatus.allfiles.map(file => {
428
+ let title = file['staticData'] ? file['staticData']['title'] : file.name;
429
+ file['fileType'] = this.selectedFile.fileType;
430
+ file['dynamicForm'] = this.selectedFile.dynamicForm;
431
+ file['dynamicData'] = this.selectedFile.dynamicData;
432
+ file['staticFormValid'] = this.selectedFile.staticFormValid;
433
+ file['staticData'] = Object.assign({}, this.fileForm.value);
434
+ file['staticData']['title'] = title;
435
+ });
436
+ }
469
437
  checkValidation() {
470
438
  let validation = true;
471
- this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.forEach((file) => {
439
+ this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.map(file => {
472
440
  var _a, _b;
473
- console.log('file', file);
474
- if (!file.hasOwnProperty('fileType') ||
475
- file['staticFormValid'] === false ||
476
- ((_b = (_a = file.dynamicData) === null || _a === void 0 ? void 0 : _a.originalEvent) === null || _b === void 0 ? void 0 : _b.isValid) === false) {
441
+ console.log("file", file);
442
+ if (!file.hasOwnProperty('fileType') || file['staticFormValid'] === false || ((_b = (_a = file.dynamicData) === null || _a === void 0 ? void 0 : _a.originalEvent) === null || _b === void 0 ? void 0 : _b.isValid) === false) {
477
443
  file['generalValidationValid'] = false;
478
444
  validation = false;
479
445
  }
@@ -481,10 +447,9 @@ export class CreateModalComponent extends BaseDialogComponent {
481
447
  file['generalValidationValid'] = true;
482
448
  }
483
449
  });
484
- this.uploadMangmentService.uploadedFilesStatus.allfiles.map((file) => {
450
+ this.uploadMangmentService.uploadedFilesStatus.allfiles.map(file => {
485
451
  var _a, _b;
486
- if (file['staticFormValid'] === false ||
487
- ((_b = (_a = file.dynamicData) === null || _a === void 0 ? void 0 : _a.originalEvent) === null || _b === void 0 ? void 0 : _b.isValid) === false) {
452
+ if (file['staticFormValid'] === false || ((_b = (_a = file.dynamicData) === null || _a === void 0 ? void 0 : _a.originalEvent) === null || _b === void 0 ? void 0 : _b.isValid) === false) {
488
453
  file['generalValidationValid'] = false;
489
454
  validation = false;
490
455
  }
@@ -496,16 +461,13 @@ export class CreateModalComponent extends BaseDialogComponent {
496
461
  }
497
462
  ngOnDestroy() {
498
463
  this.fileFormSubscription ? this.fileFormSubscription.unsubscribe() : '';
499
- this.countryCategCodeSubscription
500
- ? this.countryCategCodeSubscription.unsubscribe()
501
- : '';
502
- this.agencyCategCodeSubscription
503
- ? this.agencyCategCodeSubscription.unsubscribe()
504
- : '';
464
+ this.langSubscription ? this.langSubscription.unsubscribe() : '';
465
+ this.countryCategCodeSubscription ? this.countryCategCodeSubscription.unsubscribe() : '';
466
+ this.agencyCategCodeSubscription ? this.agencyCategCodeSubscription.unsubscribe() : '';
505
467
  }
506
468
  }
507
- CreateModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreateModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.UploadManagmentService }, { token: i2.DialogMangmentService }, { token: i3.FileManagerService }, { token: i4.CustomToastrService }, { token: i5.FormBuilder }, { token: i6.AdapterService }, { token: i3.FileManagerService }, { token: i7.AppConfigService }, { token: i8.DateHelperService }, { token: i9.UserService }, { token: 'environment' }, { token: i0.Injector }, { token: i10.DynamicFormService }], target: i0.ɵɵFactoryTarget.Component });
508
- CreateModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CreateModalComponent, selector: "app-create-modal", host: { listeners: { "document:keyup.enter": "KeyUpEvent($event)" } }, usesInheritance: true, ngImport: i0, template: "<ndf-nuxeo-dialog dialogTitle=\"{{ 'CREATE.createFile' | translate }}\">\r\n\t<ng-template #contentTemplate>\r\n\t\t<div class=\"relative w-full h-full\">\r\n\t\t\t<div class=\"iner-wrapper\" [ngClass]=\"{ 'd-flex': addingProperties }\">\r\n\t\t\t\t<div\r\n\t\t\t\t\t*ngIf=\"addingProperties\"\r\n\t\t\t\t\tclass=\"properties-section p-3 overflow-x-hidden overflow-y-auto\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"\"\r\n\t\t\t\t\t\t*ngIf=\"selectedFile && source === 'fileManger' && showStaticForm\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class=\"mb-5\">\r\n\t\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t\t{{ 'CREATE.FILE_TYPE' | translate }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"text-base text-gray-900\">\r\n\t\t\t\t\t\t\t\t{{ isArabic ? fileType.arabicText : fileType.englishText }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"file-fields mt-3\" SetRtl>\r\n\t\t\t\t\t\t\t<form [formGroup]=\"fileForm\">\r\n\t\t\t\t\t\t\t\t<!-- -----------------old static form ---------------------- -->\r\n\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"single-field mb-3\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t\t\t\t\t{{ 'CREATE.TITLE' | translate\r\n\t\t\t\t\t\t\t\t\t\t\t}}<span class=\"text-red-500\">*</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"field-style\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"title\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\" {{ 'CREATE.TITLE' | translate }}\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"single-field mb-3\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t\t\t\t\t{{ 'CREATE.DESCRIPTION' | translate }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"field-style\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"description\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\" {{ 'CREATE.DESCRIPTION' | translate }}\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<!-- ---------------------------------- -->\r\n\r\n\t\t\t\t\t\t\t\t<!------------------ new statis form ---------------------------->\r\n\t\t\t\t\t\t\t\t<div *ngIf=\"usingExtraFields\">\r\n\t\t\t\t\t\t\t\t\t<app-dynamic-fields-renderer\r\n\t\t\t\t\t\t\t\t\t\t[form]=\"fileForm\"\r\n\t\t\t\t\t\t\t\t\t\t[agencyNameFilter]=\"agencyNameFilter\"\r\n\t\t\t\t\t\t\t\t\t\t[countryNameFilter]=\"countryNameFilter\"\r\n\t\t\t\t\t\t\t\t\t></app-dynamic-fields-renderer>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</form>\r\n\r\n\t\t\t\t\t\t\t<div class=\"dynamic-part\" *ngIf=\"showRenderer\">\r\n\t\t\t\t\t\t\t\t<app-dynamic-form\r\n\t\t\t\t\t\t\t\t\t[form]=\"selectedFile.dynamicForm\"\r\n\t\t\t\t\t\t\t\t\t[data]=\"temporaryDyanmicData\"\r\n\t\t\t\t\t\t\t\t\t(change)=\"ondynamicFormChange($event)\"\r\n\t\t\t\t\t\t\t\t></app-dynamic-form>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"w-full h-full p-3 flex justify-center items-center text-lg text-gray-900\"\r\n\t\t\t\t\t\t*ngIf=\"!selectedFile\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ 'CREATE.SELECT_TOSTART_ADDING' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"attachment-tab-body overflow-hidden\"\r\n\t\t\t\t\t[ngClass]=\"{ 'attachment-iner-small-body': addingProperties }\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<app-attachments\r\n\t\t\t\t\t\t[multiple]=\"true\"\r\n\t\t\t\t\t\t(onSelectingItem)=\"selectFile($event)\"\r\n\t\t\t\t\t></app-attachments>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div\r\n\t\t\t\tclass=\"w-full text-red-500 text-base text-start px-3\"\r\n\t\t\t\t*ngIf=\"!uploadMangmentService.GeneralFormValidation\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'CREATE.FILL_REQUIRED_FIELD' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<ng-template #actionsTemplate let-dialog=\"dialog\">\r\n\t\t<!-- WAS_IN_FLEX_DIV -->\r\n\t\t<button\r\n\t\t\t*ngIf=\"\r\n\t\t\t\t(uploadMangmentService.uploadedFilesStatus.uploadInProgress ||\r\n\t\t\t\t\tuploadMangmentService.uploadedFilesStatus.uploadedFiles.length > 0) &&\r\n\t\t\t\t!addingProperties\r\n\t\t\t\"\r\n\t\t\t(click)=\"dialog.executeAction(startAddingProperties)\"\r\n\t\t\tclass=\"submission-button\"\r\n\t\t>\r\n\t\t\t{{ 'BUTTONS.ADD_PROPERTIES' | translate }}\r\n\t\t</button>\r\n\t\t<button\r\n\t\t\t*ngIf=\"\r\n\t\t\t\taddingProperties &&\r\n\t\t\t\tuploadMangmentService.uploadedFilesStatus.uploadedFiles.length +\r\n\t\t\t\t\tuploadMangmentService.uploadedFilesStatus.allfiles.length >\r\n\t\t\t\t\t1\r\n\t\t\t\"\r\n\t\t\t(click)=\"dialog.executeAction(ApplyChangesToAll)\"\r\n\t\t\t[disabled]=\"!selectedFile || !selectedFile.staticFormValid\"\r\n\t\t\t[ngClass]=\"{\r\n\t\t\t\t'opacity-30 cursor-not-allowed':\r\n\t\t\t\t\t!selectedFile || !selectedFile.staticFormValid,\r\n\t\t\t\t'cursor-pointer hover:text-white hover:bg-gray-900': !(\r\n\t\t\t\t\t!selectedFile || !selectedFile.staticFormValid\r\n\t\t\t\t)\r\n\t\t\t}\"\r\n\t\t\tclass=\"submission-button mx-2\"\r\n\t\t>\r\n\t\t\t{{ 'BUTTONS.APPLY_TO_ALL' | translate }}\r\n\t\t</button>\r\n\t\t<!-- WAS_IN_FLEX_DIV -->\r\n\r\n\t\t<ng-container\r\n\t\t\t*ngIf=\"\r\n\t\t\t\taddingProperties &&\r\n\t\t\t\t!uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n\t\t\t\tuploadMangmentService.failedFiles.length === 0\r\n\t\t\t\"\r\n\t\t>\r\n\t\t\t<button\r\n\t\t\t\t(click)=\"dialog.executeAction(createDocument)\"\r\n\t\t\t\tclass=\"submission-button relative\"\r\n\t\t\t\t[disabled]=\"creating\"\r\n\t\t\t>\r\n\t\t\t\t<span *ngIf=\"!creating; else loader\">{{\r\n\t\t\t\t\t'BUTTONS.CREATE' | translate\r\n\t\t\t\t}}</span>\r\n\t\t\t</button>\r\n\t\t\t<ng-template #loader>\r\n\t\t\t\t<mat-spinner\r\n\t\t\t\t\t[value]=\"90\"\r\n\t\t\t\t\t[strokeWidth]=\"3\"\r\n\t\t\t\t\toverlay=\"true\"\r\n\t\t\t\t\t[diameter]=\"25\"\r\n\t\t\t\t\tcolor=\"warn\"\r\n\t\t\t\t>\r\n\t\t\t\t</mat-spinner>\r\n\t\t\t</ng-template>\r\n\t\t</ng-container>\r\n\r\n\t\t<button\r\n\t\t\t*ngIf=\"\r\n\t\t\t\taddingProperties &&\r\n\t\t\t\t!uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n\t\t\t\tuploadMangmentService.failedFiles.length > 0\r\n\t\t\t\"\r\n\t\t\t(click)=\"dialog.executeAction(tryAgainCreateDocument)\"\r\n\t\t\tclass=\"submission-button\"\r\n\t\t>\r\n\t\t\t{{ 'BUTTONS.TRY_AGAIN' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button\r\n\t\t\t[disabled]=\"!fileForm?.valid || disableCreateWhenFinishBtn\"\r\n\t\t\t*ngIf=\"\r\n\t\t\t\taddingProperties &&\r\n\t\t\t\tuploadMangmentService.uploadedFilesStatus.uploadInProgress\r\n\t\t\t\"\r\n\t\t\t(click)=\"dialog.executeAction(createWhenFinish)\"\r\n\t\t\tclass=\"submission-button w-44\"\r\n\t\t>\r\n\t\t\t{{ 'BUTTONS.CREATE_WHEN_FINSH' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<!-- WAS_IN_FLEX_DIV -->\r\n\t\t<button\r\n\t\t\tclass=\"cancelation-button mx-2\"\r\n\t\t\t(click)=\"dialog.executeAction(minimizDialog)\"\r\n\t\t\t*ngIf=\"\r\n\t\t\t\tuploadMangmentService.uploadedFilesStatus.uploadInProgress ||\r\n\t\t\t\tuploadMangmentService.uploadedFilesStatus.numberOfUploadedFiles !== 0 ||\r\n\t\t\t\taddingProperties\r\n\t\t\t\"\r\n\t\t>\r\n\t\t\t{{ 'BUTTONS.MINIMIZED' | translate }}\r\n\t\t</button>\r\n\t\t<!-- <button class=\"cancelation-button\" (click)=\" dialog.executeAction(closeDialog)\">\r\n{{ 'BUTTONS.CANCEL' | translate }}\r\n</button> -->\r\n\t</ng-template>\r\n</ndf-nuxeo-dialog>\r\n", styles: [".dynamic-part{margin-left:-15px;margin-right:-15px}.iner-wrapper{height:calc(100% - 70px)}.iner-wrapper .properties-section{width:calc(100% - 270px);height:calc(100% - 15px)}.iner-wrapper .attachment-tab-body{height:calc(100% - -20px);overflow-y:auto;overflow-x:hidden}.iner-wrapper .attachment-iner-small-body{width:350px}.rtl .actions-iner-wrapper{direction:ltr}.actions-iner-wrapper{direction:rtl}:host{height:100%;display:block}\n"], components: [{ type: i11.NdfNuxeoDialog, selector: "ndf-nuxeo-dialog", inputs: ["dialogTitle", "subTitle", "loaderMode"] }, { type: i12.DynamicFieldsRendererComponent, selector: "app-dynamic-fields-renderer", inputs: ["form", "agencyNameFilter", "countryNameFilter", "mode", "fields"] }, { type: i13.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }, { type: i14.AttachmentsComponent, selector: "app-attachments", inputs: ["allowedTypes", "params", "path", "maxSize", "docParams", "multiple", "createDocument", "allowedMaxNumberOfFiles", "source"], outputs: ["uploadSuccess", "uploadError", "onSelectingItem", "itemRemoved"] }, { type: i15.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i16.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.SetRtlDirective, selector: "[SetRtl]" }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i18.TranslatePipe } });
469
+ CreateModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreateModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.UploadManagmentService }, { token: i3.DialogMangmentService }, { token: i4.FileManagerService }, { token: i5.CustomToastrService }, { token: i6.FormBuilder }, { token: i7.AdapterService }, { token: i4.FileManagerService }, { token: i8.AppConfigService }, { token: i9.DateHelperService }, { token: i10.TranslationService }, { token: i11.UserService }, { token: i12.NuxeoService }, { token: 'environment' }, { token: i13.DynamicFormService }], target: i0.ɵɵFactoryTarget.Component });
470
+ CreateModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CreateModalComponent, selector: "app-create-modal", host: { listeners: { "document:keyup.enter": "KeyUpEvent($event)" } }, ngImport: i0, template: "<div class=\"relative w-full h-full\">\r\n <div class=\"iner-wrapper\" [ngClass]=\"{ 'd-flex': addingProperties }\">\r\n <div *ngIf=\"addingProperties\" class=\"properties-section p-3 overflow-x-hidden overflow-y-auto\">\r\n <div class=\"\" *ngIf=\"selectedFile && source === 'fileManger' && showStaticForm\">\r\n <div class=\"mb-5\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.FILE_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-base text-gray-900\">{{ isArabic ? fileType.arabicText : fileType.englishText }}\r\n </div>\r\n </div>\r\n <div class=\"file-fields mt-3\" SetRtl>\r\n <form [formGroup]=\"fileForm\">\r\n <!-- -----------------old static form ---------------------- -->\r\n <div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.TITLE\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input class=\"\r\n field-style\r\n \" formControlName=\"title\" placeholder=\" {{ 'CREATE.TITLE' | translate}}\" />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DESCRIPTION\" | translate }}\r\n </div>\r\n <input class=\"field-style\" formControlName=\"description\"\r\n placeholder=\" {{ 'CREATE.DESCRIPTION' | translate}}\" />\r\n </div>\r\n </div>\r\n <!-- ---------------------------------- -->\r\n\r\n <!------------------ new statis form ---------------------------->\r\n <div *ngIf=\"usingExtraFields\">\r\n <app-dynamic-fields-renderer [form]=\"fileForm\" [agencyNameFilter]=\"agencyNameFilter\"\r\n [countryNameFilter]=\"countryNameFilter\"></app-dynamic-fields-renderer>\r\n </div>\r\n </form>\r\n\r\n <div class=\"dynamic-part\" *ngIf=\"showRenderer\">\r\n <app-dynamic-form [form]=\"selectedFile.dynamicForm\" [data]=\"temporaryDyanmicData\"\r\n (change)=\"ondynamicFormChange($event)\"></app-dynamic-form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"\r\n w-full\r\n h-full\r\n p-3\r\n flex\r\n justify-center\r\n items-center\r\n text-lg text-gray-900\"\r\n *ngIf=\"!selectedFile\">\r\n {{ \"CREATE.SELECT_TOSTART_ADDING\" | translate }}\r\n </div>\r\n \r\n </div>\r\n <div class=\"attachment-tab-body overflow-hidden\" [ngClass]=\"{ 'attachment-iner-small-body': addingProperties }\">\r\n <app-attachments [multiple]=\"true\" (onSelectingItem)=\"selectFile($event)\"></app-attachments>\r\n </div>\r\n </div>\r\n <div class=\"w-full text-red-500 text-base text-start px-3\" *ngIf=\"!uploadMangmentService.GeneralFormValidation\">\r\n\r\n {{ \"CREATE.FILL_REQUIRED_FIELD\" | translate }}\r\n </div>\r\n <div class=\"actions-iner-wrapper w-full flex justify-between items-center absolute bottom-0\">\r\n <div class=\"flex\">\r\n <button *ngIf=\"\r\n (uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus.uploadedFiles\r\n .length > 0) &&\r\n !addingProperties\r\n \" (click)=\"startAddingProperties()\" class=\"submission-button\">\r\n {{ \"BUTTONS.ADD_PROPERTIES\" | translate }}\r\n </button>\r\n <button *ngIf=\"\r\n addingProperties &&\r\n uploadMangmentService.uploadedFilesStatus.uploadedFiles\r\n .length +\r\n uploadMangmentService.uploadedFilesStatus.allfiles\r\n .length >\r\n 1\r\n \" (click)=\"ApplyChangesToAll()\" [disabled]=\"!selectedFile || !selectedFile.staticFormValid\" [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed':\r\n !selectedFile || !selectedFile.staticFormValid,\r\n 'cursor-pointer hover:text-white hover:bg-gray-900': !(\r\n !selectedFile || !selectedFile.staticFormValid\r\n )\r\n }\" class=\"submission-button mx-2\">\r\n {{ \"BUTTONS.APPLY_TO_ALL\" | translate }}\r\n </button>\r\n\r\n <ng-container *ngIf=\"\r\n addingProperties &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n uploadMangmentService.failedFiles.length === 0\r\n \">\r\n <button (click)=\"createDocument()\" class=\"submission-button relative\" [disabled]=\"creating\">\r\n <span *ngIf=\"!creating; else loader\">{{ \"BUTTONS.CREATE\" | translate }}</span>\r\n </button>\r\n <ng-template #loader>\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"3\" overlay=\"true\" [diameter]=\"25\" color=\"warn\">\r\n </mat-spinner>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button *ngIf=\"\r\n addingProperties &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n uploadMangmentService.failedFiles.length > 0\r\n \" (click)=\"tryAgainCreateDocument()\" class=\"submission-button\">\r\n {{ \"BUTTONS.TRY_AGAIN\" | translate }}\r\n </button>\r\n\r\n <button [disabled]=\"!fileForm?.valid || disableCreateWhenFinishBtn\" *ngIf=\"\r\n addingProperties &&\r\n uploadMangmentService.uploadedFilesStatus.uploadInProgress\r\n \" (click)=\"createWhenFinish()\" class=\"submission-button w-44\">\r\n {{ \"BUTTONS.CREATE_WHEN_FINSH\" | translate }}\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <button class=\"cancelation-button mx-2\" (click)=\"minimizDialog()\" *ngIf=\"\r\n uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus\r\n .numberOfUploadedFiles !== 0 ||\r\n addingProperties\r\n \">\r\n {{ \"BUTTONS.MINIMIZED\" | translate }}\r\n </button>\r\n <button class=\"cancelation-button\" (click)=\"closeDialog()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dynamic-part{margin-left:-15px;margin-right:-15px}.iner-wrapper{height:calc(100% - 70px)}.iner-wrapper .properties-section{width:calc(100% - 270px);height:calc(100% - 15px)}.iner-wrapper .attachment-tab-body{height:calc(100% - -20px);overflow-y:auto;overflow-x:hidden}.iner-wrapper .attachment-iner-small-body{width:350px}.rtl .actions-iner-wrapper{direction:ltr}.actions-iner-wrapper{direction:rtl}\n"], components: [{ type: i14.DynamicFieldsRendererComponent, selector: "app-dynamic-fields-renderer", inputs: ["form", "agencyNameFilter", "countryNameFilter", "mode", "fields"] }, { type: i15.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }, { type: i16.AttachmentsComponent, selector: "app-attachments", inputs: ["allowedTypes", "params", "path", "maxSize", "docParams", "multiple", "createDocument", "allowedMaxNumberOfFiles", "source"], outputs: ["uploadSuccess", "uploadError", "onSelectingItem", "itemRemoved"] }, { type: i17.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i18.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.SetRtlDirective, selector: "[SetRtl]" }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i20.TranslatePipe } });
509
471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreateModalComponent, decorators: [{
510
472
  type: Component,
511
473
  args: [{
@@ -516,11 +478,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
516
478
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
517
479
  type: Inject,
518
480
  args: [MAT_DIALOG_DATA]
519
- }] }, { type: i1.UploadManagmentService }, { type: i2.DialogMangmentService }, { type: i3.FileManagerService }, { type: i4.CustomToastrService }, { type: i5.FormBuilder }, { type: i6.AdapterService }, { type: i3.FileManagerService }, { type: i7.AppConfigService }, { type: i8.DateHelperService }, { type: i9.UserService }, { type: undefined, decorators: [{
481
+ }] }, { type: i1.MatDialogRef }, { type: i2.UploadManagmentService }, { type: i3.DialogMangmentService }, { type: i4.FileManagerService }, { type: i5.CustomToastrService }, { type: i6.FormBuilder }, { type: i7.AdapterService }, { type: i4.FileManagerService }, { type: i8.AppConfigService }, { type: i9.DateHelperService }, { type: i10.TranslationService }, { type: i11.UserService }, { type: i12.NuxeoService }, { type: undefined, decorators: [{
520
482
  type: Inject,
521
483
  args: ['environment']
522
- }] }, { type: i0.Injector }, { type: i10.DynamicFormService }]; }, propDecorators: { KeyUpEvent: [{
484
+ }] }, { type: i13.DynamicFormService }]; }, propDecorators: { KeyUpEvent: [{
523
485
  type: HostListener,
524
486
  args: ['document:keyup.enter', ['$event']]
525
487
  }] } });
526
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU0zRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFLbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFL0YsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9yQyxNQUFNLE9BQU8sb0JBQ1osU0FBUSxtQkFBbUQ7SUE2QzNELFlBQ2lDLElBQUksRUFDN0IscUJBQTZDLEVBQzdDLHFCQUE0QyxFQUMzQyxpQkFBcUMsRUFDckMsYUFBa0MsRUFDbkMsV0FBd0IsRUFDdkIsUUFBd0IsRUFDeEIsa0JBQXNDLEVBQ3RDLGNBQWdDLEVBQ2hDLGlCQUFvQyxFQUNw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SkM5QmpDLDB5T0FxTUE7NEZEdkthLG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsK0JBQStCO29CQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztpQkFDNUM7OzBCQWdERSxNQUFNOzJCQUFDLGVBQWU7OzBCQVd0QixNQUFNOzJCQUFDLGFBQWE7cUdBM0J0QixVQUFVO3NCQURULFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0SW5qZWN0LFxyXG5cdEluamVjdG9yLFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVXBsb2FkTWFuYWdtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtbWFuYWdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dNYW5nbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0ZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zZXJ2aWNlcy9kYXRlLWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2FkYXB0ZXJzL2FkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uL2FwcC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9iYXNlL2Jhc2UtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERpYWxvZ0FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9udXhlby1kaWFsb2cvbW9kZWxzL2RpYWxvZy1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1jcmVhdGUtbW9kYWwnLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2NyZWF0ZS1tb2RhbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVNb2RhbENvbXBvbmVudFxyXG5cdGV4dGVuZHMgQmFzZURpYWxvZ0NvbXBvbmVudDxDcmVhdGVNb2RhbENvbXBvbmVudCwgYW55LCBhbnk+XHJcblx0aW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcblx0YWRkaW5nUHJvcGVydGllcyA9IGZhbHNlO1xyXG5cdGZpbGVUeXBlRm9ybTogRm9ybUdyb3VwO1xyXG5cdGR5bmFtaWNGb3JtO1xyXG5cdGR5bmFtaWNEYXRhO1xyXG5cdHNlbGVjdGVkRmlsZTtcclxuXHRmaWxlVHlwZTtcclxuXHRzb3VyY2U7XHJcblx0cGF5bG9hZExpc3QgPSBbXTtcclxuXHRjcmVhdGVXaGVuRmluaXNoTW9kZSA9IGZhbHNlO1xyXG5cdGZpbGVGb3JtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblx0Y291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdGFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdHRlbXBvcmFyeUR5YW5taWNEYXRhO1xyXG5cdHNob3dSZW5kZXJlciA9IGZhbHNlOyAvLyB1c2VkIHRvIGZvcmNlIHJlbmRlcmVyIHRvIGZlZWwgY2hhbmdlcyBpbiBmb3JtcyBhbmQgdmFsdWUgd2hlbiBjaGFuZ2luZyBmaWxlc1xyXG5cdC8vIHVwbG9hZEZpbmlzaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdHVzaW5nRXh0cmFGaWVsZHMgPSBmYWxzZTsgLy8gZmxhZ2UgdG8gc3dpdGNoIGJldHdlZW4gc3RhdGljIGZvcm0gdHlwZXNcclxuXHJcblx0ZmlsZUZvcm06IEZvcm1Hcm91cDtcclxuXHRzdGF0aWNGb3JtRmllbGRzO1xyXG5cdGFnZW5jeU5hbWVGaWx0ZXI7XHJcblx0Y291bnRyeU5hbWVGaWx0ZXI7XHJcblx0c2hvd1N0YXRpY0Zvcm0gPSBmYWxzZTtcclxuXHRkaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0biA9IHRydWU7XHJcblx0Y3JlYXRpbmcgPSBmYWxzZTtcclxuXHRkaXNwbGF5Tm90ZU1lc3NhZ2UgPSB0cnVlO1xyXG5cdG15RW52aXJvbm1lbnQ7XHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZW50ZXInLCBbJyRldmVudCddKVxyXG5cdEtleVVwRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5hZGRpbmdQcm9wZXJ0aWVzICYmXHJcblx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA9PT0gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuXHRcdFx0XHQhdGhpcy5kaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0blxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0aGlzLmNyZWF0ZVdoZW5GaW5pc2goKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNyZWF0ZURvY3VtZW50KCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcblx0XHRwdWJsaWMgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlOiBVcGxvYWRNYW5hZ21lbnRTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGRpYWxvZ01hbmdtZW50U2VydmljZTogRGlhbG9nTWFuZ21lbnRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBmaWxlTWFuZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuXHRcdHByaXZhdGUgYWRhcGV0ZXI6IEFkYXB0ZXJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBmaWxlTWFuYWdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZSxcclxuXHRcdHByaXZhdGUgYXBwQ29uZlNlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRhdGVIZWxwZXJTZXJ2aWNlOiBEYXRlSGVscGVyU2VydmljZSxcclxuXHRcdHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG5cdFx0QEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50LFxyXG5cdFx0aW5qZWN0b3I6IEluamVjdG9yLFxyXG5cdFx0cHJpdmF0ZSBkeW5hbWljRm9ybVNlcnZpY2U6IER5bmFtaWNGb3JtU2VydmljZVxyXG5cdCkge1xyXG5cdFx0c3VwZXIoaW5qZWN0b3IpO1xyXG5cdFx0dGhpcy5teUVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudDtcclxuXHJcblx0XHR0aGlzLmNyZWF0ZVdoZW5GaW5pc2hNb2RlID0gZmFsc2U7XHJcblx0XHR0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5hZGRpbmdQcm9wZXJ0aWVzTW9kZTtcclxuXHRcdHRoaXMuZmlsZVR5cGUgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5maWxlVHlwZTsgLy8gb2JqZWN0IHRoYXQgd2FzIGNvbnN0cnVjdGVkIGluc2lkZSBzdWJ0eXBlcyBzZXJ2aWNlXHJcblx0XHR0aGlzLnNvdXJjZSA9IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLmFkZGluZ0Zyb207XHJcblx0XHR0aGlzLmZpbGVNYW5hZ2VyU2VydmljZVxyXG5cdFx0XHQuZ2V0RmlsZVNjaGVtYXModGhpcy5maWxlVHlwZS50eXBlKVxyXG5cdFx0XHQuc3Vic2NyaWJlKChzY2hlbWFzKSA9PiB7XHJcblx0XHRcdFx0c2NoZW1hcy5tYXAoKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdGlmIChpdGVtLm5hbWUgPT09ICdnZW5lcmFsZG9jdW1lbnQnKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMudXNpbmdFeHRyYUZpZWxkcyA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy5pbml0aWF0ZmlsZUZvcm0oKTtcclxuXHRcdFx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5nZXR0aW5nUHJvcEZyb21Nb2RhbCh7XHJcblx0XHRcdFx0XHRmaWxlVHlwZTogdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fSxcclxuXHRcdFx0XHRcdGR5bmFtaWNGb3JtOiB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5zdG9yZWREeW5hbWljRm9ybSxcclxuXHRcdFx0XHRcdGR5bmFtaWNEYXRhOiB7fSxcclxuXHRcdFx0XHRcdHN0YXRpY0Zvcm1WYWxpZDogdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlLFxyXG5cdFx0XHRcdFx0Z2VuZXJhbFZhbGlkYXRpb25WYWxpZDogdHJ1ZSxcclxuXHRcdFx0XHRcdHVzaW5nRXh0cmFGaWVsZHM6IHRoaXMudXNpbmdFeHRyYUZpZWxkcyxcclxuXHRcdFx0XHRcdHBhdGg6IHRoaXMuZGF0YS5wYXRoXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbmlzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uID1cclxuXHRcdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2Uub25VcGxvYWRGaW5pc2guc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVdoZW5GaW5pc2hNb2RlIHx8XHJcblx0XHRcdFx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5sZW5ndGggPiAwXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZURvY3VtZW50KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXRpYXRmaWxlRm9ybSgpIHtcclxuXHRcdGlmICh0aGlzLnVzaW5nRXh0cmFGaWVsZHMpIHtcclxuXHRcdFx0dGhpcy5maWxlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG5cdFx0XHRcdHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcblx0XHRcdFx0ZGVzY3JpcHRpb246IFsnJ10sXHJcblx0XHRcdFx0c3ViamVjdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG5cdFx0XHRcdGRvY3VtZW50TnVtYmVyOiBbJyddLFxyXG5cdFx0XHRcdGdkb2N1bWVudERhdGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG5cdFx0XHRcdHNlY3JlY3lMZXZlbDogW251bGxdLFxyXG5cdFx0XHRcdGltcG9ydGFuY2VMZXZlbDogW251bGxdLFxyXG5cdFx0XHRcdGRlcGFydG1lbnRDb2RlOiBbJyddLFxyXG5cdFx0XHRcdGFnZW5jeUNhdGVnb3J5Q29kZTogW251bGxdLFxyXG5cdFx0XHRcdGFnZW5jeU5hbWU6IFtudWxsXSxcclxuXHRcdFx0XHRjb3VudHJ5Q2F0ZWdvcnlDb2RlOiBbbnVsbF0sXHJcblx0XHRcdFx0Y291bnRyeU5hbWU6IFtudWxsXSxcclxuXHRcdFx0XHRyZW1hcmtzOiBbJyddXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5maWxlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG5cdFx0XHRcdHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcblx0XHRcdFx0ZGVzY3JpcHRpb246IFsnJ11cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnN0YXRpY0Zvcm1GaWVsZHMgPVxyXG5cdFx0XHR0aGlzLmFwcENvbmZTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5zdGF0aWNGb3JtRmllbGRzO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlV2hlbkZpbmlzaDogRGlhbG9nQWN0aW9uVHlwZSA9ICgpID0+IHtcclxuXHRcdHRoaXMuY3JlYXRlV2hlbkZpbmlzaE1vZGUgPSB0cnVlO1xyXG5cdFx0cmV0dXJuIHRoaXMubWluaW1pekRpYWxvZygpO1xyXG5cdH07XHJcblxyXG5cdGNsb3NlKCkge1xyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uID0gdHJ1ZTtcclxuXHRcdHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPyB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuXHRcdHRoaXMuYWRkaW5nUHJvcGVydGllcyA9IGZhbHNlO1xyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UucmVzZXRTdGF0dXMoKTtcclxuXHRcdHN1cGVyLmNsb3NlKCk7XHJcblx0XHRyZXR1cm4gb2YobnVsbCk7XHJcblx0fVxyXG5cclxuXHRzdGFydEFkZGluZ1Byb3BlcnRpZXMgPSAoKSA9PiB7XHJcblx0XHQvL2lmIHN0YXJ0aW5nIGZyb20gZmlsZW1uYWdlciB0aGVuIGkgaGF2ZSBmaXhlZCBmaWxlIHR5cGUgZm9yIGFsbCBhdHRhY2htZXRuIGFuZCBzaW5nbGUgZHluYWltYyBmb3JtICB0eXBlXHJcblx0XHRpZiAodGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJykge1xyXG5cdFx0XHQvLyB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5nZXREeW5hbWljRm9ybSh0aGlzLmZpbGVUeXBlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuXHJcblx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5mb3JFYWNoKFxyXG5cdFx0XHRcdChmaWxlKSA9PiB7XHJcblx0XHRcdFx0XHRmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fTtcclxuXHRcdFx0XHRcdGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5zdG9yZWREeW5hbWljRm9ybTtcclxuXHRcdFx0XHRcdGZpbGVbJ2R5bmFtaWNEYXRhJ10gPSB7fTtcclxuXHRcdFx0XHRcdGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG5cdFx0XHRcdFx0ZmlsZVsnc3RhdGljRGF0YSddID0gdGhpcy5zZXRTdGF0aWNEYXRhKFxyXG5cdFx0XHRcdFx0XHRmaWxlLnRpdGxlID8gZmlsZS50aXRsZSA6IGZpbGUubmFtZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzLmZvckVhY2goXHJcblx0XHRcdFx0KGZpbGUpID0+IHtcclxuXHRcdFx0XHRcdGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9O1xyXG5cdFx0XHRcdFx0ZmlsZVsnZHluYW1pY0Zvcm0nXSA9IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLnN0b3JlZER5bmFtaWNGb3JtO1xyXG5cdFx0XHRcdFx0ZmlsZVsnZHluYW1pY0RhdGEnXSA9IHt9O1xyXG5cdFx0XHRcdFx0ZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPSB0aGlzLnVzaW5nRXh0cmFGaWVsZHMgPyBmYWxzZSA6IHRydWU7XHJcblx0XHRcdFx0XHRmaWxlWydzdGF0aWNEYXRhJ10gPSB0aGlzLnNldFN0YXRpY0RhdGEoXHJcblx0XHRcdFx0XHRcdGZpbGUudGl0bGUgPyBmaWxlLnRpdGxlIDogZmlsZS5uYW1lXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0ZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSB0cnVlO1xyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGUgPSB0cnVlO1xyXG5cdH07XHJcblxyXG5cdHNldFN0YXRpY0RhdGEodGl0bGUpIHtcclxuXHRcdGlmICh0aGlzLnVzaW5nRXh0cmFGaWVsZHMpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0aXRsZTogdGl0bGUsXHJcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxyXG5cdFx0XHRcdHN1YmplY3Q6ICcnLFxyXG5cdFx0XHRcdGRvY3VtZW50TnVtYmVyOiAnJyxcclxuXHRcdFx0XHRnZG9jdW1lbnREYXRlOiBudWxsLFxyXG5cdFx0XHRcdHNlY3JlY3lMZXZlbDogdGhpcy5kYXRhLm91dGVyRGVmYXVsdFNlY3JlY3kgfHwgbnVsbCxcclxuXHRcdFx0XHRpbXBvcnRhbmNlTGV2ZWw6IHRoaXMuZGF0YS5vdXRlckRlZmF1bHRJbXBvcnRhbmNlIHx8IG51bGwsXHJcblx0XHRcdFx0ZGVwYXJ0bWVudENvZGU6IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRlcGFydG1lbnRGcm9tUGF0aChcclxuXHRcdFx0XHRcdHRoaXMuZGF0YS5wYXRoXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRhZ2VuY3lDYXRlZ29yeUNvZGU6IG51bGwsXHJcblx0XHRcdFx0YWdlbmN5TmFtZTogbnVsbCxcclxuXHRcdFx0XHRjb3VudHJ5Q2F0ZWdvcnlDb2RlOiBudWxsLFxyXG5cdFx0XHRcdGNvdW50cnlOYW1lOiBudWxsLFxyXG5cdFx0XHRcdHJlbWFya3M6ICcnXHJcblx0XHRcdH07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRpdGxlOiB0aXRsZSxcclxuXHRcdFx0XHRkZXNjcmlwdGlvbjogJydcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNyZWF0ZURvY3VtZW50OiBEaWFsb2dBY3Rpb25UeXBlID0gKCkgPT4ge1xyXG5cdFx0dGhpcy5jcmVhdGluZyA9IHRydWU7XHJcblx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcyA9IFtdO1xyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uID0gdGhpcy5jaGVja1ZhbGlkYXRpb24oKTtcclxuXHRcdGlmICh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5HZW5lcmFsRm9ybVZhbGlkYXRpb24pIHtcclxuXHRcdFx0bGV0IGFwaUNhbGxzID0gW107XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLmRhdGE/LnBhdGguaW5jbHVkZXMoJy9kZWZhdWx0LWRvbWFpbi93b3Jrc3BhY2VzL0RNU1dvcmtzcGFjZXMnKSB8fFxyXG5cdFx0XHRcdHRoaXMuZGF0YT8ucGF0aC5pbmNsdWRlcygnL2RlZmF1bHQtZG9tYWluL1VzZXJXb3Jrc3BhY2VzLycpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRoaXMuY29uc3RydWN0UGF5TG9hZFRvV29ya1NwYWNlKFxyXG5cdFx0XHRcdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHR0aGlzLnBheWxvYWRMaXN0LmZvckVhY2goKHBheWxvYWQpID0+IHtcclxuXHRcdFx0XHRcdGFwaUNhbGxzLnB1c2goXHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsZU1hbmdlclNlcnZpY2UuY3JlYXRlRmlsZShcclxuXHRcdFx0XHRcdFx0XHRwYXlsb2FkLFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLnNlbGVjdGVkRm9sZGVySWQsXHJcblx0XHRcdFx0XHRcdFx0J0RNUy5DcmVhdGVEb2N1bWVudEZyb21CbG9iJ1xyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uc3RydWN0UGF5TG9hZChcclxuXHRcdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0dGhpcy5wYXlsb2FkTGlzdC5mb3JFYWNoKChwYXlsb2FkKSA9PiB7XHJcblx0XHRcdFx0XHRhcGlDYWxscy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLmNyZWF0ZUZpbGUoXHJcblx0XHRcdFx0XHRcdFx0cGF5bG9hZCxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmb3JrSm9pbihhcGlDYWxscykucGlwZShcclxuXHRcdFx0XHR0YXAoXHJcblx0XHRcdFx0XHQocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mb3JFYWNoKChzaW5nbGVSZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoc2luZ2xlUmVzWydzdGF0dXMnXSAmJiBzaW5nbGVSZXNbJ3N0YXR1cyddID09PSAnZmFpbGVkJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMucHVzaChcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlUmVzWydvcmlnaW5GaWxlJ11cclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FUlJPUicsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5VUExPQURfRVJST1InXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlcyA9IFtcclxuXHRcdFx0XHRcdFx0XHRcdC4uLnRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzXHJcblx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLm9uUmVmcmVzaGluZ0ZpbGVNYW5nZXIubmV4dCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5GSUxFX0NSRUFURURfU1VDQ0UnXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRzdXBlci5jbG9zZShmYWxzZSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UucmVzZXRTdGF0dXMoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNyZWF0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0UGF5TG9hZFRvV29ya1NwYWNlKGZpbGVzKSB7XHJcblx0XHR0aGlzLnBheWxvYWRMaXN0ID0gW107XHJcblx0XHRmaWxlcy5tYXAoKGZpbGUpID0+IHtcclxuXHRcdFx0bGV0IHBhcmFtID0ge1xyXG5cdFx0XHRcdGZpbGVpbmRleDogMCxcclxuXHRcdFx0XHRmaWxlTmFtZTogZmlsZS5zdGF0aWNEYXRhLnRpdGxlLFxyXG5cdFx0XHRcdGJhdGNoaWQ6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWJhdGNoJ10sXHJcblx0XHRcdFx0ZGVzY3JpcHRpb246IHRoaXMuZmlsZUZvcm0uY29udHJvbHMuZGVzY3JpcHRpb24udmFsdWVcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy5wYXlsb2FkTGlzdC5wdXNoKHsgcGFyYW1zOiBwYXJhbSwgb3JpZ2luRmlsZTogZmlsZSB9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0dHJ5QWdhaW5DcmVhdGVEb2N1bWVudDogRGlhbG9nQWN0aW9uVHlwZSA9ICgpID0+IHtcclxuXHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbGVzTWFuZ21lbnQoXHJcblx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzXHJcblx0XHQpO1xyXG5cdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdH07XHJcblxyXG5cdGNvbnN0cnVjdFBheUxvYWQoZmlsZXMpIHtcclxuXHRcdHRoaXMucGF5bG9hZExpc3QgPSBbXTtcclxuXHRcdGZpbGVzLm1hcCgoZmlsZSkgPT4ge1xyXG5cdFx0XHRsZXQgcHJvcHMgPSB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoXHJcblx0XHRcdFx0ZmlsZS5keW5hbWljRGF0YS5kYXRhID8gZmlsZS5keW5hbWljRGF0YS5kYXRhIDoge30sXHJcblx0XHRcdFx0ZmlsZS5keW5hbWljRm9ybVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgc3RhdGljRm9ybURhdGEgPSB0aGlzLm1hcHBpbmdTdGF0aWNEYXRhKGZpbGUuc3RhdGljRGF0YSk7XHJcblx0XHRcdGxldCBwYXJhbSA9IHtcclxuXHRcdFx0XHRkb2N1bWVudDoge1xyXG5cdFx0XHRcdFx0dHlwZTogZmlsZS5maWxlVHlwZS50eXBlLFxyXG5cdFx0XHRcdFx0bmFtZTogZmlsZS5zdGF0aWNEYXRhLnRpdGxlLFxyXG5cdFx0XHRcdFx0cHJvcGVydGllczoge1xyXG5cdFx0XHRcdFx0XHQuLi5wcm9wcyxcclxuXHRcdFx0XHRcdFx0Li4uc3RhdGljRm9ybURhdGEsXHJcblx0XHRcdFx0XHRcdCdmaWxlOmNvbnRlbnQnOiB7XHJcblx0XHRcdFx0XHRcdFx0J3VwbG9hZC1iYXRjaCc6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWJhdGNoJ10sXHJcblx0XHRcdFx0XHRcdFx0J3VwbG9hZC1maWxlSWQnOiBmaWxlLmJhdGNoLmJsb2JbJ3VwbG9hZC1maWxlSWQnXSxcclxuXHRcdFx0XHRcdFx0XHQnbWltZS10eXBlJzogZmlsZS50eXBlXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHRcdGlmIChmaWxlLmZpbGVUeXBlLmRvY3VtZW50Q29kZSkge1xyXG5cdFx0XHRcdHBhcmFtWydkb2N1bWVudFR5cGVDb2RlJ10gPSBmaWxlLmZpbGVUeXBlLmRvY3VtZW50Q29kZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnBheWxvYWRMaXN0LnB1c2goeyBwYXJhbXM6IHBhcmFtLCBvcmlnaW5GaWxlOiBmaWxlIH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRtYXBwaW5nU3RhdGljRGF0YShkYXRhKSB7XHJcblx0XHRpZiAoZGF0YS5nZG9jdW1lbnREYXRlICYmIGRhdGEuZ2RvY3VtZW50RGF0ZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRtb21lbnQubG9jYWxlKCdlbicpO1xyXG5cdFx0XHRkYXRhWydoZG9jdW1lbnREYXRlJ10gPSB0aGlzLmRhdGVIZWxwZXJTZXJ2aWNlLmdyZWdvcmlhblRvSGlqcmkoXHJcblx0XHRcdFx0ZGF0YS5nZG9jdW1lbnREYXRlLFxyXG5cdFx0XHRcdCdpWVlZWS1pTU0taUREJ1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRkYXRhLmdkb2N1bWVudERhdGUgPVxyXG5cdFx0XHRcdG1vbWVudChkYXRhLmdkb2N1bWVudERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERFQwMDowMDowMC4wMDAnKSArICdaJztcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLmFkYXBldGVyLmFkYXB0T3V0KGRhdGEsIHRoaXMuc3RhdGljRm9ybUZpZWxkcyk7XHJcblx0fVxyXG5cclxuXHRzZWxlY3RGaWxlKGZpbGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKCdmaWxlIGluIHNlbGVjdCcsIGZpbGUpO1xyXG5cdFx0dGhpcy5zaG93U3RhdGljRm9ybSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHVuZGVmaW5lZDtcclxuXHRcdC8vY29uc29sZS5sb2coZmlsZSk7XHJcblx0XHRpZiAoIXRoaXMuYWRkaW5nUHJvcGVydGllcykge1xyXG5cdFx0XHR0aGlzLnN0YXJ0QWRkaW5nUHJvcGVydGllcygpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuYWRkaW5nUHJvcGVydGllcykge1xyXG5cdFx0XHR0aGlzLnNob3dSZW5kZXJlciA9IGZhbHNlO1xyXG5cdFx0XHQvLyBjaGVjayBpZiBmaWxlIGhhcyBwcm9wZXJ0aWVzIG9mIGFkZGluZyBwcm9wZXJ0aWVzIG9yIG5vdCB0aGVuIGFkZCBpdCB0byBoaW1cclxuXHRcdFx0aWYgKCFmaWxlLmhhc093blByb3BlcnR5KCdmaWxlVHlwZScpKSB7XHJcblx0XHRcdFx0dGhpcy5keW5hbWljRm9ybVNlcnZpY2VcclxuXHRcdFx0XHRcdC5nZXREeW5hbWljRm9ybShcclxuXHRcdFx0XHRcdFx0dGhpcy5maWxlVHlwZS5kb2N1bWVudENvZGVcclxuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuZmlsZVR5cGUuZG9jdW1lbnRDb2RlXHJcblx0XHRcdFx0XHRcdFx0OiB0aGlzLmZpbGVUeXBlLnR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRmaWxlWydmaWxlVHlwZSddID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9O1xyXG5cdFx0XHRcdFx0XHRmaWxlWydkeW5hbWljRm9ybSddID0gcmVzO1xyXG5cdFx0XHRcdFx0XHRmaWxlWydkeW5hbWljRGF0YSddID0ge307XHJcblx0XHRcdFx0XHRcdGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG5cdFx0XHRcdFx0XHRmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRmaWxlWydzdGF0aWNEYXRhJ10gPSB0aGlzLnNldFN0YXRpY0RhdGEoXHJcblx0XHRcdFx0XHRcdFx0ZmlsZS50aXRsZSA/IGZpbGUudGl0bGUgOiBmaWxlLm5hbWVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGUgPSBmaWxlO1xyXG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmlsZUZvcm0pIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmluaXRpYXRmaWxlRm9ybSgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsZUZvcm0ucGF0Y2hWYWx1ZSh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddKTtcclxuXHJcblx0XHRcdFx0XHRcdHRoaXMudGVtcG9yYXJ5RHlhbm1pY0RhdGEgPSB7fTtcclxuXHRcdFx0XHRcdFx0dGhpcy50ZW1wb3JhcnlEeWFubWljRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGFcclxuXHRcdFx0XHRcdFx0XHQ/IHsgLi4udGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSB9XHJcblx0XHRcdFx0XHRcdFx0OiB7fTtcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd1N0YXRpY0Zvcm0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9LCAyMDApO1xyXG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGZpbGUpO1xyXG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZpbGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZCA9IHRoaXMuZmlsZUZvcm1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5maWxlRm9ybS52YWxpZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNEYXRhID0gdGhpcy5maWxlRm9ybVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmZpbGVGb3JtLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHt9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeU5hbWUnKS5zZXRWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWdlbmN5TmFtZUZpbHRlciA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2F0ZWdvcnk6IHJlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeUNhdGVnb3J5Q29kZScpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeU5hbWUnKS5zZXRWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY291bnRyeU5hbWVGaWx0ZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhdGVnb3J5OiByZXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSwgMjAwMCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcclxuXHRcdFx0XHRpZiAoIXRoaXMuZmlsZUZvcm0pIHtcclxuXHRcdFx0XHRcdHRoaXMuaW5pdGlhdGZpbGVGb3JtKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuZmlsZUZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ10gfSk7XHJcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ11bJ2FnZW5jeUNhdGVnb3J5Q29kZSddKSB7XHJcblx0XHRcdFx0XHR0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcblx0XHRcdFx0XHRcdGNhdGVnb3J5OiB0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydhZ2VuY3lDYXRlZ29yeUNvZGUnXVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ11bJ2NvdW50cnlDYXRlZ29yeUNvZGUnXSkge1xyXG5cdFx0XHRcdFx0dGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuXHRcdFx0XHRcdFx0Y2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ11bJ2NvdW50cnlDYXRlZ29yeUNvZGUnXVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy50ZW1wb3JhcnlEeWFubWljRGF0YSA9IHt9O1xyXG5cdFx0XHRcdHRoaXMudGVtcG9yYXJ5RHlhbm1pY0RhdGEgPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRGF0YS5kYXRhXHJcblx0XHRcdFx0XHQ/IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGFcclxuXHRcdFx0XHRcdDoge307XHJcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dSZW5kZXJlciA9IHRydWU7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dTdGF0aWNGb3JtID0gdHJ1ZTtcclxuXHRcdFx0XHR9LCAyMDApO1xyXG5cdFx0XHRcdGlmICghdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbikge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXHJcblx0XHRcdFx0XHRcdFx0KHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkID0gdGhpcy5maWxlRm9ybVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZmlsZUZvcm0udmFsaWRcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0RhdGEgPSB0aGlzLmZpbGVGb3JtXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5maWxlRm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHt9O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5Q2F0ZWdvcnlDb2RlJykpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm1cclxuXHRcdFx0XHRcdFx0XHRcdC5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpXHJcblx0XHRcdFx0XHRcdFx0XHQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWdlbmN5TmFtZUZpbHRlciA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXRlZ29yeTogcmVzXHJcblx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5maWxlRm9ybS5nZXQoJ2NvdW50cnlDYXRlZ29yeUNvZGUnKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm1cclxuXHRcdFx0XHRcdFx0XHRcdC5nZXQoJ2NvdW50cnlDYXRlZ29yeUNvZGUnKVxyXG5cdFx0XHRcdFx0XHRcdFx0LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeU5hbWUnKS5zZXRWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXRlZ29yeTogcmVzXHJcblx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgMjAwMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvbmR5bmFtaWNGb3JtQ2hhbmdlKGR5bmFtaWNEYXRhKSB7XHJcblx0XHRjb25zb2xlLmxvZyhkeW5hbWljRGF0YSk7XHJcblx0XHRpZiAoZHluYW1pY0RhdGEub3JpZ2luYWxFdmVudD8uaXNWYWxpZCkge1xyXG5cdFx0XHR0aGlzLmRpc2FibGVDcmVhdGVXaGVuRmluaXNoQnRuID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoZHluYW1pY0RhdGEuZGF0YSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRGF0YSA9IHsgLi4uZHluYW1pY0RhdGEgfTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1pbmltaXpEaWFsb2c6IERpYWxvZ0FjdGlvblR5cGUgPSAoKSA9PiB7XHJcblx0XHRzdXBlci5jbG9zZSh0cnVlKTtcclxuXHRcdHJldHVybiBvZihudWxsKTtcclxuXHR9O1xyXG5cclxuXHRyZW1vdmVJdGVtKGl0ZW0sIGxpc3RvZkZpbGVzKSB7XHJcblx0XHRjb25zdCByZW1vdmVJbmRleCA9IGxpc3RvZkZpbGVzLmZpbmRJbmRleChcclxuXHRcdFx0KGZpbGUpID0+IGZpbGUubmFtZSA9PT0gaXRlbS5uYW1lXHJcblx0XHQpO1xyXG5cdFx0bGlzdG9mRmlsZXMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuXHRcdGlmIChpdGVtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWUpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPiAwXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0RmlsZShcclxuXHRcdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlc1swXVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlcy5sZW5ndGggPiAwXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0RmlsZShcclxuXHRcdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXNbMF1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdEFwcGx5Q2hhbmdlc1RvQWxsOiBEaWFsb2dBY3Rpb25UeXBlID0gKCkgPT4ge1xyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLmZvckVhY2goXHJcblx0XHRcdChmaWxlKSA9PiB7XHJcblx0XHRcdFx0bGV0IHRpdGxlID0gZmlsZVsnc3RhdGljRGF0YSddXHJcblx0XHRcdFx0XHQ/IGZpbGVbJ3N0YXRpY0RhdGEnXVsndGl0bGUnXVxyXG5cdFx0XHRcdFx0OiBmaWxlLm5hbWU7XHJcblx0XHRcdFx0ZmlsZVsnZmlsZVR5cGUnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmZpbGVUeXBlO1xyXG5cdFx0XHRcdGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRm9ybTtcclxuXHRcdFx0XHRmaWxlWydkeW5hbWljRGF0YSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGE7XHJcblx0XHRcdFx0ZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWQ7XHJcblx0XHRcdFx0ZmlsZVsnc3RhdGljRGF0YSddID0geyAuLi50aGlzLmZpbGVGb3JtLnZhbHVlIH07XHJcblx0XHRcdFx0ZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddID0gdGl0bGU7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcclxuXHRcdFx0bGV0IHRpdGxlID0gZmlsZVsnc3RhdGljRGF0YSddID8gZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddIDogZmlsZS5uYW1lO1xyXG5cdFx0XHRmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZmlsZVR5cGU7XHJcblx0XHRcdGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRm9ybTtcclxuXHRcdFx0ZmlsZVsnZHluYW1pY0RhdGEnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhO1xyXG5cdFx0XHRmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZDtcclxuXHRcdFx0ZmlsZVsnc3RhdGljRGF0YSddID0geyAuLi50aGlzLmZpbGVGb3JtLnZhbHVlIH07XHJcblx0XHRcdGZpbGVbJ3N0YXRpY0RhdGEnXVsndGl0bGUnXSA9IHRpdGxlO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdH07XHJcblxyXG5cdGNoZWNrVmFsaWRhdGlvbigpIHtcclxuXHRcdGxldCB2YWxpZGF0aW9uID0gdHJ1ZTtcclxuXHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5mb3JFYWNoKFxyXG5cdFx0XHQoZmlsZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdmaWxlJywgZmlsZSk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0IWZpbGUuaGFzT3duUHJvcGVydHkoJ2ZpbGVUeXBlJykgfHxcclxuXHRcdFx0XHRcdGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID09PSBmYWxzZSB8fFxyXG5cdFx0XHRcdFx0ZmlsZS5keW5hbWljRGF0YT8ub3JpZ2luYWxFdmVudD8uaXNWYWxpZCA9PT0gZmFsc2VcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dmFsaWRhdGlvbiA9IGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubWFwKChmaWxlKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9PT0gZmFsc2UgfHxcclxuXHRcdFx0XHRmaWxlLmR5bmFtaWNEYXRhPy5vcmlnaW5hbEV2ZW50Py5pc1ZhbGlkID09PSBmYWxzZVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSBmYWxzZTtcclxuXHRcdFx0XHR2YWxpZGF0aW9uID0gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIHZhbGlkYXRpb247XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPyB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuXHRcdHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvblxyXG5cdFx0XHQ/IHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcblx0XHRcdDogJyc7XHJcblx0XHR0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvblxyXG5cdFx0XHQ/IHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuXHRcdFx0OiAnJztcclxuXHR9XHJcbn1cclxuIiwiPG5kZi1udXhlby1kaWFsb2cgZGlhbG9nVGl0bGU9XCJ7eyAnQ1JFQVRFLmNyZWF0ZUZpbGUnIHwgdHJhbnNsYXRlIH19XCI+XHJcblx0PG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XHJcblx0XHQ8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiaW5lci13cmFwcGVyXCIgW25nQ2xhc3NdPVwieyAnZC1mbGV4JzogYWRkaW5nUHJvcGVydGllcyB9XCI+XHJcblx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0Km5nSWY9XCJhZGRpbmdQcm9wZXJ0aWVzXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwicHJvcGVydGllcy1zZWN0aW9uIHAtMyBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG9cIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJcIlxyXG5cdFx0XHRcdFx0XHQqbmdJZj1cInNlbGVjdGVkRmlsZSAmJiBzb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyAmJiBzaG93U3RhdGljRm9ybVwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnQ1JFQVRFLkZJTEVfVFlQRScgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIHRleHQtZ3JheS05MDBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdHt7IGlzQXJhYmljID8gZmlsZVR5cGUuYXJhYmljVGV4dCA6IGZpbGVUeXBlLmVuZ2xpc2hUZXh0IH19XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmlsZS1maWVsZHMgbXQtM1wiIFNldFJ0bD5cclxuXHRcdFx0XHRcdFx0XHQ8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbGVGb3JtXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIC0tLS0tLS0tLS0tLS0tLS0tb2xkIHN0YXRpYyBmb3JtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ICdDUkVBVEUuVElUTEUnIHwgdHJhbnNsYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fTxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZmllbGQtc3R5bGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5USVRMRScgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ICdDUkVBVEUuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZpZWxkLXN0eWxlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiIHt7ICdDUkVBVEUuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0tLS0tLS0tLS0tLS0tLS0tIG5ldyBzdGF0aXMgZm9ybSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJ1c2luZ0V4dHJhRmllbGRzXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxhcHAtZHluYW1pYy1maWVsZHMtcmVuZGVyZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbZm9ybV09XCJmaWxlRm9ybVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2FnZW5jeU5hbWVGaWx0ZXJdPVwiYWdlbmN5TmFtZUZpbHRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2NvdW50cnlOYW1lRmlsdGVyXT1cImNvdW50cnlOYW1lRmlsdGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PjwvYXBwLWR5bmFtaWMtZmllbGRzLXJlbmRlcmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9mb3JtPlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHluYW1pYy1wYXJ0XCIgKm5nSWY9XCJzaG93UmVuZGVyZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhcHAtZHluYW1pYy1mb3JtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtmb3JtXT1cInNlbGVjdGVkRmlsZS5keW5hbWljRm9ybVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtkYXRhXT1cInRlbXBvcmFyeUR5YW5taWNEYXRhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJvbmR5bmFtaWNGb3JtQ2hhbmdlKCRldmVudClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PjwvYXBwLWR5bmFtaWMtZm9ybT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIHAtMyBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB0ZXh0LWxnIHRleHQtZ3JheS05MDBcIlxyXG5cdFx0XHRcdFx0XHQqbmdJZj1cIiFzZWxlY3RlZEZpbGVcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHR7eyAnQ1JFQVRFLlNFTEVDVF9UT1NUQVJUX0FERElORycgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdGNsYXNzPVwiYXR0YWNobWVudC10YWItYm9keSBvdmVyZmxvdy1oaWRkZW5cIlxyXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwieyAnYXR0YWNobWVudC1pbmVyLXNtYWxsLWJvZHknOiBhZGRpbmdQcm9wZXJ0aWVzIH1cIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxhcHAtYXR0YWNobWVudHNcclxuXHRcdFx0XHRcdFx0W211bHRpcGxlXT1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHQob25TZWxlY3RpbmdJdGVtKT1cInNlbGVjdEZpbGUoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHQ+PC9hcHAtYXR0YWNobWVudHM+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8ZGl2XHJcblx0XHRcdFx0Y2xhc3M9XCJ3LWZ1bGwgdGV4dC1yZWQtNTAwIHRleHQtYmFzZSB0ZXh0LXN0YXJ0IHB4LTNcIlxyXG5cdFx0XHRcdCpuZ0lmPVwiIXVwbG9hZE1hbmdtZW50U2VydmljZS5HZW5lcmFsRm9ybVZhbGlkYXRpb25cIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0e3sgJ0NSRUFURS5GSUxMX1JFUVVJUkVEX0ZJRUxEJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcblxyXG5cdDxuZy10ZW1wbGF0ZSAjYWN0aW9uc1RlbXBsYXRlIGxldC1kaWFsb2c9XCJkaWFsb2dcIj5cclxuXHRcdDwhLS0gV0FTX0lOX0ZMRVhfRElWIC0tPlxyXG5cdFx0PGJ1dHRvblxyXG5cdFx0XHQqbmdJZj1cIlxyXG5cdFx0XHRcdCh1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRJblByb2dyZXNzIHx8XHJcblx0XHRcdFx0XHR1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDApICYmXHJcblx0XHRcdFx0IWFkZGluZ1Byb3BlcnRpZXNcclxuXHRcdFx0XCJcclxuXHRcdFx0KGNsaWNrKT1cImRpYWxvZy5leGVjdXRlQWN0aW9uKHN0YXJ0QWRkaW5nUHJvcGVydGllcylcIlxyXG5cdFx0XHRjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCJcclxuXHRcdD5cclxuXHRcdFx0e3sgJ0JVVFRPTlMuQUREX1BST1BFUlRJRVMnIHwgdHJhbnNsYXRlIH19XHJcblx0XHQ8L2J1dHRvbj5cclxuXHRcdDxidXR0b25cclxuXHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRhZGRpbmdQcm9wZXJ0aWVzICYmXHJcblx0XHRcdFx0dXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5sZW5ndGggK1xyXG5cdFx0XHRcdFx0dXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubGVuZ3RoID5cclxuXHRcdFx0XHRcdDFcclxuXHRcdFx0XCJcclxuXHRcdFx0KGNsaWNrKT1cImRpYWxvZy5leGVjdXRlQWN0aW9uKEFwcGx5Q2hhbmdlc1RvQWxsKVwiXHJcblx0XHRcdFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRGaWxlIHx8ICFzZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkXCJcclxuXHRcdFx0W25nQ2xhc3NdPVwie1xyXG5cdFx0XHRcdCdvcGFjaXR5LTMwIGN1cnNvci1ub3QtYWxsb3dlZCc6XHJcblx0XHRcdFx0XHQhc2VsZWN0ZWRGaWxlIHx8ICFzZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkLFxyXG5cdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLWdyYXktOTAwJzogIShcclxuXHRcdFx0XHRcdCFzZWxlY3RlZEZpbGUgfHwgIXNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWRcclxuXHRcdFx0XHQpXHJcblx0XHRcdH1cIlxyXG5cdFx0XHRjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIG14LTJcIlxyXG5cdFx0PlxyXG5cdFx0XHR7eyAnQlVUVE9OUy5BUFBMWV9UT19BTEwnIHwgdHJhbnNsYXRlIH19XHJcblx0XHQ8L2J1dHRvbj5cclxuXHRcdDwhLS0gV0FTX0lOX0ZMRVhfRElWIC0tPlxyXG5cclxuXHRcdDxuZy1jb250YWluZXJcclxuXHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRhZGRpbmdQcm9wZXJ0aWVzICYmXHJcblx0XHRcdFx0IXVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuXHRcdFx0XHR1cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMubGVuZ3RoID09PSAwXHJcblx0XHRcdFwiXHJcblx0XHQ+XHJcblx0XHRcdDxidXR0b25cclxuXHRcdFx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24oY3JlYXRlRG9jdW1lbnQpXCJcclxuXHRcdFx0XHRjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHJlbGF0aXZlXCJcclxuXHRcdFx0XHRbZGlzYWJsZWRdPVwiY3JlYXRpbmdcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0PHNwYW4gKm5nSWY9XCIhY3JlYXRpbmc7IGVsc2UgbG9hZGVyXCI+e3tcclxuXHRcdFx0XHRcdCdCVVRUT05TLkNSRUFURScgfCB0cmFuc2xhdGVcclxuXHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0PC9idXR0b24+XHJcblx0XHRcdDxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxyXG5cdFx0XHRcdDxtYXQtc3Bpbm5lclxyXG5cdFx0XHRcdFx0W3ZhbHVlXT1cIjkwXCJcclxuXHRcdFx0XHRcdFtzdHJva2VXaWR0aF09XCIzXCJcclxuXHRcdFx0XHRcdG92ZXJsYXk9XCJ0cnVlXCJcclxuXHRcdFx0XHRcdFtkaWFtZXRlcl09XCIyNVwiXHJcblx0XHRcdFx0XHRjb2xvcj1cIndhcm5cIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHQ8L21hdC1zcGlubmVyPlxyXG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0PGJ1dHRvblxyXG5cdFx0XHQqbmdJZj1cIlxyXG5cdFx0XHRcdGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuXHRcdFx0XHQhdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzcyAmJlxyXG5cdFx0XHRcdHVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5sZW5ndGggPiAwXHJcblx0XHRcdFwiXHJcblx0XHRcdChjbGljayk9XCJkaWFsb2cuZXhlY3V0ZUFjdGlvbih0cnlBZ2FpbkNyZWF0ZURvY3VtZW50KVwiXHJcblx0XHRcdGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIlxyXG5cdFx0PlxyXG5cdFx0XHR7eyAnQlVUVE9OUy5UUllfQUdBSU4nIHwgdHJhbnNsYXRlIH19XHJcblx0XHQ8L2J1dHRvbj5cclxuXHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdFtkaXNhYmxlZF09XCIhZmlsZUZvcm0/LnZhbGlkIHx8IGRpc2FibGVDcmVhdGVXaGVuRmluaXNoQnRuXCJcclxuXHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRhZGRpbmdQcm9wZXJ0aWVzICYmXHJcblx0XHRcdFx0dXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzc1xyXG5cdFx0XHRcIlxyXG5cdFx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24oY3JlYXRlV2hlbkZpbmlzaClcIlxyXG5cdFx0XHRjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIlxyXG5cdFx0PlxyXG5cdFx0XHR7eyAnQlVUVE9OUy5DUkVBVEVfV0hFTl9GSU5TSCcgfCB0cmFuc2xhdGUgfX1cclxuXHRcdDwvYnV0dG9uPlxyXG5cclxuXHRcdDwhLS0gV0FTX0lOX0ZMRVhfRElWIC0tPlxyXG5cdFx0PGJ1dHRvblxyXG5cdFx0XHRjbGFzcz1cImNhbmNlbGF0aW9uLWJ1dHRvbiBteC0yXCJcclxuXHRcdFx0KGNsaWNrKT1cImRpYWxvZy5leGVjdXRlQWN0aW9uKG1pbmltaXpEaWFsb2cpXCJcclxuXHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHR1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRJblByb2dyZXNzIHx8XHJcblx0XHRcdFx0dXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMubnVtYmVyT2ZVcGxvYWRlZEZpbGVzICE9PSAwIHx8XHJcblx0XHRcdFx0YWRkaW5nUHJvcGVydGllc1xyXG5cdFx0XHRcIlxyXG5cdFx0PlxyXG5cdFx0XHR7eyAnQlVUVE9OUy5NSU5JTUlaRUQnIHwgdHJhbnNsYXRlIH19XHJcblx0XHQ8L2J1dHRvbj5cclxuXHRcdDwhLS0gPGJ1dHRvbiBjbGFzcz1cImNhbmNlbGF0aW9uLWJ1dHRvblwiIChjbGljayk9XCIgZGlhbG9nLmV4ZWN1dGVBY3Rpb24oY2xvc2VEaWFsb2cpXCI+XHJcbnt7ICdCVVRUT05TLkNBTkNFTCcgfCB0cmFuc2xhdGUgfX1cclxuPC9idXR0b24+IC0tPlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcbjwvbmRmLW51eGVvLWRpYWxvZz5cclxuIl19
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUE2RCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBTXpFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWTlDLE1BQU0sT0FBTyxvQkFBb0I7SUF3Qy9CLFlBQTRDLElBQUksRUFDdkMsU0FBNkMsRUFDN0MscUJBQTZDLEVBQzdDLHFCQUE0QyxFQUMzQyxpQkFBcUMsRUFDckMsYUFBa0MsRUFDbEMsV0FBd0IsRUFDeEIsUUFBd0IsRUFDeEIsa0JBQXNDLEVBQ3RDLGNBQWdDLEVBQ2hDLGlCQUFvQyxFQUNwQyxrQkFBc0MsRUFDdEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDSCxXQUFXLEVBQ2xDLGtCQUFzQztRQWZKLFNBQUksR0FBSixJQUFJLENBQUE7UUFDdkMsY0FBUyxHQUFULFNBQVMsQ0FBb0M7UUFDN0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF3QjtRQUM3QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzNDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFDckMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNILGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFyRGhELHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQU96QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFLN0IsaUJBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxnRkFBZ0Y7UUFDdEcsMENBQTBDO1FBQzFDLHFCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLDRDQUE0QztRQU10RSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsS0FBSyxDQUFBO1FBRXRCLCtCQUEwQixHQUFHLElBQUksQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQTRCdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXhDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxzREFBc0Q7UUFDM0csSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1FBQ3BELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO29CQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lCQUM5QjtZQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDOUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3RCxhQUFhLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQjtnQkFDM0QsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUN2RCx3QkFBd0IsRUFBRSxJQUFJO2dCQUM5QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWhERCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsSUFBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQy9FLElBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO2dCQUN0RyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUN6QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7SUEwQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2RSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixFQUFFO1lBQ3ZELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuRTtRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5RyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUNyQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNwQixlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDbEIsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2QsQ0FBQyxDQUFBO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2xCLENBQUMsQ0FBQTtTQUNIO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO0lBQy9FLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLDBHQUEwRztRQUMxRyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssWUFBWSxFQUFFO1lBQ2hDLDJFQUEyRTtZQUUzRSxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDO2dCQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUs7U0FDTjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQUs7UUFDakIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSztnQkFDWixXQUFXLEVBQUUsRUFBRTtnQkFDZixPQUFPLEVBQUUsRUFBRTtnQkFDWCxjQUFjLEVBQUUsRUFBRTtnQkFDbEIsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUk7Z0JBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUk7Z0JBQ3pELGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMxRSxrQkFBa0IsRUFBRSxJQUFJO2dCQUN4QixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQTtTQUNGO2FBQU07WUFDTCxPQUFPO2dCQUNMLEtBQUssRUFBRSxLQUFLO2dCQUNaLFdBQVcsRUFBRSxFQUFFO2FBQ2hCLENBQUE7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjOztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMscUJBQXFCLEVBQUU7WUFFcEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUMsTUFBSSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUMsQ0FBQSxFQUFFO2dCQUNoSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN0RyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFBO2dCQUNuSSxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JHLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxtQkFBbUI7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUN2QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxFQUFFO3dCQUMzRCxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtxQkFDckU7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBR3ZHO3FCQUFNO29CQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixDQUFDLENBQUE7b0JBQ25GLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQzFDO1lBQ0gsQ0FBQyxFQUNDLEtBQUssQ0FBQyxFQUFFO2dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixzQkFBc0I7Z0JBQ3RCLCtFQUErRTtnQkFDL0Usc0JBQXNCO1lBQ3hCLENBQUMsQ0FBQyxDQUFBO1NBQ0w7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELDJCQUEyQixDQUFDLEtBQUs7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNmLElBQUksS0FBSyxHQUFHO2dCQUNWLFdBQVcsRUFBRSxDQUFDO2dCQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7Z0JBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSzthQUN4RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RJLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDNUQsSUFBSSxLQUFLLEdBQUc7Z0JBQ1YsVUFBVSxFQUFFO29CQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7b0JBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7b0JBQzdCLFlBQVksZ0RBQ1AsS0FBSyxHQUNMLGNBQWMsS0FDakIsY0FBYyxFQUFFOzRCQUNkLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7NEJBQy9DLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7NEJBQ2pELFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSTt5QkFDdkIsR0FDRjtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2dCQUM5QixLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQTthQUN2RDtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJO1FBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtZQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNyRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtTQUMxRjtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSTtRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsOEVBQThFO1lBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ25JLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNyRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7cUJBQ3hCO29CQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFFMUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNoSCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNSLG9CQUFvQjtvQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTt3QkFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dDQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dDQUNoRixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUMxRSxDQUFDLENBQUMsQ0FBQzs0QkFFSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7Z0NBQzNDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0NBQ3RHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQ0FDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHO3dDQUN0QixRQUFRLEVBQUUsR0FBRztxQ0FDZCxDQUFDO2dDQUNKLENBQUMsQ0FBQyxDQUFBOzZCQUNIOzRCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRTtnQ0FDNUMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQ0FDeEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29DQUNoRCxJQUFJLENBQUMsaUJBQWlCLEdBQUc7d0NBQ3ZCLFFBQVEsRUFBRSxHQUFHO3FDQUNkLENBQUM7Z0NBQ0osQ0FBQyxDQUFDLENBQUE7NkJBQ0g7d0JBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNWO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7aUJBQ3hCO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxtQkFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFHLENBQUM7Z0JBQ2pFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO29CQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7d0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLG9CQUFvQixDQUFDO3FCQUNoRSxDQUFDO2lCQUNIO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUc7d0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLHFCQUFxQixDQUFDO3FCQUNqRSxDQUFDO2lCQUNIO2dCQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFFN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7b0JBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzs0QkFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUUsQ0FBQyxDQUFDLENBQUE7d0JBRUYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFOzRCQUMzQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dDQUN0RyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztvQ0FDdEIsUUFBUSxFQUFFLEdBQUc7aUNBQ2QsQ0FBQzs0QkFDSixDQUFDLENBQUMsQ0FBQTt5QkFDSDt3QkFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7NEJBQzVDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0NBQ3hHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHO29DQUN2QixRQUFRLEVBQUUsR0FBRztpQ0FDZCxDQUFDOzRCQUNKLENBQUMsQ0FBQyxDQUFBO3lCQUNIO29CQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDVjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsV0FBVzs7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN4QixJQUFJLE1BQUEsV0FBVyxDQUFDLGFBQWEsMENBQUUsT0FBTyxFQUFFO1lBQ3RDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxLQUFLLENBQUE7U0FDeEM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLHFCQUFRLFdBQVcsQ0FBRSxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXO1FBQzFCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ2pGO2lCQUNJLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUM1RTtZQUNELDRCQUE0QjtTQUM3QjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7WUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztZQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1lBQzVELElBQUksQ0FBQyxZQUFZLENBQUMscUJBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7O1lBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxhQUFhLDBDQUFFLE9BQU8sTUFBSyxLQUFLLEVBQUU7Z0JBQy9ILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEtBQUssQ0FBQTtnQkFDdEMsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUNwQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUE7YUFDdEM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFOztZQUNqRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxhQUFhLDBDQUFFLE9BQU8sTUFBSyxLQUFLLEVBQUU7Z0JBQzNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdkMsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUVwQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekYsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RixDQUFDOztrSEFoZVUsb0JBQW9CLGtCQXdDWCxlQUFlLGliQWN6QixhQUFhO3NHQXREWixvQkFBb0IsK0hDckJqQyxpOU9BNElNOzRGRHZITyxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7aUJBQzdDOzswQkF5Q2MsTUFBTTsyQkFBQyxlQUFlOzswQkFjaEMsTUFBTTsyQkFBQyxhQUFhOzhFQXZCdkIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFVwbG9hZE1hbmFnbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvdXBsb2FkLW1hbmFnbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nTWFuZ21lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL2RpYWxvZy1tYW5nbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0ZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zZXJ2aWNlcy9kYXRlLWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2FkYXB0ZXJzL2FkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uL2FwcC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBhZGRpbmdQcm9wZXJ0aWVzID0gZmFsc2U7XHJcbiAgZmlsZVR5cGVGb3JtOiBGb3JtR3JvdXA7XHJcbiAgZHluYW1pY0Zvcm07XHJcbiAgZHluYW1pY0RhdGE7XHJcbiAgc2VsZWN0ZWRGaWxlO1xyXG4gIGZpbGVUeXBlO1xyXG4gIHNvdXJjZTtcclxuICBwYXlsb2FkTGlzdCA9IFtdO1xyXG4gIGNyZWF0ZVdoZW5GaW5pc2hNb2RlID0gZmFsc2U7XHJcbiAgZmlsZUZvcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBjb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdGVtcG9yYXJ5RHlhbm1pY0RhdGE7XHJcbiAgc2hvd1JlbmRlcmVyID0gZmFsc2U7IC8vIHVzZWQgdG8gZm9yY2UgcmVuZGVyZXIgdG8gZmVlbCBjaGFuZ2VzIGluIGZvcm1zIGFuZCB2YWx1ZSB3aGVuIGNoYW5naW5nIGZpbGVzXHJcbiAgLy8gdXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdXNpbmdFeHRyYUZpZWxkcyA9IGZhbHNlOyAvLyBmbGFnZSB0byBzd2l0Y2ggYmV0d2VlbiBzdGF0aWMgZm9ybSB0eXBlc1xyXG5cclxuICBmaWxlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHN0YXRpY0Zvcm1GaWVsZHM7XHJcbiAgYWdlbmN5TmFtZUZpbHRlcjtcclxuICBjb3VudHJ5TmFtZUZpbHRlcjtcclxuICBpc0FyYWJpYyA9IGZhbHNlO1xyXG4gIHNob3dTdGF0aWNGb3JtID0gZmFsc2VcclxuICBsYW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgZGlzYWJsZUNyZWF0ZVdoZW5GaW5pc2hCdG4gPSB0cnVlO1xyXG4gIGNyZWF0aW5nID0gZmFsc2U7XHJcbiAgZGlzcGxheU5vdGVNZXNzYWdlID0gdHJ1ZTtcclxuICBteUVudmlyb25tZW50O1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwLmVudGVyJywgWyckZXZlbnQnXSlcclxuICBLZXlVcEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZih0aGlzLmFkZGluZ1Byb3BlcnRpZXMgJiYgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGlmKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzcyAmJiAhdGhpcy5kaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0bikge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlV2hlbkZpbmlzaCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRG9jdW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q3JlYXRlTW9kYWxDb21wb25lbnQ+LFxyXG4gICAgcHVibGljIHVwbG9hZE1hbmdtZW50U2VydmljZTogVXBsb2FkTWFuYWdtZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2dNYW5nbWVudFNlcnZpY2U6IERpYWxvZ01hbmdtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsZU1hbmdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBhZGFwZXRlcjogQWRhcHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpbGVNYW5hZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25mU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZUhlbHBlclNlcnZpY2U6IERhdGVIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudCxcclxuICAgIHByaXZhdGUgZHluYW1pY0Zvcm1TZXJ2aWNlOiBEeW5hbWljRm9ybVNlcnZpY2UsKSB7XHJcbiAgICAgIHRoaXMubXlFbnZpcm9ubWVudCA9IHRoaXMuZW52aXJvbm1lbnQ7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVXaGVuRmluaXNoTW9kZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRpbmdQcm9wZXJ0aWVzID0gdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGU7XHJcbiAgICB0aGlzLmZpbGVUeXBlID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2UuZmlsZVR5cGU7IC8vIG9iamVjdCB0aGF0IHdhcyBjb25zdHJ1Y3RlZCBpbnNpZGUgc3VidHlwZXMgc2VydmljZVxyXG4gICAgdGhpcy5zb3VyY2UgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5hZGRpbmdGcm9tO1xyXG4gICAgdGhpcy5maWxlTWFuYWdlclNlcnZpY2UuZ2V0RmlsZVNjaGVtYXModGhpcy5maWxlVHlwZS50eXBlKS5zdWJzY3JpYmUoc2NoZW1hcyA9PiB7XHJcbiAgICAgIHNjaGVtYXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLm5hbWUgPT09IFwiZ2VuZXJhbGRvY3VtZW50XCIpIHtcclxuICAgICAgICAgIHRoaXMudXNpbmdFeHRyYUZpZWxkcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmluaXRpYXRmaWxlRm9ybSgpO1xyXG4gICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5nZXR0aW5nUHJvcEZyb21Nb2RhbCh7XHJcbiAgICAgICAgJ2ZpbGVUeXBlJzogdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fSxcclxuICAgICAgICAnZHluYW1pY0Zvcm0nOiB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5zdG9yZWREeW5hbWljRm9ybSxcclxuICAgICAgICAnZHluYW1pY0RhdGEnOiB7fSxcclxuICAgICAgICAnc3RhdGljRm9ybVZhbGlkJzogdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgICdnZW5lcmFsVmFsaWRhdGlvblZhbGlkJzogdHJ1ZSxcclxuICAgICAgICAndXNpbmdFeHRyYUZpZWxkcyc6IHRoaXMudXNpbmdFeHRyYUZpZWxkcyxcclxuICAgICAgICAncGF0aCc6IHRoaXMuZGF0YS5wYXRoXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGFuZ1N1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmlzQXJhYmljLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID0gcmVzO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbmlzaFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRGaW5pc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbmlzaFN1YnNjcmlwdGlvbiA9IHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLm9uVXBsb2FkRmluaXNoLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jcmVhdGVXaGVuRmluaXNoTW9kZSB8fCB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEb2N1bWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhdGZpbGVGb3JtKCkge1xyXG4gICAgaWYgKHRoaXMudXNpbmdFeHRyYUZpZWxkcykge1xyXG4gICAgICB0aGlzLmZpbGVGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgdGl0bGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogWycnXSxcclxuICAgICAgICBzdWJqZWN0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgZG9jdW1lbnROdW1iZXI6IFsnJ10sXHJcbiAgICAgICAgZ2RvY3VtZW50RGF0ZTogW251bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgc2VjcmVjeUxldmVsOiBbbnVsbF0sXHJcbiAgICAgICAgaW1wb3J0YW5jZUxldmVsOiBbbnVsbF0sXHJcbiAgICAgICAgZGVwYXJ0bWVudENvZGU6IFsnJ10sXHJcbiAgICAgICAgYWdlbmN5Q2F0ZWdvcnlDb2RlOiBbbnVsbF0sXHJcbiAgICAgICAgYWdlbmN5TmFtZTogW251bGxdLFxyXG4gICAgICAgIGNvdW50cnlDYXRlZ29yeUNvZGU6IFtudWxsXSxcclxuICAgICAgICBjb3VudHJ5TmFtZTogW251bGxdLFxyXG4gICAgICAgIHJlbWFya3M6IFsnJ11cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICB0aXRsZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBbJyddXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRpY0Zvcm1GaWVsZHMgPSB0aGlzLmFwcENvbmZTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5zdGF0aWNGb3JtRmllbGRzOyBcclxuICB9XHJcbiAgXHJcbiAgY3JlYXRlV2hlbkZpbmlzaCgpIHtcclxuICAgIHRoaXMuY3JlYXRlV2hlbkZpbmlzaE1vZGUgPSB0cnVlO1xyXG4gICAgdGhpcy5taW5pbWl6RGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZURpYWxvZygpIHtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLkdlbmVyYWxGb3JtVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uID8gdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcbiAgICB0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSBmYWxzZTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnJlc2V0U3RhdHVzKCk7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSlcclxuICB9XHJcblxyXG4gIHN0YXJ0QWRkaW5nUHJvcGVydGllcygpIHtcclxuICAgIC8vaWYgc3RhcnRpbmcgZnJvbSBmaWxlbW5hZ2VyIHRoZW4gaSBoYXZlIGZpeGVkIGZpbGUgdHlwZSBmb3IgYWxsIGF0dGFjaG1ldG4gYW5kIHNpbmdsZSBkeW5haW1jIGZvcm0gIHR5cGVcclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInKSB7XHJcbiAgICAgIC8vIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmdldER5bmFtaWNGb3JtKHRoaXMuZmlsZVR5cGUpLnN1YnNjcmliZShyZXMgPT4ge1xyXG5cclxuICAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fTtcclxuICAgICAgICBmaWxlWydkeW5hbWljRm9ybSddID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2Uuc3RvcmVkRHluYW1pY0Zvcm07XHJcbiAgICAgICAgZmlsZVsnZHluYW1pY0RhdGEnXSA9IHt9O1xyXG4gICAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXSA9IHRoaXMuc2V0U3RhdGljRGF0YShmaWxlLnRpdGxlID8gZmlsZS50aXRsZSA6IGZpbGUubmFtZSk7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgICAgZmlsZVsnZmlsZVR5cGUnXSA9IHRoaXMuc291cmNlID09PSAnZmlsZU1hbmdlcicgPyB0aGlzLmZpbGVUeXBlIDoge307XHJcbiAgICAgICAgZmlsZVsnZHluYW1pY0Zvcm0nXSA9IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLnN0b3JlZER5bmFtaWNGb3JtO1xyXG4gICAgICAgIGZpbGVbJ2R5bmFtaWNEYXRhJ10gPSB7fTtcclxuICAgICAgICBmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9IHRoaXMudXNpbmdFeHRyYUZpZWxkcyA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICBmaWxlWydzdGF0aWNEYXRhJ10gPSB0aGlzLnNldFN0YXRpY0RhdGEoZmlsZS50aXRsZSA/IGZpbGUudGl0bGUgOiBmaWxlLm5hbWUpO1xyXG4gICAgICAgIGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRpbmdQcm9wZXJ0aWVzID0gdHJ1ZTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmFkZGluZ1Byb3BlcnRpZXNNb2RlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFN0YXRpY0RhdGEodGl0bGUpIHtcclxuICAgIGlmICh0aGlzLnVzaW5nRXh0cmFGaWVsZHMpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIHN1YmplY3Q6ICcnLFxyXG4gICAgICAgIGRvY3VtZW50TnVtYmVyOiAnJyxcclxuICAgICAgICBnZG9jdW1lbnREYXRlOiBudWxsLFxyXG4gICAgICAgIHNlY3JlY3lMZXZlbDogdGhpcy5kYXRhLm91dGVyRGVmYXVsdFNlY3JlY3kgfHwgbnVsbCxcclxuICAgICAgICBpbXBvcnRhbmNlTGV2ZWw6IHRoaXMuZGF0YS5vdXRlckRlZmF1bHRJbXBvcnRhbmNlIHx8IG51bGwsXHJcbiAgICAgICAgZGVwYXJ0bWVudENvZGU6IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRlcGFydG1lbnRGcm9tUGF0aCh0aGlzLmRhdGEucGF0aCksXHJcbiAgICAgICAgYWdlbmN5Q2F0ZWdvcnlDb2RlOiBudWxsLFxyXG4gICAgICAgIGFnZW5jeU5hbWU6IG51bGwsXHJcbiAgICAgICAgY291bnRyeUNhdGVnb3J5Q29kZTogbnVsbCxcclxuICAgICAgICBjb3VudHJ5TmFtZTogbnVsbCxcclxuICAgICAgICByZW1hcmtzOiAnJ1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJydcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRG9jdW1lbnQoKSB7XHJcbiAgICB0aGlzLmNyZWF0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzID0gW107XHJcbiAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5HZW5lcmFsRm9ybVZhbGlkYXRpb24gPSB0aGlzLmNoZWNrVmFsaWRhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLkdlbmVyYWxGb3JtVmFsaWRhdGlvbikge1xyXG5cclxuICAgICAgbGV0IGFwaUNhbGxzID0gW107XHJcbiAgICAgIGlmICh0aGlzLmRhdGE/LnBhdGguaW5jbHVkZXMoJy9kZWZhdWx0LWRvbWFpbi93b3Jrc3BhY2VzL0RNU1dvcmtzcGFjZXMnKSB8fCB0aGlzLmRhdGE/LnBhdGguaW5jbHVkZXMoJy9kZWZhdWx0LWRvbWFpbi9Vc2VyV29ya3NwYWNlcy8nKSkge1xyXG4gICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdFBheUxvYWRUb1dvcmtTcGFjZSh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMpO1xyXG4gICAgICAgIHRoaXMucGF5bG9hZExpc3QubWFwKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLmNyZWF0ZUZpbGUocGF5bG9hZCwgdGhpcy5maWxlTWFuYWdlclNlcnZpY2Uuc2VsZWN0ZWRGb2xkZXJJZCwgJ0RNUy5DcmVhdGVEb2N1bWVudEZyb21CbG9iJykpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RQYXlMb2FkKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkTGlzdC5tYXAocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZmlsZU1hbmdlclNlcnZpY2UuY3JlYXRlRmlsZShwYXlsb2FkLCB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkKSlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBmb3JrSm9pbihhcGlDYWxscykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJlc3BvbnNlLm1hcChzaW5nbGVSZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKHNpbmdsZVJlc1snc3RhdHVzJ10gJiYgc2luZ2xlUmVzWydzdGF0dXMnXSA9PT0gJ2ZhaWxlZCcpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMucHVzaChzaW5nbGVSZXNbJ29yaWdpbkZpbGUnXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsICdUT0FTVEVSLlVQTE9BRF9FUlJPUicpO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzID0gWy4uLnRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzXTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLm9uUmVmcmVzaGluZ0ZpbGVNYW5nZXIubmV4dCgpO1xyXG4gICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLkZJTEVfQ1JFQVRFRF9TVUNDRVwiKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UucmVzZXRTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgLy8gdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJyAsICdUT0FTVEVSLkVSUk9SJyAsICdUT0FTVEVSLlVQTE9BRF9FUlJPUicpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNyZWF0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RQYXlMb2FkVG9Xb3JrU3BhY2UoZmlsZXMpIHtcclxuICAgIHRoaXMucGF5bG9hZExpc3QgPSBbXTtcclxuICAgIGZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgbGV0IHBhcmFtID0ge1xyXG4gICAgICAgIFwiZmlsZWluZGV4XCI6IDAsXHJcbiAgICAgICAgXCJmaWxlTmFtZVwiOiBmaWxlLnN0YXRpY0RhdGEudGl0bGUsXHJcbiAgICAgICAgXCJiYXRjaGlkXCI6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWJhdGNoJ10sXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB0aGlzLmZpbGVGb3JtLmNvbnRyb2xzLmRlc2NyaXB0aW9uLnZhbHVlXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMucGF5bG9hZExpc3QucHVzaCh7IHBhcmFtczogcGFyYW0sIG9yaWdpbkZpbGU6IGZpbGUgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdHJ5QWdhaW5DcmVhdGVEb2N1bWVudCgpIHtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbGVzTWFuZ21lbnQodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0UGF5TG9hZChmaWxlcykge1xyXG4gICAgdGhpcy5wYXlsb2FkTGlzdCA9IFtdO1xyXG4gICAgZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBsZXQgcHJvcHMgPSB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoZmlsZS5keW5hbWljRGF0YS5kYXRhID8gZmlsZS5keW5hbWljRGF0YS5kYXRhIDoge30sIGZpbGUuZHluYW1pY0Zvcm0pO1xyXG4gICAgICBsZXQgc3RhdGljRm9ybURhdGEgPSB0aGlzLm1hcHBpbmdTdGF0aWNEYXRhKGZpbGUuc3RhdGljRGF0YSlcclxuICAgICAgbGV0IHBhcmFtID0ge1xyXG4gICAgICAgIFwiZG9jdW1lbnRcIjoge1xyXG4gICAgICAgICAgXCJ0eXBlXCI6IGZpbGUuZmlsZVR5cGUudHlwZSxcclxuICAgICAgICAgIFwibmFtZVwiOiBmaWxlLnN0YXRpY0RhdGEudGl0bGUsXHJcbiAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICAgICAgLi4uc3RhdGljRm9ybURhdGEsXHJcbiAgICAgICAgICAgIFwiZmlsZTpjb250ZW50XCI6IHtcclxuICAgICAgICAgICAgICBcInVwbG9hZC1iYXRjaFwiOiBmaWxlLmJhdGNoLmJsb2JbJ3VwbG9hZC1iYXRjaCddLFxyXG4gICAgICAgICAgICAgIFwidXBsb2FkLWZpbGVJZFwiOiBmaWxlLmJhdGNoLmJsb2JbJ3VwbG9hZC1maWxlSWQnXSxcclxuICAgICAgICAgICAgICBcIm1pbWUtdHlwZVwiOiBmaWxlLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgaWYgKGZpbGUuZmlsZVR5cGUuZG9jdW1lbnRDb2RlKSB7XHJcbiAgICAgICAgcGFyYW1bXCJkb2N1bWVudFR5cGVDb2RlXCJdID0gZmlsZS5maWxlVHlwZS5kb2N1bWVudENvZGVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBheWxvYWRMaXN0LnB1c2goeyBwYXJhbXM6IHBhcmFtLCBvcmlnaW5GaWxlOiBmaWxlIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG1hcHBpbmdTdGF0aWNEYXRhKGRhdGEpIHtcclxuICAgIGlmIChkYXRhLmdkb2N1bWVudERhdGUgJiYgZGF0YS5nZG9jdW1lbnREYXRlICE9PSBudWxsKSB7XHJcbiAgICAgIG1vbWVudC5sb2NhbGUoJ2VuJyk7XHJcbiAgICAgIGRhdGFbJ2hkb2N1bWVudERhdGUnXSA9IHRoaXMuZGF0ZUhlbHBlclNlcnZpY2UuZ3JlZ29yaWFuVG9IaWpyaShkYXRhLmdkb2N1bWVudERhdGUsICdpWVlZWS1pTU0taUREJyk7XHJcbiAgICAgIGRhdGEuZ2RvY3VtZW50RGF0ZSA9IChtb21lbnQoZGF0YS5nZG9jdW1lbnREYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREVDAwOjAwOjAwLjAwMFwiKSArIFwiWlwiKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYWRhcGV0ZXIuYWRhcHRPdXQoZGF0YSwgdGhpcy5zdGF0aWNGb3JtRmllbGRzKVxyXG4gIH1cclxuICAgIFxyXG4gIHNlbGVjdEZpbGUoZmlsZSkge1xyXG4gICAgY29uc29sZS5sb2coXCJmaWxlIGluIHNlbGVjdFwiLCBmaWxlKVxyXG4gICAgdGhpcy5zaG93U3RhdGljRm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgIC8vY29uc29sZS5sb2coZmlsZSk7XHJcbiAgICBpZiAoIXRoaXMuYWRkaW5nUHJvcGVydGllcykge1xyXG4gICAgICB0aGlzLnN0YXJ0QWRkaW5nUHJvcGVydGllcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkaW5nUHJvcGVydGllcykge1xyXG4gICAgICB0aGlzLnNob3dSZW5kZXJlciA9IGZhbHNlO1xyXG4gICAgICAvLyBjaGVjayBpZiBmaWxlIGhhcyBwcm9wZXJ0aWVzIG9mIGFkZGluZyBwcm9wZXJ0aWVzIG9yIG5vdCB0aGVuIGFkZCBpdCB0byBoaW1cclxuICAgICAgaWYgKCFmaWxlLmhhc093blByb3BlcnR5KCdmaWxlVHlwZScpKSB7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZ2V0RHluYW1pY0Zvcm0odGhpcy5maWxlVHlwZS5kb2N1bWVudENvZGUgPyB0aGlzLmZpbGVUeXBlLmRvY3VtZW50Q29kZSA6IHRoaXMuZmlsZVR5cGUudHlwZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fTtcclxuICAgICAgICAgIGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSByZXM7XHJcbiAgICAgICAgICBmaWxlWydkeW5hbWljRGF0YSddID0ge307XHJcbiAgICAgICAgICBmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9IHRoaXMudXNpbmdFeHRyYUZpZWxkcyA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgIGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IHRydWU7XHJcbiAgICAgICAgICBmaWxlWydzdGF0aWNEYXRhJ10gPSB0aGlzLnNldFN0YXRpY0RhdGEoZmlsZS50aXRsZSA/IGZpbGUudGl0bGUgOiBmaWxlLm5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmZpbGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGZpbGVGb3JtKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbGVGb3JtLnBhdGNoVmFsdWUodGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlEeWFubWljRGF0YSA9IHt9O1xyXG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlEeWFubWljRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGEgPyB7IC4uLnRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGEgfSA6IHt9O1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlbmRlcmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93U3RhdGljRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhmaWxlKTtcclxuICAgICAgICAgIGlmICghdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWQgPSB0aGlzLmZpbGVGb3JtID8gdGhpcy5maWxlRm9ybS52YWxpZCA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUuc3RhdGljRGF0YSA9IHRoaXMuZmlsZUZvcm0gPyB0aGlzLmZpbGVGb3JtLnZhbHVlIDoge307XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5Q2F0ZWdvcnlDb2RlJykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeU5hbWUnKS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiByZXNcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeUNhdGVnb3J5Q29kZScpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDYXRlZ0NvZGVTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeUNhdGVnb3J5Q29kZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlRm9ybS5nZXQoJ2NvdW50cnlOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHJlc1xyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBmaWxlO1xyXG4gICAgICAgIGlmICghdGhpcy5maWxlRm9ybSkge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWF0ZmlsZUZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWxlRm9ybS5wYXRjaFZhbHVlKHsgLi4udGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXSB9KTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnYWdlbmN5Q2F0ZWdvcnlDb2RlJ10pIHtcclxuICAgICAgICAgIHRoaXMuYWdlbmN5TmFtZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ11bJ2FnZW5jeUNhdGVnb3J5Q29kZSddXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnY291bnRyeUNhdGVnb3J5Q29kZSddKSB7XHJcbiAgICAgICAgICB0aGlzLmNvdW50cnlOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeTogdGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnY291bnRyeUNhdGVnb3J5Q29kZSddXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0ge307XHJcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlEeWFubWljRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGEgPyB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRGF0YS5kYXRhIDoge307XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dSZW5kZXJlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0aWNGb3JtID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkID0gdGhpcy5maWxlRm9ybSA/IHRoaXMuZmlsZUZvcm0udmFsaWQgOiBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNEYXRhID0gdGhpcy5maWxlRm9ybSA/IHRoaXMuZmlsZUZvcm0udmFsdWUgOiB7fTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5Q2F0ZWdvcnlDb2RlJykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogcmVzXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDYXRlZ0NvZGVTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeUNhdGVnb3J5Q29kZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHJlc1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uZHluYW1pY0Zvcm1DaGFuZ2UoZHluYW1pY0RhdGEpIHtcclxuICAgIGNvbnNvbGUubG9nKGR5bmFtaWNEYXRhKVxyXG4gICAgaWYgKGR5bmFtaWNEYXRhLm9yaWdpbmFsRXZlbnQ/LmlzVmFsaWQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0biA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAoZHluYW1pY0RhdGEuZGF0YSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRGF0YSA9IHsgLi4uZHluYW1pY0RhdGEgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1pbmltaXpEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUl0ZW0oaXRlbSwgbGlzdG9mRmlsZXMpIHtcclxuICAgIGNvbnN0IHJlbW92ZUluZGV4ID0gbGlzdG9mRmlsZXMuZmluZEluZGV4KGZpbGUgPT4gZmlsZS5uYW1lID09PSBpdGVtLm5hbWUpO1xyXG4gICAgbGlzdG9mRmlsZXMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgIGlmIChpdGVtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWUpIHtcclxuICAgICAgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RGaWxlKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlc1swXSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEZpbGUodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlc1swXSlcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBBcHBseUNoYW5nZXNUb0FsbCgpIHtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGxldCB0aXRsZSA9IGZpbGVbJ3N0YXRpY0RhdGEnXSA/IGZpbGVbJ3N0YXRpY0RhdGEnXVsndGl0bGUnXSA6IGZpbGUubmFtZTtcclxuICAgICAgZmlsZVsnZmlsZVR5cGUnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmZpbGVUeXBlO1xyXG4gICAgICBmaWxlWydkeW5hbWljRm9ybSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0Zvcm07XHJcbiAgICAgIGZpbGVbJ2R5bmFtaWNEYXRhJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRGF0YTtcclxuICAgICAgZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWQ7XHJcbiAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXSA9IHsgLi4udGhpcy5maWxlRm9ybS52YWx1ZSB9O1xyXG4gICAgICBmaWxlWydzdGF0aWNEYXRhJ11bJ3RpdGxlJ10gPSB0aXRsZTtcclxuICAgIH0pXHJcbiAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgbGV0IHRpdGxlID0gZmlsZVsnc3RhdGljRGF0YSddID8gZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddIDogZmlsZS5uYW1lO1xyXG4gICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZmlsZVR5cGU7XHJcbiAgICAgIGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRm9ybTtcclxuICAgICAgZmlsZVsnZHluYW1pY0RhdGEnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhO1xyXG4gICAgICBmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZDtcclxuICAgICAgZmlsZVsnc3RhdGljRGF0YSddID0geyAuLi50aGlzLmZpbGVGb3JtLnZhbHVlIH07XHJcbiAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXVsndGl0bGUnXSA9IHRpdGxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja1ZhbGlkYXRpb24oKSB7XHJcbiAgICBsZXQgdmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcImZpbGVcIiwgZmlsZSlcclxuICAgICAgaWYgKCFmaWxlLmhhc093blByb3BlcnR5KCdmaWxlVHlwZScpIHx8IGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID09PSBmYWxzZSB8fCBmaWxlLmR5bmFtaWNEYXRhPy5vcmlnaW5hbEV2ZW50Py5pc1ZhbGlkID09PSBmYWxzZSkge1xyXG4gICAgICAgIGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IGZhbHNlXHJcbiAgICAgICAgdmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBpZiAoZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPT09IGZhbHNlIHx8IGZpbGUuZHluYW1pY0RhdGE/Lm9yaWdpbmFsRXZlbnQ/LmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gZmFsc2U7XHJcbiAgICAgICAgdmFsaWRhdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbiA/IHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gICAgdGhpcy5sYW5nU3Vic2NyaXB0aW9uID8gdGhpcy5sYW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgIHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA/IHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcbiAgICB0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA/IHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmVyLXdyYXBwZXJcIiBbbmdDbGFzc109XCJ7ICdkLWZsZXgnOiBhZGRpbmdQcm9wZXJ0aWVzIH1cIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkaW5nUHJvcGVydGllc1wiIGNsYXNzPVwicHJvcGVydGllcy1zZWN0aW9uIHAtMyBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG9cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwic2VsZWN0ZWRGaWxlICYmIHNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInICYmIHNob3dTdGF0aWNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5GSUxFX1RZUEVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ncmF5LTkwMFwiPnt7IGlzQXJhYmljID8gZmlsZVR5cGUuYXJhYmljVGV4dCA6IGZpbGVUeXBlLmVuZ2xpc2hUZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWZpZWxkcyBtdC0zXCIgU2V0UnRsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLW9sZCBzdGF0aWMgZm9ybSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLlRJVExFXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLXN0eWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHBsYWNlaG9sZGVyPVwiIHt7ICdDUkVBVEUuVElUTEUnIHwgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuREVTQ1JJUFRJT05cIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZpZWxkLXN0eWxlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiB7eyAnQ1JFQVRFLkRFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZX19XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0gbmV3IHN0YXRpcyBmb3JtICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXNpbmdFeHRyYUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcy1yZW5kZXJlciBbZm9ybV09XCJmaWxlRm9ybVwiIFthZ2VuY3lOYW1lRmlsdGVyXT1cImFnZW5jeU5hbWVGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudHJ5TmFtZUZpbHRlcl09XCJjb3VudHJ5TmFtZUZpbHRlclwiPjwvYXBwLWR5bmFtaWMtZmllbGRzLXJlbmRlcmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXBhcnRcIiAqbmdJZj1cInNob3dSZW5kZXJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZm9ybSBbZm9ybV09XCJzZWxlY3RlZEZpbGUuZHluYW1pY0Zvcm1cIiBbZGF0YV09XCJ0ZW1wb3JhcnlEeWFubWljRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uZHluYW1pY0Zvcm1DaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWR5bmFtaWMtZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHctZnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIGgtZnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHAtM1xyXG4gICAgICAgICAgICAgICAgICAgIGZsZXhcclxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtbGcgdGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2VsZWN0ZWRGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5TRUxFQ1RfVE9TVEFSVF9BRERJTkdcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtdGFiLWJvZHkgb3ZlcmZsb3ctaGlkZGVuXCIgW25nQ2xhc3NdPVwieyAnYXR0YWNobWVudC1pbmVyLXNtYWxsLWJvZHknOiBhZGRpbmdQcm9wZXJ0aWVzIH1cIj5cclxuICAgICAgICAgICAgPGFwcC1hdHRhY2htZW50cyBbbXVsdGlwbGVdPVwidHJ1ZVwiIChvblNlbGVjdGluZ0l0ZW0pPVwic2VsZWN0RmlsZSgkZXZlbnQpXCI+PC9hcHAtYXR0YWNobWVudHM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgdGV4dC1yZWQtNTAwIHRleHQtYmFzZSB0ZXh0LXN0YXJ0IHB4LTNcIiAqbmdJZj1cIiF1cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uXCI+XHJcblxyXG4gICAgICAgIHt7IFwiQ1JFQVRFLkZJTExfUkVRVUlSRURfRklFTERcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1pbmVyLXdyYXBwZXIgdy1mdWxsIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBhYnNvbHV0ZSBib3R0b20tMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAodXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnVwbG9hZEluUHJvZ3Jlc3MgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA+IDApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIWFkZGluZ1Byb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJzdGFydEFkZGluZ1Byb3BlcnRpZXMoKVwiIGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5BRERfUFJPUEVSVElFU1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkaW5nUHJvcGVydGllcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuZ3RoID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIkFwcGx5Q2hhbmdlc1RvQWxsKClcIiBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkRmlsZSB8fCAhc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eS0zMCBjdXJzb3Itbm90LWFsbG93ZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWxlIHx8ICFzZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLWdyYXktOTAwJzogIShcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGVkRmlsZSB8fCAhc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH1cIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIG14LTJcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5BUFBMWV9UT19BTExcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgYWRkaW5nUHJvcGVydGllcyAmJlxyXG4gICAgICAgICAgICAhdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzcyAmJlxyXG4gICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjcmVhdGVEb2N1bWVudCgpXCIgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvbiByZWxhdGl2ZVwiIFtkaXNhYmxlZF09XCJjcmVhdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNyZWF0aW5nOyBlbHNlIGxvYWRlclwiPnt7IFwiQlVUVE9OUy5DUkVBVEVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIFt2YWx1ZV09XCI5MFwiIFtzdHJva2VXaWR0aF09XCIzXCIgb3ZlcmxheT1cInRydWVcIiBbZGlhbWV0ZXJdPVwiMjVcIiBjb2xvcj1cIndhcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICBcIiAoY2xpY2spPVwidHJ5QWdhaW5DcmVhdGVEb2N1bWVudCgpXCIgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLlRSWV9BR0FJTlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWZpbGVGb3JtPy52YWxpZCB8fCBkaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0blwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkaW5nUHJvcGVydGllcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJjcmVhdGVXaGVuRmluaXNoKClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DUkVBVEVfV0hFTl9GSU5TSFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b24gbXgtMlwiIChjbGljayk9XCJtaW5pbWl6RGlhbG9nKClcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm51bWJlck9mVXBsb2FkZWRGaWxlcyAhPT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLk1JTklNSVpFRFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsYXRpb24tYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=