nuxeo-development-framework 2.0.9 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +8683 -454
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +84 -0
  4. package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
  5. package/esm2015/lib/components/activities-log/activities-log.module.js +30 -0
  6. package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
  7. package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
  8. package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
  9. package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
  10. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
  11. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
  12. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
  13. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
  14. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
  15. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +177 -0
  16. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +43 -0
  17. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
  18. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
  19. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +132 -0
  20. package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +264 -0
  21. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +119 -0
  22. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +91 -0
  23. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +455 -0
  24. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +26 -0
  25. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +77 -0
  26. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +114 -0
  27. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +80 -0
  28. package/esm2015/lib/components/file-manger/components/move/move.component.js +108 -0
  29. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +111 -0
  30. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +86 -0
  31. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +314 -0
  32. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +294 -0
  33. package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +257 -0
  34. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +64 -0
  35. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +71 -0
  36. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +358 -0
  37. package/esm2015/lib/components/file-manger/file-manager.abstract.js +1031 -0
  38. package/esm2015/lib/components/file-manger/file-manger.module.js +295 -0
  39. package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
  40. package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
  41. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +177 -0
  42. package/esm2015/lib/components/permissions/permission.service.js +118 -0
  43. package/esm2015/lib/components/permissions/permissions/permissions.component.js +232 -0
  44. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +117 -0
  45. package/esm2015/lib/components/permissions/permissions.module.js +71 -0
  46. package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
  47. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
  48. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
  49. package/esm2015/lib/components/user/user/user.component.js +29 -0
  50. package/esm2015/lib/components/user/user.module.js +30 -0
  51. package/esm2015/lib/directive/directive.module.js +9 -4
  52. package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
  53. package/esm2015/lib/shared/libraryShared.module.js +1 -4
  54. package/esm2015/lib/shared-services/dialog-mangment.service.js +61 -0
  55. package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
  56. package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
  57. package/esm2015/lib/shared-services/file-manager.service.js +793 -0
  58. package/esm2015/lib/shared-services/global-pdftron.service.js +46 -0
  59. package/esm2015/lib/shared-services/mainfolder.service.js +160 -0
  60. package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
  61. package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
  62. package/esm2015/lib/shared-services/shared-docs.service.js +135 -0
  63. package/esm2015/lib/shared-services/shared-services.module.js +20 -0
  64. package/esm2015/lib/shared-services/upload-file.service.js +29 -0
  65. package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
  66. package/esm2015/lib/shared-services/user.service.js +54 -0
  67. package/esm2015/public-api.js +65 -1
  68. package/fesm2015/nuxeo-development-framework.js +7969 -154
  69. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  70. package/lib/components/activities-log/activities-log/activities-log.component.d.ts +23 -0
  71. package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
  72. package/lib/components/activities-log/activities-log.module.d.ts +10 -0
  73. package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
  74. package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
  75. package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
  76. package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
  77. package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
  78. package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
  79. package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
  80. package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
  81. package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
  82. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +137 -0
  83. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +12 -0
  84. package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
  85. package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
  86. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +31 -0
  87. package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +41 -0
  88. package/lib/components/file-manger/components/copy/copy.component.d.ts +32 -0
  89. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +24 -0
  90. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +108 -0
  91. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +11 -0
  92. package/lib/components/file-manger/components/delete/delete.component.d.ts +30 -0
  93. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +56 -0
  94. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +23 -0
  95. package/lib/components/file-manger/components/move/move.component.d.ts +32 -0
  96. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +32 -0
  97. package/lib/components/file-manger/components/rename/rename.component.d.ts +25 -0
  98. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +95 -0
  99. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +58 -0
  100. package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
  101. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +34 -0
  102. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +24 -0
  103. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +194 -0
  104. package/lib/components/file-manger/file-manager.abstract.d.ts +173 -0
  105. package/lib/components/file-manger/file-manger.module.d.ts +59 -0
  106. package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
  107. package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
  108. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +44 -0
  109. package/lib/components/permissions/permission.service.d.ts +21 -0
  110. package/lib/components/permissions/permissions/permissions.component.d.ts +48 -0
  111. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
  112. package/lib/components/permissions/permissions.module.d.ts +21 -0
  113. package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
  114. package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
  115. package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
  116. package/lib/components/user/user/user.component.d.ts +12 -0
  117. package/lib/components/user/user.module.d.ts +10 -0
  118. package/lib/directive/directive.module.d.ts +3 -2
  119. package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
  120. package/lib/shared/libraryShared.module.d.ts +1 -1
  121. package/lib/shared-services/dialog-mangment.service.d.ts +15 -0
  122. package/lib/shared-services/dynamic-form.service.d.ts +24 -0
  123. package/lib/shared-services/file-manager.adapter.d.ts +48 -0
  124. package/lib/shared-services/file-manager.service.d.ts +94 -0
  125. package/lib/shared-services/global-pdftron.service.d.ts +10 -0
  126. package/lib/shared-services/mainfolder.service.d.ts +32 -0
  127. package/lib/shared-services/publishing-document.service.d.ts +25 -0
  128. package/lib/shared-services/recently-viewed.service.d.ts +17 -0
  129. package/lib/shared-services/shared-docs.service.d.ts +21 -0
  130. package/lib/shared-services/shared-services.module.d.ts +7 -0
  131. package/lib/shared-services/upload-file.service.d.ts +10 -0
  132. package/lib/shared-services/upload-managment.service.d.ts +72 -0
  133. package/lib/shared-services/user.service.d.ts +12 -0
  134. package/package.json +7 -6
  135. package/public-api.d.ts +62 -0
@@ -0,0 +1,257 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { UpdateModalComponent } from '../update-modal/update-modal.component';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { Utils } from 'formiojs';
6
+ import { UserPreferenceValues } from '../../../../Core/services/user/user-preferences.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "../../../../Core/services/user/user-preferences.service";
10
+ import * as i3 from "../../../../shared-services/dialog-mangment.service";
11
+ import * as i4 from "../../../../shared-services/dynamic-form.service";
12
+ import * as i5 from "../../../documents/services/documents.service";
13
+ import * as i6 from "../../../cts-tags/services/tags-api.service";
14
+ import * as i7 from "../../../../Core/services/translation/translation.service";
15
+ import * as i8 from "@angular/material/dialog";
16
+ import * as i9 from "../../../../shared-services/shared-docs.service";
17
+ import * as i10 from "../../../display-suitable-icon/display-suitable-icon/display-suitable-icon.component";
18
+ import * as i11 from "@angular/material/icon";
19
+ import * as i12 from "../../../dynamic-tabs/dynamic-tabs/dynamic-tabs.component";
20
+ import * as i13 from "../../../comments/components/comments-dashlet/comments-dashlet.component";
21
+ import * as i14 from "../../../activities-log/activities-log/activities-log.component";
22
+ import * as i15 from "../../../permissions/permissions/permissions.component";
23
+ import * as i16 from "../../../correspondence-relation/components/versions/versions.component";
24
+ import * as i17 from "../../../user/user/user.component";
25
+ import * as i18 from "../../../mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component";
26
+ import * as i19 from "../../../cts-tags/components/correspondence-tags/correspondence-tags.component";
27
+ import * as i20 from "../../../../directive/rtl/set-rtl.directive";
28
+ import * as i21 from "../../../../directive/permissions/permissions.directive";
29
+ import * as i22 from "@angular/material/tooltip";
30
+ import * as i23 from "@angular/cdk/bidi";
31
+ import * as i24 from "@ngx-translate/core";
32
+ import * as i25 from "../../../../pipes/localized-date.pipe";
33
+ export class SidepanelComponent {
34
+ constructor(datePipe, userPreferenceService, dialogMangmentService, dynamicFormService, documentService, tagsApiService, translationService, dialog, shared) {
35
+ this.datePipe = datePipe;
36
+ this.userPreferenceService = userPreferenceService;
37
+ this.dialogMangmentService = dialogMangmentService;
38
+ this.dynamicFormService = dynamicFormService;
39
+ this.documentService = documentService;
40
+ this.tagsApiService = tagsApiService;
41
+ this.translationService = translationService;
42
+ this.dialog = dialog;
43
+ this.shared = shared;
44
+ this.onDestroy$ = new Subject();
45
+ this.menuOpen = false;
46
+ this.sourcePage = 'files';
47
+ this.allowAddAndBlock = true;
48
+ this.sideMenuLoading = false;
49
+ this.onCloseSideMenu = new EventEmitter();
50
+ this.rtlEnabled = false;
51
+ this.isArabic = true;
52
+ this.showDetails = false;
53
+ this.myTabs = [];
54
+ this.sharedData = [];
55
+ this.sharedList = [];
56
+ this.sharedListUser = [];
57
+ // ----------------------------------------------open file side menu details-----------------------------------------------------------
58
+ this.customeHeader = 'lock,dc:creator,dc:contributors,gdoc:countryCategoryCode,gdoc:countryCode,gdoc:agencyNameCode,gdoc:agencyCategoryCode';
59
+ }
60
+ ngOnChanges(changes) {
61
+ if (this.menuOpen) {
62
+ this.openSideMenuDetails();
63
+ }
64
+ }
65
+ ngOnInit() {
66
+ this.myTabs = [
67
+ {
68
+ label: 'Details',
69
+ icon: 'subtitles',
70
+ template: this.detailsTemplate,
71
+ },
72
+ {
73
+ label: 'comments',
74
+ icon: 'textsms',
75
+ template: this.commentsTemplate,
76
+ },
77
+ {
78
+ label: 'permissions',
79
+ icon: 'lock',
80
+ template: this.permissionsTemplate,
81
+ },
82
+ {
83
+ label: 'activity',
84
+ icon: 'list_alt',
85
+ template: this.activityTemplate,
86
+ },
87
+ ];
88
+ if (this.userPreferenceService) {
89
+ this.userPreferenceService
90
+ .select(UserPreferenceValues.Locale)
91
+ .pipe(takeUntil(this.onDestroy$))
92
+ .subscribe((locale) => {
93
+ this.rtlEnabled = locale === 'ar' ? true : false;
94
+ });
95
+ }
96
+ this.tagsSubscription = this.tagsApiService.getUpdatedFile.subscribe((res) => {
97
+ this.documentService
98
+ .getDocument(this.selectedItem.entity.uid)
99
+ .subscribe((res) => {
100
+ this.sideMenuFileDetails = res;
101
+ });
102
+ });
103
+ this.languageSubscription = this.translationService.isArabic$.subscribe((res) => {
104
+ this.isArabic = res;
105
+ });
106
+ }
107
+ openUpdateFromSideMenu() {
108
+ this.closeDetailsMenu();
109
+ this.openUpdateModal();
110
+ }
111
+ openUpdateModal() {
112
+ this.dialog.open(UpdateModalComponent, {
113
+ width: '40%',
114
+ height: '70%',
115
+ maxWidth: 'auto',
116
+ panelClass: 'watcher-dialog-container',
117
+ data: {
118
+ id: this.selectedItem.id,
119
+ type: this.selectedItem.entity.type,
120
+ code: this.selectedItem.entity.properties['gdoc:documentTypeCode'] ? this.selectedItem.entity.properties['gdoc:documentTypeCode'] : this.selectedItem.entity.type,
121
+ isDirectory: this.selectedItem.isDirectory,
122
+ },
123
+ disableClose: true,
124
+ });
125
+ }
126
+ openSideMenuDetails() {
127
+ this.sideMenuLoading = true;
128
+ this.sideMenuFileDetails = {};
129
+ this.sharedListUser = [];
130
+ // this.showDetails = false; // if it was open close it then open it again to allow tabs to be rerendred
131
+ this.dynamicForm = null;
132
+ // if (this.selectedItem.isDirectory === false) {
133
+ this.dynamicFormService
134
+ .getDynamicForm(this.selectedItem.entity.properties['gdoc:documentTypeCode'] ? this.selectedItem.entity.properties['gdoc:documentTypeCode'] : this.selectedItem.entity.type)
135
+ .subscribe((res) => {
136
+ if (res && res['components'] && res['components'].length > 0) {
137
+ this.dynamicForm = res;
138
+ let prefix = res.prefix;
139
+ Utils.eachComponent(res.components, (comp) => {
140
+ if (comp.type === 'userSelector') {
141
+ // this.userSelectorKeys.push(comp.fixedKey);
142
+ let compPrefix = prefix[comp.fixedKey]
143
+ ? prefix[comp.fixedKey]
144
+ : '';
145
+ if (compPrefix) {
146
+ this.customeHeader =
147
+ this.customeHeader +
148
+ ',' +
149
+ compPrefix +
150
+ ':' +
151
+ comp.fixedKey;
152
+ }
153
+ else {
154
+ this.customeHeader =
155
+ this.customeHeader + ',' + comp.fixedKey;
156
+ }
157
+ }
158
+ });
159
+ }
160
+ this.documentService
161
+ .getDocument(this.selectedItem.entity.uid, {
162
+ 'X-NXfetch-document': this.customeHeader,
163
+ })
164
+ .subscribe((res) => {
165
+ this.sideMenuFileDetails = res;
166
+ this.dynamicFormData = res === null || res === void 0 ? void 0 : res.properties;
167
+ this.showDetails = true;
168
+ this.sideMenuLoading = false;
169
+ });
170
+ });
171
+ this.getSharesByMe();
172
+ // } else {
173
+ // setTimeout(() => {
174
+ // this.sideMenuFileDetails = this.selectedItem.entity
175
+ // this.showDetails = true
176
+ // }, 1000);
177
+ // }
178
+ }
179
+ closeDetailsMenu() {
180
+ this.showDetails = false;
181
+ this.sideMenuLoading = false;
182
+ this.onCloseSideMenu.emit();
183
+ }
184
+ // closeDetailsSideMenu(event) {
185
+ // if (!this.permissionService.disableClickOutSide) {
186
+ // if (
187
+ // event.id !== 'see_details' &&
188
+ // !this.checkForClass(event.className)
189
+ // ) {
190
+ // this.showDetails = false;
191
+ // }
192
+ // }
193
+ // }
194
+ checkForClass(className) {
195
+ let classes = [
196
+ 'detailed-menu',
197
+ 'ng-tag-label',
198
+ 'ng-option-label',
199
+ 'ng-star-inserted',
200
+ ];
201
+ let classFounded = false;
202
+ classes.map((item) => {
203
+ if (className.includes(item)) {
204
+ classFounded = true;
205
+ }
206
+ });
207
+ return classFounded;
208
+ }
209
+ getSharesByMe() {
210
+ this.sharedSub = this.shared.getSharesByMe(this.selectedItem.entity.uid).subscribe(res => {
211
+ this.sharedListUser = res;
212
+ });
213
+ }
214
+ ngOnDestroy() {
215
+ this.tagsSubscription ? this.tagsSubscription.unsubscribe() : null;
216
+ this.languageSubscription ? this.languageSubscription.unsubscribe() : null;
217
+ this.onDestroy$.next();
218
+ this.onDestroy$.complete();
219
+ }
220
+ }
221
+ SidepanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: SidepanelComponent, deps: [{ token: i1.DatePipe }, { token: i2.UserPreferencesService }, { token: i3.DialogMangmentService }, { token: i4.DynamicFormService }, { token: i5.DocumentsService }, { token: i6.TagsApiService }, { token: i7.TranslationService }, { token: i8.MatDialog }, { token: i9.SharedDocsService }], target: i0.ɵɵFactoryTarget.Component });
222
+ SidepanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: SidepanelComponent, selector: "app-sidepanel", inputs: { selectedItem: "selectedItem", menuOpen: "menuOpen", sourcePage: "sourcePage", allowAddAndBlock: "allowAddAndBlock" }, outputs: { onCloseSideMenu: "onCloseSideMenu" }, viewQueries: [{ propertyName: "detailsTemplate", first: true, predicate: ["detailsTemplate"], descendants: true, static: true }, { propertyName: "commentsTemplate", first: true, predicate: ["commentsTemplate"], descendants: true, static: true }, { propertyName: "activityTemplate", first: true, predicate: ["activityTemplate"], descendants: true, static: true }, { propertyName: "permissionsTemplate", first: true, predicate: ["permissionsTemplate"], descendants: true, static: true }, { propertyName: "filesTemplate", first: true, predicate: ["filesTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"side-menu-details\" SetRtl>\r\n <div class=\"h-full\" *ngIf=\"selectedItem && showDetails && !sideMenuLoading\">\r\n <div class=\"\">\r\n <div class=\"mb-3 px-5 py-1 w-100 flex border-b-2 items-center\">\r\n <!-- <title-with-icon class=\"-my-1.5\" [context]=\"selectedItem.entity\" [showTitle]=\"false\"></title-with-icon> -->\r\n <app-display-suitable-icon [data]=\"selectedItem\" [size]=\"'40px'\"></app-display-suitable-icon>\r\n\r\n <div class=\"justify-center flex flex-col flex-1 flex-grow-0 w-7/12\" *ngIf=\"!selectedItem.isDirectory\">\r\n <div class=\"text-base text-gray-500 font-bold truncate\"\r\n [title]=\"selectedItem.entity?.properties?.['file:content']?.['name']\"\r\n [alt]=\"selectedItem.entity?.properties?.['file:content']?.['name']\">\r\n {{selectedItem.entity?.properties?.['file:content']?.['name']}}\r\n </div>\r\n <div class=\"text-gray-500 text-sm\">\r\n {{((selectedItem.entity?.properties?.['file:content']?.['length']) / (1024 *\r\n 1024)).toFixed(2) }}\r\n MB\r\n </div>\r\n </div>\r\n <div class=\"\r\n d-flex\r\n items-center\r\n text-base text-gray-500\r\n font-bold\r\n \" *ngIf=\"selectedItem.isDirectory\">\r\n {{ selectedItem?.name }}\r\n </div>\r\n <ng-container *permission=\"{name: 'lockOwnerIfLocked', entity: selectedItem.entity}\">\r\n <mat-icon class=\"text-gray-500 cursor-pointer mx-3\"\r\n *permission=\"{name: 'canUpdate', entity: selectedItem.entity}\"\r\n matTooltip=\"{{ 'FOLDERS.UPDATE_DETAILS' | translate }}\"\r\n (click)=\"openUpdateFromSideMenu()\">edit</mat-icon>\r\n </ng-container>\r\n </div>\r\n <mat-icon class=\"close-icon text-gray-500\" (click)=\"closeDetailsMenu()\"\r\n [matTooltip]=\"'BUTTONS.CLOSE' | translate\">close</mat-icon>\r\n </div>\r\n <div class=\"dynamic-section\">\r\n <div class=\"mx-2 h-full\">\r\n <app-dynamic-tabs [tabs]=\"myTabs\"></app-dynamic-tabs>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"h-full font-bold d-flex justify-center items-center\" *ngIf=\"sideMenuLoading\">\r\n {{ \"loading\" | translate }}\r\n </div>\r\n</div>\r\n\r\n<!-- Comments -->\r\n<ng-template #commentsTemplate>\r\n <div class=\"overflow-auto h-full\">\r\n <app-comments-dashlet [correspondence]=\"sideMenuFileDetails\" [entityId]=\"selectedItem.entity.uid\"\r\n [showaddcomment]=\"true\" [row]=\"false\">\r\n </app-comments-dashlet>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- myLogFile -->\r\n<ng-template #activityTemplate>\r\n <!-- <cts-viewer-log [correspondence]=\"selectedItem.entity\"></cts-viewer-log> -->\r\n <div class=\"h-full mt-3\">\r\n <app-activities-log [documentId]=\"selectedItem.entity.uid\" [documentTitle]=\"selectedItem.entity.title\"\r\n [file]=\"sideMenuFileDetails\"></app-activities-log>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #permissionsTemplate>\r\n <div class=\"h-full overflow-auto px-2 mt-3\">\r\n <app-permissions [sourcePage]=\"sourcePage\"\r\n [allowAddAndBlock]=\"allowAddAndBlock\" [document]=\"sideMenuFileDetails\"\r\n [documentId]=\"selectedItem.entity.uid\"></app-permissions>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Files Tab -->\r\n<ng-template #filesTemplate>\r\n <div class=\"h-full overflow-auto px-2 mt-3\">\r\n <cts-versions [file]=\"selectedItem.entity\"></cts-versions>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Details -->\r\n<ng-template #detailsTemplate>\r\n <div class=\"pb-2 mt-3 h-full px-2 overflow-auto\">\r\n <div class=\"static-data\">\r\n <div class=\"mt-5\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"FOLDERS.TITLE_ONLY\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"dc:title\"] }}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"FOLDERS.DESCRIPTION_ONLY\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"dc:description\"] }}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"FOLDERS.CREATED_AT\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{\r\n dynamicFormData[\"dc:created\"]\r\n | localizedDate: \"dd MMMM yyyy\":(isArabic? 'ar-AR' : 'en-US')\r\n }}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"FOLDERS.LAST_MODIFIED\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{\r\n dynamicFormData[\"dc:modified\"]\r\n | localizedDate: \"dd MMMM yyyy\":(isArabic? 'ar-AR' : 'en-US')\r\n }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"super-document-fields\">\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:documentSubject\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DOCUMENT_SUBJECT\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:documentSubject\"] ? dynamicFormData[\"gdoc:documentSubject\"] : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:documentNumber\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DOCUMENT_NUMBER\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:documentNumber\"] ? dynamicFormData[\"gdoc:documentNumber\"] : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:documentReferenceNumber\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DOCUMENT_REF_NUMBER\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\" dir=\"ltr\">\r\n {{ dynamicFormData[\"gdoc:documentReferenceNumber\"] ?\r\n dynamicFormData[\"gdoc:documentReferenceNumber\"] : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:gDocumentDate\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DOCUMENT_DATE\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:gDocumentDate\"] ? (dynamicFormData[\"gdoc:gDocumentDate\"] |\r\n localizedDate: \"dd MMMM yyyy\":(isArabic? 'ar-AR' : 'en-US')) : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='(selectedItem.entity.category && selectedItem.entity.category !== {})'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.CATEGORY\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ (selectedItem.entity.category && selectedItem.entity.category !== {}) ?\r\n (isArabic ? selectedItem.entity.category.arabicName : selectedItem.entity.category.englishName)\r\n : '--'}}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\"\r\n *ngIf='(selectedItem.entity.categoryType && selectedItem.entity.categoryType.arabicName)'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.CATEGORY_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ (selectedItem.entity.categoryType && selectedItem.entity.categoryType.arabicName) ?\r\n (isArabic ? selectedItem.entity.categoryType.arabicName :\r\n selectedItem.entity.categoryType.englishName)\r\n : '--'}}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf='(selectedItem.entity.mainTopic && selectedItem.entity.mainTopic.arabicName)'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.MAIN_TOPIC\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ (selectedItem.entity.mainTopic && selectedItem.entity.mainTopic.arabicName) ?\r\n (isArabic ? selectedItem.entity.mainTopic.arabicName :\r\n selectedItem.entity.mainTopic.englishName)\r\n : '--'}}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\"\r\n *ngIf='(selectedItem.entity.documentType && selectedItem.entity.documentType.arabicName)'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DOCUMENT_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ (selectedItem.entity.documentType && selectedItem.entity.documentType.arabicName) ?\r\n (isArabic ? selectedItem.entity.documentType.arabicName :\r\n selectedItem.entity.documentType.englishTitle)\r\n : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:secrecyLevel\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.SCRECY_LEVEL\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ 'vocabulary.VOC_SecrecyLevel.' + dynamicFormData[\"gdoc:secrecyLevel\"] | translate}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:importance\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.IMPORTANCE_LEVEL\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ 'vocabulary.VOC_Importance.' + dynamicFormData[\"gdoc:importance\"] | translate}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='selectedItem.entity.department'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DEPARTMENT_NAME\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ selectedItem.entity.department ?\r\n (isArabic ? selectedItem.entity.department.arabicName :\r\n selectedItem.entity.department.englishName)\r\n : '--'}}\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:departmentCode\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.DEPARTMENT_CODE\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:departmentCode\"] ? dynamicFormData[\"gdoc:departmentCode\"] : '--'}}\r\n </div>\r\n </div> -->\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:agencyCategoryCode\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.AGENCY_CATEGORY_CODE\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:agencyCategoryCode\"] ?\r\n (isArabic ? dynamicFormData[\"gdoc:agencyCategoryCode\"]['properties']['label_ar']\r\n : dynamicFormData[\"gdoc:agencyCategoryCode\"]['properties']['label_en'])\r\n : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:agencyNameCode\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.AGENCY_NAME\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:agencyNameCode\"] ?\r\n (isArabic ? dynamicFormData[\"gdoc:agencyNameCode\"]['properties']['label_ar']\r\n : dynamicFormData[\"gdoc:agencyNameCode\"]['properties']['label_en'])\r\n : '--'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:countryCategoryCode\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.COUNTRY_CATEGORY_CODE\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:countryCategoryCode\"] ?\r\n (isArabic ? dynamicFormData[\"gdoc:countryCategoryCode\"]['properties']['label_ar']\r\n : dynamicFormData[\"gdoc:countryCategoryCode\"]['properties']['label_en'])\r\n : '--'}}\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:countryCode\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.COUNTRY_NAME\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:countryCode\"] ?\r\n (isArabic ? dynamicFormData[\"gdoc:countryCode\"]['properties']['label_ar']\r\n : dynamicFormData[\"gdoc:countryCode\"]['properties']['label_en'])\r\n : '--'}}\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf='dynamicFormData[\"gdoc:remarks\"]'>\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"CREATE.REMARKS\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm\">\r\n {{ dynamicFormData[\"gdoc:remarks\"] ? dynamicFormData[\"gdoc:remarks\"] : '--'}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"FOLDERS.BY\" | translate }}\r\n </div>\r\n <div class=\"text-gray-900 text-sm d-flex\">\r\n <div class=\"d-flex items-center bg-gray-100 rounded-xl\">\r\n <app-user [user]=\"dynamicFormData['dc:creator']\"></app-user>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"dynamicFormData['dc:contributors'].length > 0\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{ \"FOLDERS.CONTRUBITORS\" | translate }}\r\n </div>\r\n <div class=\"d-flex flex-wrap\">\r\n <div class=\"d-flex items-center bg-gray-100 rounded-xl mb-2\"\r\n *ngFor=\"let user of dynamicFormData['dc:contributors']\">\r\n <app-user [user]=\"user\"></app-user>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\" *ngIf=\"sharedListUser.length > 0\">\r\n <div class=\"text-gray-500 font-bold text-base\">\r\n {{\"share.shareWith\" | translate}}\r\n </div>\r\n <div class=\"d-flex flex-wrap\">\r\n <div class=\"d-flex items-center bg-gray-100 rounded-xl mb-2\" *ngFor=\"let user of sharedListUser\">\r\n <app-user [user]=\"user\"></app-user>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-5\" *ngIf=\"dynamicForm && dynamicFormData\">\r\n <app-multiple-dynamic-form-viewer [form]=\"dynamicForm\"\r\n [data]=\"dynamicFormData\"></app-multiple-dynamic-form-viewer>\r\n </div>\r\n <div class=\"tags-wrappers relative px-0 py-3\">\r\n <cts-correspondence-tags [correspondence]=\"sideMenuFileDetails\" [customClass]=\"'tags-dms-wrapper'\"\r\n [useParams]=\"true\" [addCustomApiName]=\"'Services.TagDocument'\"\r\n [deleteCustomApiName]=\"'Services.UntagDocument'\">\r\n </cts-correspondence-tags>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [""], components: [{ type: i10.DisplaySuitableIconComponent, selector: "app-display-suitable-icon", inputs: ["data", "size", "dataType", "archive"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.DynamicTabsComponent, selector: "app-dynamic-tabs", inputs: ["tabs", "selectedIndex"] }, { type: i13.CommentsDashletComponent, selector: "app-comments-dashlet", inputs: ["entityId", "correspondence", "row", "showaddcomment", "showCommentActions"] }, { type: i14.ActivitiesLogComponent, selector: "app-activities-log", inputs: ["documentId", "file", "documentTitle"], outputs: ["success"] }, { type: i15.PermissionsComponent, selector: "app-permissions", inputs: ["documentId", "document", "allowAddAndBlock", "sourcePage"] }, { type: i16.VersionsComponent, selector: "cts-versions", inputs: ["selectedVersion", "file", "actions"], outputs: ["handleActions"] }, { type: i17.UserComponent, selector: "app-user", inputs: ["user", "type"] }, { type: i18.MultipleDynamicFormViewerComponent, selector: "app-multiple-dynamic-form-viewer", inputs: ["form", "data"] }, { type: i19.CorrespondenceTagsComponent, selector: "cts-correspondence-tags", inputs: ["correspondence", "customClass", "addCustomApiName", "deleteCustomApiName", "useParams", "accordionMode", "systemTags", "accordionOpen", "title"] }], directives: [{ type: i20.SetRtlDirective, selector: "[SetRtl]" }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i21.PermissionsDirective, selector: "[permission]", inputs: ["permission"] }, { type: i22.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i23.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i24.TranslatePipe, "localizedDate": i25.LocalizedDatePipe }, encapsulation: i0.ViewEncapsulation.None });
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: SidepanelComponent, decorators: [{
224
+ type: Component,
225
+ args: [{
226
+ selector: 'app-sidepanel',
227
+ templateUrl: './sidepanel.component.html',
228
+ styleUrls: ['./sidepanel.component.scss'],
229
+ encapsulation: ViewEncapsulation.None
230
+ }]
231
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.UserPreferencesService }, { type: i3.DialogMangmentService }, { type: i4.DynamicFormService }, { type: i5.DocumentsService }, { type: i6.TagsApiService }, { type: i7.TranslationService }, { type: i8.MatDialog }, { type: i9.SharedDocsService }]; }, propDecorators: { detailsTemplate: [{
232
+ type: ViewChild,
233
+ args: ['detailsTemplate', { static: true }]
234
+ }], commentsTemplate: [{
235
+ type: ViewChild,
236
+ args: ['commentsTemplate', { static: true }]
237
+ }], activityTemplate: [{
238
+ type: ViewChild,
239
+ args: ['activityTemplate', { static: true }]
240
+ }], permissionsTemplate: [{
241
+ type: ViewChild,
242
+ args: ['permissionsTemplate', { static: true }]
243
+ }], filesTemplate: [{
244
+ type: ViewChild,
245
+ args: ['filesTemplate', { static: true }]
246
+ }], selectedItem: [{
247
+ type: Input
248
+ }], menuOpen: [{
249
+ type: Input
250
+ }], sourcePage: [{
251
+ type: Input
252
+ }], allowAddAndBlock: [{
253
+ type: Input
254
+ }], onCloseSideMenu: [{
255
+ type: Output
256
+ }] } });
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaWRlcGFuZWwvc2lkZXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaWRlcGFuZWwvc2lkZXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBOEIsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZLLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSTlFLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBMEIsTUFBTSx5REFBeUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV3ZILE1BQU0sT0FBTyxrQkFBa0I7SUFtQzdCLFlBQW1CLFFBQWtCLEVBQzNCLHFCQUE2QyxFQUM5QyxxQkFBNEMsRUFDM0Msa0JBQXNDLEVBQ3RDLGVBQWlDLEVBQ2pDLGNBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxNQUFpQixFQUNqQixNQUF5QjtRQVJoQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQzNCLDBCQUFxQixHQUFyQixx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QjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHL0MsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUcvQyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdsRCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbkMsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFVwZGF0ZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBkYXRlLW1vZGFsL3VwZGF0ZS1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dNYW5nbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZWREb2NzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy9zaGFyZWQtZG9jcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICdmb3JtaW9qcyc7XHJcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlVmFsdWVzLCBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy91c2VyL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IERvY3VtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kb2N1bWVudHMvc2VydmljZXMvZG9jdW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWdzQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N0cy10YWdzL3NlcnZpY2VzL3RhZ3MtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9Db3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2lkZXBhbmVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zaWRlcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlcGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgLCBPbkRlc3Ryb3l7XHJcbiAgQFZpZXdDaGlsZCgnZGV0YWlsc1RlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkZXRhaWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnY29tbWVudHNUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29tbWVudHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdhY3Rpdml0eVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBhY3Rpdml0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Blcm1pc3Npb25zVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHBlcm1pc3Npb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZmlsZXNUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZmlsZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW06IGFueTtcclxuICBASW5wdXQoKSBtZW51T3BlbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvdXJjZVBhZ2UgPSAnZmlsZXMnO1xyXG4gIEBJbnB1dCgpIGFsbG93QWRkQW5kQmxvY2sgPSB0cnVlO1xyXG4gIHNpZGVNZW51TG9hZGluZyA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBvbkNsb3NlU2lkZU1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGR5bmFtaWNGb3JtOyAvLyBjb250YWluIGR5bmFtaWMgZm9ybVxyXG4gIGR5bmFtaWNGb3JtRGF0YTsgLy8gY29udGFpbiBhbGwgZmlsZSBkYXRhIGluY2x1ZGluZyBkeW5hbWljIGZvcm0gZGF0YVxyXG4gIHJ0bEVuYWJsZWQgPSBmYWxzZTtcclxuICBpc0FyYWJpYyA9IHRydWU7XHJcbiAgc2lkZU1lbnVGaWxlRGV0YWlsczsgLy8gaG9sZCBkYXRhIG9mIGRhY3VtZW50IHRvIGJlIHNob3duIGluIHNpZGUgbWVudSBkZXRhaWxzXHJcbiAgc2hvd0RldGFpbHMgPSBmYWxzZTtcclxuICBteVRhYnMgPSBbXTtcclxuICBtdWx0aVNlbGVjdGVka2V5czogc3RyaW5nW107XHJcbiAgbGFuZ3VhZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB0YWdzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc2hhcmVkU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgc2hhcmVkRGF0YSA9IFtdO1xyXG4gIHNoYXJlZExpc3QgPSBbXTtcclxuICBzaGFyZWRMaXN0VXNlciA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZVNlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGlhbG9nTWFuZ21lbnRTZXJ2aWNlOiBEaWFsb2dNYW5nbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGR5bmFtaWNGb3JtU2VydmljZTogRHluYW1pY0Zvcm1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRhZ3NBcGlTZXJ2aWNlOiBUYWdzQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBzaGFyZWQ6IFNoYXJlZERvY3NTZXJ2aWNlLCkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1lbnVPcGVuKSB7XHJcbiAgICAgIHRoaXMub3BlblNpZGVNZW51RGV0YWlscygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm15VGFicyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiAnRGV0YWlscycsXHJcbiAgICAgICAgaWNvbjogJ3N1YnRpdGxlcycsXHJcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuZGV0YWlsc1RlbXBsYXRlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdjb21tZW50cycsXHJcbiAgICAgICAgaWNvbjogJ3RleHRzbXMnLFxyXG4gICAgICAgIHRlbXBsYXRlOiB0aGlzLmNvbW1lbnRzVGVtcGxhdGUsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogJ3Blcm1pc3Npb25zJyxcclxuICAgICAgICBpY29uOiAnbG9jaycsXHJcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMucGVybWlzc2lvbnNUZW1wbGF0ZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiAnYWN0aXZpdHknLFxyXG4gICAgICAgIGljb246ICdsaXN0X2FsdCcsXHJcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuYWN0aXZpdHlUZW1wbGF0ZSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBpZiAodGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UpIHtcclxuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2VcclxuICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLkxvY2FsZSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcclxuICAgICAgICAgIHRoaXMucnRsRW5hYmxlZCA9IGxvY2FsZSA9PT0gJ2FyJyA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMudGFnc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFnc0FwaVNlcnZpY2UuZ2V0VXBkYXRlZEZpbGUuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcclxuICAgICAgICAgIC5nZXREb2N1bWVudCh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2lkZU1lbnVGaWxlRGV0YWlscyA9IHJlcztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubGFuZ3VhZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pc0FyYWJpYyQuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0FyYWJpYyA9IHJlcztcclxuXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvcGVuVXBkYXRlRnJvbVNpZGVNZW51KCkge1xyXG4gICAgdGhpcy5jbG9zZURldGFpbHNNZW51KCk7XHJcbiAgICB0aGlzLm9wZW5VcGRhdGVNb2RhbCgpO1xyXG4gIH1cclxuXHJcbiAgb3BlblVwZGF0ZU1vZGFsKCkge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihVcGRhdGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzQwJScsXHJcbiAgICAgIGhlaWdodDogJzcwJScsXHJcbiAgICAgIG1heFdpZHRoOiAnYXV0bycsXHJcbiAgICAgIHBhbmVsQ2xhc3M6ICd3YXRjaGVyLWRpYWxvZy1jb250YWluZXInLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaWQ6IHRoaXMuc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgIHR5cGU6IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS50eXBlLFxyXG4gICAgICAgIGNvZGU6IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS5wcm9wZXJ0aWVzWydnZG9jOmRvY3VtZW50VHlwZUNvZGUnXSA/IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS5wcm9wZXJ0aWVzWydnZG9jOmRvY3VtZW50VHlwZUNvZGUnXSA6IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS50eXBlLFxyXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0aGlzLnNlbGVjdGVkSXRlbS5pc0RpcmVjdG9yeSxcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tb3BlbiBmaWxlIHNpZGUgbWVudSBkZXRhaWxzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBjdXN0b21lSGVhZGVyID1cclxuICAgICdsb2NrLGRjOmNyZWF0b3IsZGM6Y29udHJpYnV0b3JzLGdkb2M6Y291bnRyeUNhdGVnb3J5Q29kZSxnZG9jOmNvdW50cnlDb2RlLGdkb2M6YWdlbmN5TmFtZUNvZGUsZ2RvYzphZ2VuY3lDYXRlZ29yeUNvZGUnO1xyXG5cclxuICBvcGVuU2lkZU1lbnVEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5zaWRlTWVudUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zaWRlTWVudUZpbGVEZXRhaWxzID0ge307XHJcbiAgICB0aGlzLnNoYXJlZExpc3RVc2VyID0gW107XHJcbiAgICAvLyB0aGlzLnNob3dEZXRhaWxzID0gZmFsc2U7IC8vIGlmIGl0IHdhcyBvcGVuIGNsb3NlIGl0IHRoZW4gb3BlbiBpdCBhZ2FpbiB0byBhbGxvdyB0YWJzIHRvIGJlIHJlcmVuZHJlZFxyXG4gICAgdGhpcy5keW5hbWljRm9ybSA9IG51bGw7XHJcbiAgICAvLyBpZiAodGhpcy5zZWxlY3RlZEl0ZW0uaXNEaXJlY3RvcnkgPT09IGZhbHNlKSB7XHJcbiAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZVxyXG4gICAgICAuZ2V0RHluYW1pY0Zvcm0odGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXNbJ2dkb2M6ZG9jdW1lbnRUeXBlQ29kZSddID8gdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXNbJ2dkb2M6ZG9jdW1lbnRUeXBlQ29kZSddIDogdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnR5cGUpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzWydjb21wb25lbnRzJ10gJiYgcmVzWydjb21wb25lbnRzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljRm9ybSA9IHJlcztcclxuICAgICAgICAgIGxldCBwcmVmaXggPSByZXMucHJlZml4O1xyXG4gICAgICAgICAgVXRpbHMuZWFjaENvbXBvbmVudChyZXMuY29tcG9uZW50cywgKGNvbXApID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbXAudHlwZSA9PT0gJ3VzZXJTZWxlY3RvcicpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnVzZXJTZWxlY3RvcktleXMucHVzaChjb21wLmZpeGVkS2V5KTtcclxuICAgICAgICAgICAgICBsZXQgY29tcFByZWZpeCA9IHByZWZpeFtjb21wLmZpeGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgPyBwcmVmaXhbY29tcC5maXhlZEtleV1cclxuICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbXBQcmVmaXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tZUhlYWRlciA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tZUhlYWRlciArXHJcbiAgICAgICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBQcmVmaXggK1xyXG4gICAgICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICAgICBjb21wLmZpeGVkS2V5O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWVIZWFkZXIgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWVIZWFkZXIgKyAnLCcgKyBjb21wLmZpeGVkS2V5O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxyXG4gICAgICAgICAgLmdldERvY3VtZW50KHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWQsIHtcclxuICAgICAgICAgICAgJ1gtTlhmZXRjaC1kb2N1bWVudCc6IHRoaXMuY3VzdG9tZUhlYWRlcixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaWRlTWVudUZpbGVEZXRhaWxzID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtRGF0YSA9IHJlcz8ucHJvcGVydGllcztcclxuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlscyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2lkZU1lbnVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmdldFNoYXJlc0J5TWUoKTtcclxuXHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLnNpZGVNZW51RmlsZURldGFpbHMgPSB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHlcclxuICAgIC8vICAgICB0aGlzLnNob3dEZXRhaWxzID0gdHJ1ZVxyXG4gICAgLy8gICB9LCAxMDAwKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGNsb3NlRGV0YWlsc01lbnUoKSB7XHJcbiAgICB0aGlzLnNob3dEZXRhaWxzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNpZGVNZW51TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkNsb3NlU2lkZU1lbnUuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2xvc2VEZXRhaWxzU2lkZU1lbnUoZXZlbnQpIHtcclxuICAvLyAgIGlmICghdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlKSB7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBldmVudC5pZCAhPT0gJ3NlZV9kZXRhaWxzJyAmJlxyXG4gIC8vICAgICAgICF0aGlzLmNoZWNrRm9yQ2xhc3MoZXZlbnQuY2xhc3NOYW1lKVxyXG4gIC8vICAgICApIHtcclxuICAvLyAgICAgICB0aGlzLnNob3dEZXRhaWxzID0gZmFsc2U7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGNoZWNrRm9yQ2xhc3MoY2xhc3NOYW1lKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IFtcclxuICAgICAgJ2RldGFpbGVkLW1lbnUnLFxyXG4gICAgICAnbmctdGFnLWxhYmVsJyxcclxuICAgICAgJ25nLW9wdGlvbi1sYWJlbCcsXHJcbiAgICAgICduZy1zdGFyLWluc2VydGVkJyxcclxuICAgIF07XHJcbiAgICBsZXQgY2xhc3NGb3VuZGVkID0gZmFsc2U7XHJcbiAgICBjbGFzc2VzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoY2xhc3NOYW1lLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgICAgICAgY2xhc3NGb3VuZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2xhc3NGb3VuZGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2hhcmVzQnlNZSgpIHtcclxuICAgIHRoaXMuc2hhcmVkU3ViID0gdGhpcy5zaGFyZWQuZ2V0U2hhcmVzQnlNZSh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zaGFyZWRMaXN0VXNlciA9IHJlcztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudGFnc1N1YnNjcmlwdGlvbiA/IHRoaXMudGFnc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogbnVsbDtcclxuICAgIHRoaXMubGFuZ3VhZ2VTdWJzY3JpcHRpb24gPyB0aGlzLmxhbmd1YWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiBudWxsO1xyXG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic2lkZS1tZW51LWRldGFpbHNcIiBTZXRSdGw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsXCIgKm5nSWY9XCJzZWxlY3RlZEl0ZW0gJiYgc2hvd0RldGFpbHMgJiYgIXNpZGVNZW51TG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcHgtNSBweS0xIHctMTAwIGZsZXggYm9yZGVyLWItMiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHRpdGxlLXdpdGgtaWNvbiBjbGFzcz1cIi1teS0xLjVcIiBbY29udGV4dF09XCJzZWxlY3RlZEl0ZW0uZW50aXR5XCIgW3Nob3dUaXRsZV09XCJmYWxzZVwiPjwvdGl0bGUtd2l0aC1pY29uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtZGlzcGxheS1zdWl0YWJsZS1pY29uIFtkYXRhXT1cInNlbGVjdGVkSXRlbVwiIFtzaXplXT1cIic0MHB4J1wiPjwvYXBwLWRpc3BsYXktc3VpdGFibGUtaWNvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianVzdGlmeS1jZW50ZXIgZmxleCBmbGV4LWNvbCAgIGZsZXgtMSBmbGV4LWdyb3ctMCB3LTcvMTJcIiAqbmdJZj1cIiFzZWxlY3RlZEl0ZW0uaXNEaXJlY3RvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIHRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRydW5jYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNlbGVjdGVkSXRlbS5lbnRpdHk/LnByb3BlcnRpZXM/LlsnZmlsZTpjb250ZW50J10/LlsnbmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJzZWxlY3RlZEl0ZW0uZW50aXR5Py5wcm9wZXJ0aWVzPy5bJ2ZpbGU6Y29udGVudCddPy5bJ25hbWUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkSXRlbS5lbnRpdHk/LnByb3BlcnRpZXM/LlsnZmlsZTpjb250ZW50J10/LlsnbmFtZSddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KChzZWxlY3RlZEl0ZW0uZW50aXR5Py5wcm9wZXJ0aWVzPy5bJ2ZpbGU6Y29udGVudCddPy5bJ2xlbmd0aCddKSAvICgxMDI0ICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCkpLnRvRml4ZWQoMikgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgTUJcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZC1mbGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYmFzZSB0ZXh0LWdyYXktNTAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBmb250LWJvbGRcclxuICAgICAgICAgICAgICAgICAgICAgXCIgKm5nSWY9XCJzZWxlY3RlZEl0ZW0uaXNEaXJlY3RvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW0/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcGVybWlzc2lvbj1cIntuYW1lOiAnbG9ja093bmVySWZMb2NrZWQnLCBlbnRpdHk6IHNlbGVjdGVkSXRlbS5lbnRpdHl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBjdXJzb3ItcG9pbnRlciAgbXgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpwZXJtaXNzaW9uPVwie25hbWU6ICdjYW5VcGRhdGUnLCBlbnRpdHk6IHNlbGVjdGVkSXRlbS5lbnRpdHl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7ICdGT0xERVJTLlVQREFURV9ERVRBSUxTJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuVXBkYXRlRnJvbVNpZGVNZW51KClcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2xvc2UtaWNvbiB0ZXh0LWdyYXktNTAwXCIgKGNsaWNrKT1cImNsb3NlRGV0YWlsc01lbnUoKVwiXHJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInQlVUVE9OUy5DTE9TRScgfCB0cmFuc2xhdGVcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBoLWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy10YWJzIFt0YWJzXT1cIm15VGFic1wiPjwvYXBwLWR5bmFtaWMtdGFicz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZm9udC1ib2xkIGQtZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cInNpZGVNZW51TG9hZGluZ1wiPlxyXG4gICAgICAgIHt7IFwibG9hZGluZ1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIENvbW1lbnRzIC0tPlxyXG48bmctdGVtcGxhdGUgI2NvbW1lbnRzVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBoLWZ1bGxcIj5cclxuICAgICAgICA8YXBwLWNvbW1lbnRzLWRhc2hsZXQgW2NvcnJlc3BvbmRlbmNlXT1cInNpZGVNZW51RmlsZURldGFpbHNcIiBbZW50aXR5SWRdPVwic2VsZWN0ZWRJdGVtLmVudGl0eS51aWRcIlxyXG4gICAgICAgICAgICBbc2hvd2FkZGNvbW1lbnRdPVwidHJ1ZVwiIFtyb3ddPVwiZmFsc2VcIj5cclxuICAgICAgICA8L2FwcC1jb21tZW50cy1kYXNobGV0PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIG15TG9nRmlsZSAtLT5cclxuPG5nLXRlbXBsYXRlICNhY3Rpdml0eVRlbXBsYXRlPlxyXG4gICAgPCEtLSA8Y3RzLXZpZXdlci1sb2cgW2NvcnJlc3BvbmRlbmNlXT1cInNlbGVjdGVkSXRlbS5lbnRpdHlcIj48L2N0cy12aWV3ZXItbG9nPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgbXQtM1wiPlxyXG4gICAgICAgIDxhcHAtYWN0aXZpdGllcy1sb2cgW2RvY3VtZW50SWRdPVwic2VsZWN0ZWRJdGVtLmVudGl0eS51aWRcIiBbZG9jdW1lbnRUaXRsZV09XCJzZWxlY3RlZEl0ZW0uZW50aXR5LnRpdGxlXCJcclxuICAgICAgICAgICAgW2ZpbGVdPVwic2lkZU1lbnVGaWxlRGV0YWlsc1wiPjwvYXBwLWFjdGl2aXRpZXMtbG9nPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Blcm1pc3Npb25zVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIG92ZXJmbG93LWF1dG8gcHgtMiBtdC0zXCI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucyBbc291cmNlUGFnZV09XCJzb3VyY2VQYWdlXCJcclxuICAgICAgICBbYWxsb3dBZGRBbmRCbG9ja109XCJhbGxvd0FkZEFuZEJsb2NrXCIgIFtkb2N1bWVudF09XCJzaWRlTWVudUZpbGVEZXRhaWxzXCJcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwic2VsZWN0ZWRJdGVtLmVudGl0eS51aWRcIj48L2FwcC1wZXJtaXNzaW9ucz5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBGaWxlcyBUYWIgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmlsZXNUZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgb3ZlcmZsb3ctYXV0byBweC0yIG10LTNcIj5cclxuICAgICAgICA8Y3RzLXZlcnNpb25zIFtmaWxlXT1cInNlbGVjdGVkSXRlbS5lbnRpdHlcIj48L2N0cy12ZXJzaW9ucz5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBEZXRhaWxzIC0tPlxyXG48bmctdGVtcGxhdGUgI2RldGFpbHNUZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwYi0yIG10LTMgaC1mdWxsIHB4LTIgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0aWMtZGF0YVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwiRk9MREVSUy5USVRMRV9PTkxZXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGR5bmFtaWNGb3JtRGF0YVtcImRjOnRpdGxlXCJdIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgXCJGT0xERVJTLkRFU0NSSVBUSU9OX09OTFlcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZHluYW1pY0Zvcm1EYXRhW1wiZGM6ZGVzY3JpcHRpb25cIl0gfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBcIkZPTERFUlMuQ1JFQVRFRF9BVFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWNGb3JtRGF0YVtcImRjOmNyZWF0ZWRcIl1cclxuICAgICAgICAgICAgICAgICAgICB8IGxvY2FsaXplZERhdGU6IFwiZGQgTU1NTSB5eXl5XCI6KGlzQXJhYmljPyAnYXItQVInIDogJ2VuLVVTJylcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwiRk9MREVSUy5MQVNUX01PRElGSUVEXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY0Zvcm1EYXRhW1wiZGM6bW9kaWZpZWRcIl1cclxuICAgICAgICAgICAgICAgICAgICB8IGxvY2FsaXplZERhdGU6IFwiZGQgTU1NTSB5eXl5XCI6KGlzQXJhYmljPyAnYXItQVInIDogJ2VuLVVTJylcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cGVyLWRvY3VtZW50LWZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj0nZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpkb2N1bWVudFN1YmplY3RcIl0nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuRE9DVU1FTlRfU1VCSkVDVFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmRvY3VtZW50U3ViamVjdFwiXSA/IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6ZG9jdW1lbnRTdWJqZWN0XCJdIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdkeW5hbWljRm9ybURhdGFbXCJnZG9jOmRvY3VtZW50TnVtYmVyXCJdJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRPQ1VNRU5UX05VTUJFUlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmRvY3VtZW50TnVtYmVyXCJdID8gZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpkb2N1bWVudE51bWJlclwiXSA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj0nZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpkb2N1bWVudFJlZmVyZW5jZU51bWJlclwiXSc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ET0NVTUVOVF9SRUZfTlVNQkVSXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCIgZGlyPVwibHRyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6ZG9jdW1lbnRSZWZlcmVuY2VOdW1iZXJcIl0gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmRvY3VtZW50UmVmZXJlbmNlTnVtYmVyXCJdIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdkeW5hbWljRm9ybURhdGFbXCJnZG9jOmdEb2N1bWVudERhdGVcIl0nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuRE9DVU1FTlRfREFURVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmdEb2N1bWVudERhdGVcIl0gPyAoZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpnRG9jdW1lbnREYXRlXCJdIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxpemVkRGF0ZTogXCJkZCBNTU1NIHl5eXlcIjooaXNBcmFiaWM/ICdhci1BUicgOiAnZW4tVVMnKSkgOiAnLS0nfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9JyhzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5ICYmIHNlbGVjdGVkSXRlbS5lbnRpdHkuY2F0ZWdvcnkgIT09IHt9KSc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5DQVRFR09SWVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAoc2VsZWN0ZWRJdGVtLmVudGl0eS5jYXRlZ29yeSAmJiBzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5ICE9PSB7fSkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNBcmFiaWMgPyBzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5LmFyYWJpY05hbWUgOiBzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5LmVuZ2xpc2hOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9JyhzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5VHlwZSAmJiBzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5VHlwZS5hcmFiaWNOYW1lKSc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5DQVRFR09SWV9UWVBFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5VHlwZSAmJiBzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5VHlwZS5hcmFiaWNOYW1lKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FyYWJpYyA/IHNlbGVjdGVkSXRlbS5lbnRpdHkuY2F0ZWdvcnlUeXBlLmFyYWJpY05hbWUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0uZW50aXR5LmNhdGVnb3J5VHlwZS5lbmdsaXNoTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj0nKHNlbGVjdGVkSXRlbS5lbnRpdHkubWFpblRvcGljICYmIHNlbGVjdGVkSXRlbS5lbnRpdHkubWFpblRvcGljLmFyYWJpY05hbWUpJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLk1BSU5fVE9QSUNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgKHNlbGVjdGVkSXRlbS5lbnRpdHkubWFpblRvcGljICYmIHNlbGVjdGVkSXRlbS5lbnRpdHkubWFpblRvcGljLmFyYWJpY05hbWUpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzQXJhYmljID8gc2VsZWN0ZWRJdGVtLmVudGl0eS5tYWluVG9waWMuYXJhYmljTmFtZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbS5lbnRpdHkubWFpblRvcGljLmVuZ2xpc2hOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9JyhzZWxlY3RlZEl0ZW0uZW50aXR5LmRvY3VtZW50VHlwZSAmJiBzZWxlY3RlZEl0ZW0uZW50aXR5LmRvY3VtZW50VHlwZS5hcmFiaWNOYW1lKSc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ET0NVTUVOVF9UWVBFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChzZWxlY3RlZEl0ZW0uZW50aXR5LmRvY3VtZW50VHlwZSAmJiBzZWxlY3RlZEl0ZW0uZW50aXR5LmRvY3VtZW50VHlwZS5hcmFiaWNOYW1lKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FyYWJpYyA/IHNlbGVjdGVkSXRlbS5lbnRpdHkuZG9jdW1lbnRUeXBlLmFyYWJpY05hbWUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0uZW50aXR5LmRvY3VtZW50VHlwZS5lbmdsaXNoVGl0bGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdkeW5hbWljRm9ybURhdGFbXCJnZG9jOnNlY3JlY3lMZXZlbFwiXSc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5TQ1JFQ1lfTEVWRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3ZvY2FidWxhcnkuVk9DX1NlY3JlY3lMZXZlbC4nICsgZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpzZWNyZWN5TGV2ZWxcIl0gfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj0nZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzppbXBvcnRhbmNlXCJdJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLklNUE9SVEFOQ0VfTEVWRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3ZvY2FidWxhcnkuVk9DX0ltcG9ydGFuY2UuJyArIGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6aW1wb3J0YW5jZVwiXSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdzZWxlY3RlZEl0ZW0uZW50aXR5LmRlcGFydG1lbnQnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuREVQQVJUTUVOVF9OQU1FXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbS5lbnRpdHkuZGVwYXJ0bWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FyYWJpYyA/IHNlbGVjdGVkSXRlbS5lbnRpdHkuZGVwYXJ0bWVudC5hcmFiaWNOYW1lIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLmVudGl0eS5kZXBhcnRtZW50LmVuZ2xpc2hOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdkeW5hbWljRm9ybURhdGFbXCJnZG9jOmRlcGFydG1lbnRDb2RlXCJdJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRFUEFSVE1FTlRfQ09ERVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmRlcGFydG1lbnRDb2RlXCJdID8gZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpkZXBhcnRtZW50Q29kZVwiXSA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9J2R5bmFtaWNGb3JtRGF0YVtcImdkb2M6YWdlbmN5Q2F0ZWdvcnlDb2RlXCJdJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkFHRU5DWV9DQVRFR09SWV9DT0RFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6YWdlbmN5Q2F0ZWdvcnlDb2RlXCJdID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzQXJhYmljID8gZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzphZ2VuY3lDYXRlZ29yeUNvZGVcIl1bJ3Byb3BlcnRpZXMnXVsnbGFiZWxfYXInXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6YWdlbmN5Q2F0ZWdvcnlDb2RlXCJdWydwcm9wZXJ0aWVzJ11bJ2xhYmVsX2VuJ10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdkeW5hbWljRm9ybURhdGFbXCJnZG9jOmFnZW5jeU5hbWVDb2RlXCJdJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkFHRU5DWV9OQU1FXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6YWdlbmN5TmFtZUNvZGVcIl0gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNBcmFiaWMgPyBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmFnZW5jeU5hbWVDb2RlXCJdWydwcm9wZXJ0aWVzJ11bJ2xhYmVsX2FyJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkeW5hbWljRm9ybURhdGFbXCJnZG9jOmFnZW5jeU5hbWVDb2RlXCJdWydwcm9wZXJ0aWVzJ11bJ2xhYmVsX2VuJ10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPSdkeW5hbWljRm9ybURhdGFbXCJnZG9jOmNvdW50cnlDYXRlZ29yeUNvZGVcIl0nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuQ09VTlRSWV9DQVRFR09SWV9DT0RFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6Y291bnRyeUNhdGVnb3J5Q29kZVwiXSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FyYWJpYyA/IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6Y291bnRyeUNhdGVnb3J5Q29kZVwiXVsncHJvcGVydGllcyddWydsYWJlbF9hciddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpjb3VudHJ5Q2F0ZWdvcnlDb2RlXCJdWydwcm9wZXJ0aWVzJ11bJ2xhYmVsX2VuJ10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ319XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj0nZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpjb3VudHJ5Q29kZVwiXSc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5DT1VOVFJZX05BTUVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpjb3VudHJ5Q29kZVwiXSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FyYWJpYyA/IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6Y291bnRyeUNvZGVcIl1bJ3Byb3BlcnRpZXMnXVsnbGFiZWxfYXInXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGR5bmFtaWNGb3JtRGF0YVtcImdkb2M6Y291bnRyeUNvZGVcIl1bJ3Byb3BlcnRpZXMnXVsnbGFiZWxfZW4nXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj0nZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpyZW1hcmtzXCJdJz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLlJFTUFSS1NcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpyZW1hcmtzXCJdID8gZHluYW1pY0Zvcm1EYXRhW1wiZ2RvYzpyZW1hcmtzXCJdIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS01MDAgZm9udC1ib2xkIHRleHQtYmFzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwiRk9MREVSUy5CWVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHRleHQtc20gZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBpdGVtcy1jZW50ZXIgYmctZ3JheS0xMDAgcm91bmRlZC14bFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXVzZXIgW3VzZXJdPVwiZHluYW1pY0Zvcm1EYXRhWydkYzpjcmVhdG9yJ11cIj48L2FwcC11c2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwiZHluYW1pY0Zvcm1EYXRhWydkYzpjb250cmlidXRvcnMnXS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgXCJGT0xERVJTLkNPTlRSVUJJVE9SU1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBpdGVtcy1jZW50ZXIgYmctZ3JheS0xMDAgcm91bmRlZC14bCBtYi0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHVzZXIgb2YgZHluYW1pY0Zvcm1EYXRhWydkYzpjb250cmlidXRvcnMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXVzZXIgW3VzZXJdPVwidXNlclwiPjwvYXBwLXVzZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJzaGFyZWRMaXN0VXNlci5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTUwMCBmb250LWJvbGQgdGV4dC1iYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcInNoYXJlLnNoYXJlV2l0aFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGl0ZW1zLWNlbnRlciBiZy1ncmF5LTEwMCByb3VuZGVkLXhsIG1iLTJcIiAqbmdGb3I9XCJsZXQgdXNlciBvZiBzaGFyZWRMaXN0VXNlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXVzZXIgW3VzZXJdPVwidXNlclwiPjwvYXBwLXVzZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIiAqbmdJZj1cImR5bmFtaWNGb3JtICYmIGR5bmFtaWNGb3JtRGF0YVwiPlxyXG4gICAgICAgICAgICA8YXBwLW11bHRpcGxlLWR5bmFtaWMtZm9ybS12aWV3ZXIgW2Zvcm1dPVwiZHluYW1pY0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiZHluYW1pY0Zvcm1EYXRhXCI+PC9hcHAtbXVsdGlwbGUtZHluYW1pYy1mb3JtLXZpZXdlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFncy13cmFwcGVycyByZWxhdGl2ZSBweC0wIHB5LTNcIj5cclxuICAgICAgICAgICAgPGN0cy1jb3JyZXNwb25kZW5jZS10YWdzIFtjb3JyZXNwb25kZW5jZV09XCJzaWRlTWVudUZpbGVEZXRhaWxzXCIgW2N1c3RvbUNsYXNzXT1cIid0YWdzLWRtcy13cmFwcGVyJ1wiXHJcbiAgICAgICAgICAgICAgICBbdXNlUGFyYW1zXT1cInRydWVcIiBbYWRkQ3VzdG9tQXBpTmFtZV09XCInU2VydmljZXMuVGFnRG9jdW1lbnQnXCJcclxuICAgICAgICAgICAgICAgIFtkZWxldGVDdXN0b21BcGlOYW1lXT1cIidTZXJ2aWNlcy5VbnRhZ0RvY3VtZW50J1wiPlxyXG4gICAgICAgICAgICA8L2N0cy1jb3JyZXNwb25kZW5jZS10YWdzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -0,0 +1,64 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../../shared-services/upload-managment.service";
5
+ import * as i2 from "@angular/material/dialog";
6
+ import * as i3 from "../../../../shared-services/dialog-mangment.service";
7
+ import * as i4 from "../../../../shared-services/dynamic-form.service";
8
+ import * as i5 from "../../../dynamic-form/components/dynamic-form/dynamic-form.component";
9
+ import * as i6 from "@angular/forms";
10
+ import * as i7 from "@angular/common";
11
+ import * as i8 from "@ngx-translate/core";
12
+ export class TemplateModalComponent {
13
+ constructor(data, uploadMangmentService, dialogRef, dialogMangmentService, dynamicFormService) {
14
+ this.data = data;
15
+ this.uploadMangmentService = uploadMangmentService;
16
+ this.dialogRef = dialogRef;
17
+ this.dialogMangmentService = dialogMangmentService;
18
+ this.dynamicFormService = dynamicFormService;
19
+ this.selectedFile = {
20
+ title: '',
21
+ description: '',
22
+ fileType: '',
23
+ dynamicForm: '',
24
+ dynamicData: {
25
+ valid: false,
26
+ data: {}
27
+ },
28
+ file: ''
29
+ };
30
+ this.showRenderer = false;
31
+ this.temporaryDyanmicData = {};
32
+ }
33
+ ngOnInit() {
34
+ this.fileType = this.dialogMangmentService.fileType;
35
+ this.source = this.dialogMangmentService.addingFrom;
36
+ // this.dynamicFormService.getDynamicForm(this.fileType).subscribe(res => {
37
+ this.selectedFile.dynamicForm = this.dialogMangmentService.storedDynamicForm;
38
+ this.showRenderer = true;
39
+ // })
40
+ }
41
+ ondynamicFormChange(dynamicData) {
42
+ if (dynamicData.data) {
43
+ console.log(dynamicData.data);
44
+ this.selectedFile.dynamicData = Object.assign({}, dynamicData);
45
+ }
46
+ }
47
+ closeDialog() {
48
+ this.dialogRef.close(false);
49
+ }
50
+ }
51
+ TemplateModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TemplateModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.UploadManagmentService }, { token: i2.MatDialogRef }, { token: i3.DialogMangmentService }, { token: i4.DynamicFormService }], target: i0.ɵɵFactoryTarget.Component });
52
+ TemplateModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: TemplateModalComponent, selector: "app-template-modal", ngImport: i0, template: "<div class=\"template-modal-wraper d-flex relative h-full\">\r\n <div class=\"modal-body-section d-flex w-full\">\r\n <!-- forms and properties -->\r\n <div class=\"forms-section w-1/2\">\r\n <div class=\"\">\r\n <div class=\"mb-5\">\r\n <div class=\"text-base font-bold text-gray-900\">\r\n {{ \"CREATE.FILE_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-base text-gray-900\">{{ fileType }}</div>\r\n </div>\r\n <div class=\"file-fields mt-3\">\r\n <form #fileForm=\"ngForm\">\r\n <div class=\"single-field mb-3\">\r\n <div class=\"text-base font-bold text-gray-900\">\r\n {{ \"CREATE.TITLE\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input\r\n class=\"\r\n h-10\r\n w-full\r\n bg-gray-100\r\n p-1\r\n border-2 border-gray-200\r\n rounded\r\n \"\r\n [(ngModel)]=\"selectedFile.title\"\r\n required\r\n name=\"title\"\r\n id=\"title\"\r\n />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"text-base font-bold text-gray-900\">\r\n {{ \"CREATE.DESCRIPTION\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input\r\n class=\"\r\n h-10\r\n w-full\r\n bg-gray-100\r\n p-1\r\n border-2 border-gray-200\r\n rounded\r\n \"\r\n [(ngModel)]=\"selectedFile.description\"\r\n required\r\n name=\"description\"\r\n id=\"description\"\r\n />\r\n </div>\r\n </form>\r\n <!-- *ngIf=\"\" -->\r\n <div\r\n class=\"dynamic-part -mx-4\"\r\n *ngIf=\"selectedFile.dynamicForm && showRenderer\"\r\n >\r\n <app-dynamic-form\r\n [form]=\"selectedFile.dynamicForm\"\r\n [data]=\"temporaryDyanmicData\"\r\n (change)=\"ondynamicFormChange($event)\"\r\n ></app-dynamic-form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"template-side-menu w-1/2 d-flex justify-center items-center\"\r\n >\r\n <div class=\"text-gray-900 font-bold\">No Templates Yet</div>\r\n </div>\r\n </div>\r\n\r\n <!-- actions and buttons -->\r\n <div\r\n class=\"\r\n w-full\r\n d-flex\r\n justify-between\r\n scanner-actions-wrapper\r\n absolute\r\n bottom-0\r\n \"\r\n >\r\n <div class=\"flex\">\r\n <button\r\n class=\"\r\n cursor-pointer\r\n flex\r\n justify-center\r\n items-center\r\n border-2 border-gray-900\r\n text-gray-900\r\n rounded-3xl\r\n text-white\r\n w-30\r\n h-10\r\n \"\r\n (click)=\"closeDialog()\"\r\n >\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n\r\n <!-- *ngIf=\"\r\n uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus\r\n .numberOfUploadedFiles !== 0 ||\r\n addingProperties\r\n \" -->\r\n <!-- <button\r\n class=\"\r\n cursor-pointer\r\n flex\r\n justify-center\r\n items-center\r\n border-2 border-gray-900\r\n text-gray-900\r\n rounded-3xl\r\n text-white\r\n w-30\r\n h-10\r\n mx-2\r\n \"\r\n (click)=\"minimizDialog()\"\r\n >\r\n {{ \"BUTTONS.MINIMIZED\" | translate }}\r\n </button> -->\r\n </div>\r\n\r\n <!-- -->\r\n <div class=\"d-flex\">\r\n <!-- <button\r\n *ngIf=\"\r\n (uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n selectedFile.file) &&\r\n !uploadMangmentService.addingPropertiesMode\r\n \"\r\n (click)=\"startAddingProperties()\"\r\n class=\"\r\n hover:text-white hover:bg-gray-900\r\n cursor-pointer\r\n flex\r\n justify-center\r\n items-center\r\n border-2 border-gray-900\r\n text-gray-900\r\n rounded-3xl\r\n text-white\r\n w-36\r\n h-10\r\n \"\r\n >\r\n {{ \"BUTTONS.ADD_PROPERTIES\" | translate }}\r\n </button> -->\r\n\r\n <!-- *ngIf=\"\r\n uploadMangmentService.addingPropertiesMode &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress\r\n \" -->\r\n <!-- <button\r\n \r\n (click)=\"createDocument()\"\r\n [disabled]=\"scannerUploadButton.disabled || !selectedFile.dynamicData.valid || fileForm.invalid\"\r\n [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed': scannerUploadButton.disabled || !selectedFile.dynamicData.valid || fileForm.invalid\r\n }\"\r\n class=\"\r\n flex\r\n justify-center\r\n items-center\r\n border-2 border-gray-900\r\n text-white bg-gray-900\r\n rounded-3xl\r\n w-30\r\n h-10\r\n \"\r\n >\r\n {{ \"BUTTONS.CREATE\" | translate }}\r\n </button> -->\r\n\r\n <!-- <button\r\n *ngIf=\"\r\n uploadMangmentService.addingPropertiesMode &&\r\n uploadMangmentService.uploadedFilesStatus.uploadInProgress\r\n \"\r\n (click)=\"createWhenFinish()\"\r\n [disabled]=\"checkValidation()\"\r\n [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed': checkValidation(),\r\n 'cursor-pointer hover:text-white hover:bg-gray-900':\r\n !checkValidation()\r\n }\"\r\n class=\"\r\n flex\r\n justify-center\r\n items-center\r\n border-2 border-gray-900\r\n text-gray-900\r\n rounded-3xl\r\n text-white\r\n w-40\r\n h-10\r\n \"\r\n >\r\n {{ \"BUTTONS.CREATE_WHEN_FINSH\" | translate }}\r\n </button> -->\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-body-section{height:calc(100% - 80px)}\n"], components: [{ type: i5.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }], directives: [{ type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i8.TranslatePipe } });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: TemplateModalComponent, decorators: [{
54
+ type: Component,
55
+ args: [{
56
+ selector: 'app-template-modal',
57
+ templateUrl: './template-modal.component.html',
58
+ styleUrls: ['./template-modal.component.scss']
59
+ }]
60
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
61
+ type: Inject,
62
+ args: [MAT_DIALOG_DATA]
63
+ }] }, { type: i1.UploadManagmentService }, { type: i2.MatDialogRef }, { type: i3.DialogMangmentService }, { type: i4.DynamicFormService }]; } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL3RlbXBsYXRlLW1vZGFsL3RlbXBsYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy90ZW1wbGF0ZS1tb2RhbC90ZW1wbGF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBVXpFLE1BQU0sT0FBTyxzQkFBc0I7SUFnQmpDLFlBQTRDLElBQUksRUFDekMscUJBQTZDLEVBQzdDLFNBQStDLEVBQy9DLHFCQUE0QyxFQUMzQyxrQkFBc0M7UUFKRixTQUFJLEdBQUosSUFBSSxDQUFBO1FBQ3pDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUFDN0MsY0FBUyxHQUFULFNBQVMsQ0FBc0M7UUFDL0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUMzQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBakI5QyxpQkFBWSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEVBQUU7WUFDVCxXQUFXLEVBQUUsRUFBRTtZQUNmLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osSUFBSSxFQUFFLEVBQUU7YUFDVDtZQUNELElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztRQUNGLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztJQUt3QixDQUFDO0lBRW5ELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1FBRXBELDJFQUEyRTtRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUM7UUFDN0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsS0FBSztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxXQUFXO1FBQzdCLElBQUksV0FBVyxDQUFDLElBQUksRUFBRTtZQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcscUJBQVEsV0FBVyxDQUFFLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlCLENBQUM7O21IQTFDVSxzQkFBc0Isa0JBZ0JiLGVBQWU7dUdBaEJ4QixzQkFBc0IsMERDWG5DLDAwUUFxTkE7MkZEMU1hLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixXQUFXLEVBQUUsaUNBQWlDO29CQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztpQkFDL0M7OzBCQWlCYyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVXBsb2FkTWFuYWdtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtbWFuYWdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dNYW5nbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdGVtcGxhdGUtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGUtbW9kYWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZmlsZVR5cGU7XHJcbiAgc291cmNlO1xyXG4gIHNlbGVjdGVkRmlsZSA9IHtcclxuICAgIHRpdGxlOiAnJyxcclxuICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgIGZpbGVUeXBlOiAnJyxcclxuICAgIGR5bmFtaWNGb3JtOiAnJyxcclxuICAgIGR5bmFtaWNEYXRhOiB7XHJcbiAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgZGF0YToge31cclxuICAgIH0sXHJcbiAgICBmaWxlOiAnJ1xyXG4gIH07XHJcbiAgc2hvd1JlbmRlcmVyID0gZmFsc2U7XHJcbiAgdGVtcG9yYXJ5RHlhbm1pY0RhdGEgPSB7fTtcclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcbiAgcHVibGljIHVwbG9hZE1hbmdtZW50U2VydmljZTogVXBsb2FkTWFuYWdtZW50U2VydmljZSxcclxuICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVNb2RhbENvbXBvbmVudD4sXHJcbiAgcHVibGljIGRpYWxvZ01hbmdtZW50U2VydmljZTogRGlhbG9nTWFuZ21lbnRTZXJ2aWNlLFxyXG4gIHByaXZhdGUgZHluYW1pY0Zvcm1TZXJ2aWNlOiBEeW5hbWljRm9ybVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZVR5cGUgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5maWxlVHlwZTtcclxuICAgIHRoaXMuc291cmNlID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2UuYWRkaW5nRnJvbTtcclxuXHJcbiAgICAvLyB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5nZXREeW5hbWljRm9ybSh0aGlzLmZpbGVUeXBlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0Zvcm0gPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5zdG9yZWREeW5hbWljRm9ybTtcclxuICAgICAgdGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIG9uZHluYW1pY0Zvcm1DaGFuZ2UoZHluYW1pY0RhdGEpIHtcclxuICAgIGlmIChkeW5hbWljRGF0YS5kYXRhKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGR5bmFtaWNEYXRhLmRhdGEpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhID0geyAuLi5keW5hbWljRGF0YSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XHJcblxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGVtcGxhdGUtbW9kYWwtd3JhcGVyIGQtZmxleCByZWxhdGl2ZSBoLWZ1bGxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5LXNlY3Rpb24gZC1mbGV4IHctZnVsbFwiPlxyXG4gICAgICAgIDwhLS0gZm9ybXMgYW5kIHByb3BlcnRpZXMgIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3Jtcy1zZWN0aW9uIHctMS8yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgdGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5GSUxFX1RZUEVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ncmF5LTkwMFwiPnt7IGZpbGVUeXBlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWZpZWxkcyBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gI2ZpbGVGb3JtPVwibmdGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgdGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLlRJVExFXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0xMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LWZ1bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmctZ3JheS0xMDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci0yIGJvcmRlci1ncmF5LTIwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsZS50aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgdGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRFU0NSSVBUSU9OXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0xMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LWZ1bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmctZ3JheS0xMDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci0yIGJvcmRlci1ncmF5LTIwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsZS5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy1wYXJ0IC1teC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpbGUuZHluYW1pY0Zvcm0gJiYgc2hvd1JlbmRlcmVyXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1mb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJzZWxlY3RlZEZpbGUuZHluYW1pY0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwidGVtcG9yYXJ5RHlhbm1pY0RhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbmR5bmFtaWNGb3JtQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hcHAtZHluYW1pYy1mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZW1wbGF0ZS1zaWRlLW1lbnUgdy0xLzIgZC1mbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCBmb250LWJvbGRcIj5ObyBUZW1wbGF0ZXMgWWV0PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGFjdGlvbnMgYW5kIGJ1dHRvbnMgIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiXHJcbiAgICAgICAgICAgIHctZnVsbFxyXG4gICAgICAgICAgICBkLWZsZXhcclxuICAgICAgICAgICAganVzdGlmeS1iZXR3ZWVuXHJcbiAgICAgICAgICAgIHNjYW5uZXItYWN0aW9ucy13cmFwcGVyXHJcbiAgICAgICAgICAgIGFic29sdXRlXHJcbiAgICAgICAgICAgIGJvdHRvbS0wXHJcbiAgICAgICAgXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvci1wb2ludGVyXHJcbiAgICAgICAgICAgICAgICAgICAgZmxleFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMtY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLTIgYm9yZGVyLWdyYXktOTAwXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1ncmF5LTkwMFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdW5kZWQtM3hsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC13aGl0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHctMzBcclxuICAgICAgICAgICAgICAgICAgICBoLTEwXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkJVVFRPTlMuQ0FOQ0VMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8IS0tICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAudXBsb2FkSW5Qcm9ncmVzcyB8fFxyXG4gICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1c1xyXG4gICAgICAgICAgICAgICAgLm51bWJlck9mVXBsb2FkZWRGaWxlcyAhPT0gMCB8fFxyXG4gICAgICAgICAgICBhZGRpbmdQcm9wZXJ0aWVzXHJcbiAgICAgICAgXCIgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3ItcG9pbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIGZsZXhcclxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci0yIGJvcmRlci1ncmF5LTkwMFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtZ3JheS05MDBcclxuICAgICAgICAgICAgICAgICAgICByb3VuZGVkLTN4bFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtd2hpdGVcclxuICAgICAgICAgICAgICAgICAgICB3LTMwXHJcbiAgICAgICAgICAgICAgICAgICAgaC0xMFxyXG4gICAgICAgICAgICAgICAgICAgIG14LTJcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWluaW1pekRpYWxvZygpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLk1JTklNSVpFRFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsZS5maWxlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICF1cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGVcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhcnRBZGRpbmdQcm9wZXJ0aWVzKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLWdyYXktOTAwXHJcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yLXBvaW50ZXJcclxuICAgICAgICAgICAgICAgICAgICBmbGV4XHJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeS1jZW50ZXJcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy1jZW50ZXJcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItMiBib3JkZXItZ3JheS05MDBcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWdyYXktOTAwXHJcbiAgICAgICAgICAgICAgICAgICAgcm91bmRlZC0zeGxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LXdoaXRlXHJcbiAgICAgICAgICAgICAgICAgICAgdy0zNlxyXG4gICAgICAgICAgICAgICAgICAgIGgtMTBcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5BRERfUFJPUEVSVElFU1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAhdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgXCIgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlRG9jdW1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2Nhbm5lclVwbG9hZEJ1dHRvbi5kaXNhYmxlZCB8fCAhc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLnZhbGlkIHx8IGZpbGVGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICdvcGFjaXR5LTMwIGN1cnNvci1ub3QtYWxsb3dlZCc6IHNjYW5uZXJVcGxvYWRCdXR0b24uZGlzYWJsZWQgfHwgIXNlbGVjdGVkRmlsZS5keW5hbWljRGF0YS52YWxpZCB8fCBmaWxlRm9ybS5pbnZhbGlkXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmxleFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMtY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLTIgYm9yZGVyLWdyYXktOTAwXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC13aGl0ZSBiZy1ncmF5LTkwMFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdW5kZWQtM3hsXHJcbiAgICAgICAgICAgICAgICAgICAgdy0zMFxyXG4gICAgICAgICAgICAgICAgICAgIGgtMTBcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DUkVBVEVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmFkZGluZ1Byb3BlcnRpZXNNb2RlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVXaGVuRmluaXNoKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNoZWNrVmFsaWRhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eS0zMCBjdXJzb3Itbm90LWFsbG93ZWQnOiBjaGVja1ZhbGlkYXRpb24oKSxcclxuICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ncmF5LTkwMCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja1ZhbGlkYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGZsZXhcclxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci0yIGJvcmRlci1ncmF5LTkwMFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtZ3JheS05MDBcclxuICAgICAgICAgICAgICAgICAgICByb3VuZGVkLTN4bFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtd2hpdGVcclxuICAgICAgICAgICAgICAgICAgICB3LTQwXHJcbiAgICAgICAgICAgICAgICAgICAgaC0xMFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLkNSRUFURV9XSEVOX0ZJTlNIXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=