@alfresco/aca-content 4.0.0-A.2-9984

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 (255) hide show
  1. package/README.md +24 -0
  2. package/assets/app.extensions.json +2496 -0
  3. package/assets/i18n/ar.json +634 -0
  4. package/assets/i18n/cs.json +634 -0
  5. package/assets/i18n/da.json +634 -0
  6. package/assets/i18n/de.json +634 -0
  7. package/assets/i18n/en.json +634 -0
  8. package/assets/i18n/es.json +634 -0
  9. package/assets/i18n/fi.json +634 -0
  10. package/assets/i18n/fr.json +634 -0
  11. package/assets/i18n/it.json +634 -0
  12. package/assets/i18n/ja.json +634 -0
  13. package/assets/i18n/nb.json +634 -0
  14. package/assets/i18n/nl.json +634 -0
  15. package/assets/i18n/pl.json +634 -0
  16. package/assets/i18n/pt-BR.json +634 -0
  17. package/assets/i18n/ru.json +634 -0
  18. package/assets/i18n/sv.json +634 -0
  19. package/assets/i18n/zh-CN.json +634 -0
  20. package/assets/images/Wallpaper-BG-generic.svg +39 -0
  21. package/assets/images/adf-move-file-24px.svg +1 -0
  22. package/assets/images/baseline-library_books-24px.svg +2 -0
  23. package/assets/images/baseline-lock-24px.svg +1 -0
  24. package/assets/images/join-library.svg +32 -0
  25. package/assets/images/mastHead-bg-shapesPattern.svg +53 -0
  26. package/esm2020/alfresco-aca-content.mjs +5 -0
  27. package/esm2020/lib/aca-content.module.mjs +364 -0
  28. package/esm2020/lib/aca-content.routes.mjs +582 -0
  29. package/esm2020/lib/components/common/common.module.mjs +49 -0
  30. package/esm2020/lib/components/common/language-picker/language-picker.component.mjs +58 -0
  31. package/esm2020/lib/components/common/location-link/location-link.component.mjs +178 -0
  32. package/esm2020/lib/components/common/logout/logout.component.mjs +61 -0
  33. package/esm2020/lib/components/common/toggle-shared/toggle-shared.component.mjs +66 -0
  34. package/esm2020/lib/components/context-menu/context-menu-item.component.mjs +59 -0
  35. package/esm2020/lib/components/context-menu/context-menu-outside-event.directive.mjs +66 -0
  36. package/esm2020/lib/components/context-menu/context-menu-overlay.mjs +33 -0
  37. package/esm2020/lib/components/context-menu/context-menu.component.mjs +103 -0
  38. package/esm2020/lib/components/context-menu/context-menu.module.mjs +77 -0
  39. package/esm2020/lib/components/context-menu/context-menu.service.mjs +104 -0
  40. package/esm2020/lib/components/context-menu/direction.token.mjs +30 -0
  41. package/esm2020/lib/components/context-menu/interfaces.mjs +26 -0
  42. package/esm2020/lib/components/create-menu/create-menu.component.mjs +74 -0
  43. package/esm2020/lib/components/create-menu/create-menu.module.mjs +45 -0
  44. package/esm2020/lib/components/details/details.component.mjs +100 -0
  45. package/esm2020/lib/components/dl-custom-components/document-list-custom-components.module.mjs +49 -0
  46. package/esm2020/lib/components/dl-custom-components/name-column/name-column.component.mjs +93 -0
  47. package/esm2020/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +52 -0
  48. package/esm2020/lib/components/favorite-libraries/favorite-libraries.component.mjs +114 -0
  49. package/esm2020/lib/components/favorites/favorites.component.mjs +99 -0
  50. package/esm2020/lib/components/files/files.component.mjs +312 -0
  51. package/esm2020/lib/components/header/header.component.mjs +98 -0
  52. package/esm2020/lib/components/header/header.module.mjs +46 -0
  53. package/esm2020/lib/components/home/home.component.mjs +50 -0
  54. package/esm2020/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +57 -0
  55. package/esm2020/lib/components/info-drawer/info.drawer.module.mjs +93 -0
  56. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +144 -0
  57. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +43 -0
  58. package/esm2020/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +89 -0
  59. package/esm2020/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +96 -0
  60. package/esm2020/lib/components/layout/app-layout/app-layout.component.mjs +147 -0
  61. package/esm2020/lib/components/layout/layout.module.mjs +75 -0
  62. package/esm2020/lib/components/libraries/libraries.component.mjs +71 -0
  63. package/esm2020/lib/components/main-action/main-action.component.mjs +60 -0
  64. package/esm2020/lib/components/main-action/main-action.module.mjs +46 -0
  65. package/esm2020/lib/components/node-version/node-version-form.component.mjs +71 -0
  66. package/esm2020/lib/components/node-version/node-version.module.mjs +79 -0
  67. package/esm2020/lib/components/recent-files/recent-files.component.mjs +82 -0
  68. package/esm2020/lib/components/search/search-action-menu/search-action-menu.component.mjs +60 -0
  69. package/esm2020/lib/components/search/search-input/search-input.component.mjs +263 -0
  70. package/esm2020/lib/components/search/search-input-control/search-input-control.component.mjs +88 -0
  71. package/esm2020/lib/components/search/search-input.module.mjs +48 -0
  72. package/esm2020/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +92 -0
  73. package/esm2020/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +140 -0
  74. package/esm2020/lib/components/search/search-results/search-results.component.mjs +218 -0
  75. package/esm2020/lib/components/search/search-results-row/search-results-row.component.mjs +94 -0
  76. package/esm2020/lib/components/search/search-results.module.mjs +86 -0
  77. package/esm2020/lib/components/shared-files/shared-files.component.mjs +79 -0
  78. package/esm2020/lib/components/shared-link-view/shared-link-view.component.mjs +81 -0
  79. package/esm2020/lib/components/shared-link-view/shared-link-view.module.mjs +66 -0
  80. package/esm2020/lib/components/sidenav/components/button-menu.component.mjs +58 -0
  81. package/esm2020/lib/components/sidenav/components/expand-menu.component.mjs +54 -0
  82. package/esm2020/lib/components/sidenav/directives/action.directive.mjs +75 -0
  83. package/esm2020/lib/components/sidenav/directives/active-link.directive.mjs +93 -0
  84. package/esm2020/lib/components/sidenav/directives/expansion-panel.directive.mjs +102 -0
  85. package/esm2020/lib/components/sidenav/directives/menu-panel.directive.mjs +99 -0
  86. package/esm2020/lib/components/sidenav/sidenav-wrapper/sidenav-wrapper.component.mjs +45 -0
  87. package/esm2020/lib/components/sidenav/sidenav.component.mjs +76 -0
  88. package/esm2020/lib/components/sidenav/sidenav.module.mjs +104 -0
  89. package/esm2020/lib/components/toolbar/document-display-mode/document-display-mode.component.mjs +85 -0
  90. package/esm2020/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +151 -0
  91. package/esm2020/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +80 -0
  92. package/esm2020/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +102 -0
  93. package/esm2020/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +76 -0
  94. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +99 -0
  95. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.mjs +81 -0
  96. package/esm2020/lib/components/toolbar/toolbar.module.mjs +89 -0
  97. package/esm2020/lib/components/toolbar/view-node/view-node.component.mjs +102 -0
  98. package/esm2020/lib/components/trashcan/trashcan.component.mjs +64 -0
  99. package/esm2020/lib/components/trashcan/trashcan.module.mjs +71 -0
  100. package/esm2020/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +34 -0
  101. package/esm2020/lib/components/view-profile/view-profile.component.mjs +158 -0
  102. package/esm2020/lib/components/view-profile/view-profile.guard.mjs +31 -0
  103. package/esm2020/lib/components/view-profile/view-profile.module.mjs +43 -0
  104. package/esm2020/lib/dialogs/node-template/create-from-template.dialog.mjs +120 -0
  105. package/esm2020/lib/directives/directives.module.mjs +43 -0
  106. package/esm2020/lib/directives/document-list.directive.mjs +142 -0
  107. package/esm2020/lib/extensions/core.extensions.module.mjs +66 -0
  108. package/esm2020/lib/material.module.mjs +58 -0
  109. package/esm2020/lib/services/content-management.service.mjs +871 -0
  110. package/esm2020/lib/services/content-service-extension.service.mjs +47 -0
  111. package/esm2020/lib/services/content-url.service.mjs +73 -0
  112. package/esm2020/lib/services/node-actions.service.mjs +601 -0
  113. package/esm2020/lib/services/node-template.service.mjs +150 -0
  114. package/esm2020/lib/store/app-store.module.mjs +96 -0
  115. package/esm2020/lib/store/effects/app.effects.mjs +62 -0
  116. package/esm2020/lib/store/effects/contextmenu.effects.mjs +56 -0
  117. package/esm2020/lib/store/effects/download.effects.mjs +160 -0
  118. package/esm2020/lib/store/effects/favorite.effects.mjs +77 -0
  119. package/esm2020/lib/store/effects/library.effects.mjs +112 -0
  120. package/esm2020/lib/store/effects/node.effects.mjs +310 -0
  121. package/esm2020/lib/store/effects/search.effects.mjs +55 -0
  122. package/esm2020/lib/store/effects/template.effects.mjs +122 -0
  123. package/esm2020/lib/store/effects/upload.effects.mjs +169 -0
  124. package/esm2020/lib/store/effects/viewer.effects.mjs +176 -0
  125. package/esm2020/lib/store/effects.mjs +36 -0
  126. package/esm2020/lib/store/initial-state.mjs +66 -0
  127. package/esm2020/lib/store/reducers/app.reducer.mjs +218 -0
  128. package/esm2020/public-api.mjs +9 -0
  129. package/fesm2015/alfresco-aca-content.mjs +9937 -0
  130. package/fesm2015/alfresco-aca-content.mjs.map +1 -0
  131. package/fesm2020/alfresco-aca-content.mjs +10103 -0
  132. package/fesm2020/alfresco-aca-content.mjs.map +1 -0
  133. package/index.d.ts +5 -0
  134. package/lib/aca-content.module.d.ts +49 -0
  135. package/lib/aca-content.routes.d.ts +28 -0
  136. package/lib/components/common/common.module.d.ts +14 -0
  137. package/lib/components/common/language-picker/language-picker.component.d.ts +5 -0
  138. package/lib/components/common/location-link/location-link.component.d.ts +49 -0
  139. package/lib/components/common/logout/logout.component.d.ts +10 -0
  140. package/lib/components/common/toggle-shared/toggle-shared.component.d.ts +44 -0
  141. package/lib/components/context-menu/context-menu-item.component.d.ts +13 -0
  142. package/lib/components/context-menu/context-menu-outside-event.directive.d.ts +36 -0
  143. package/lib/components/context-menu/context-menu-overlay.d.ts +30 -0
  144. package/lib/components/context-menu/context-menu.component.d.ts +49 -0
  145. package/lib/components/context-menu/context-menu.module.d.ts +18 -0
  146. package/lib/components/context-menu/context-menu.service.d.ts +44 -0
  147. package/lib/components/context-menu/direction.token.d.ts +26 -0
  148. package/lib/components/context-menu/interfaces.d.ts +31 -0
  149. package/lib/components/create-menu/create-menu.component.d.ts +43 -0
  150. package/lib/components/create-menu/create-menu.module.d.ts +10 -0
  151. package/lib/components/details/details.component.d.ts +47 -0
  152. package/lib/components/dl-custom-components/document-list-custom-components.module.d.ts +13 -0
  153. package/lib/components/dl-custom-components/name-column/name-column.component.d.ts +43 -0
  154. package/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.d.ts +17 -0
  155. package/lib/components/favorite-libraries/favorite-libraries.component.d.ts +55 -0
  156. package/lib/components/favorites/favorites.component.d.ts +50 -0
  157. package/lib/components/files/files.component.d.ts +80 -0
  158. package/lib/components/header/header.component.d.ts +59 -0
  159. package/lib/components/header/header.module.d.ts +11 -0
  160. package/lib/components/home/home.component.d.ts +37 -0
  161. package/lib/components/info-drawer/comments-tab/comments-tab.component.d.ts +11 -0
  162. package/lib/components/info-drawer/info.drawer.module.d.ts +19 -0
  163. package/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.d.ts +65 -0
  164. package/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.d.ts +7 -0
  165. package/lib/components/info-drawer/metadata-tab/metadata-tab.component.d.ts +50 -0
  166. package/lib/components/info-drawer/versions-tab/versions-tab.component.d.ts +36 -0
  167. package/lib/components/layout/app-layout/app-layout.component.d.ts +63 -0
  168. package/lib/components/layout/layout.module.d.ts +16 -0
  169. package/lib/components/libraries/libraries.component.d.ts +45 -0
  170. package/lib/components/main-action/main-action.component.d.ts +42 -0
  171. package/lib/components/main-action/main-action.module.d.ts +11 -0
  172. package/lib/components/node-version/node-version-form.component.d.ts +47 -0
  173. package/lib/components/node-version/node-version.module.d.ts +16 -0
  174. package/lib/components/recent-files/recent-files.component.d.ts +49 -0
  175. package/lib/components/search/search-action-menu/search-action-menu.component.d.ts +39 -0
  176. package/lib/components/search/search-input/search-input.component.d.ts +82 -0
  177. package/lib/components/search/search-input-control/search-input-control.component.d.ts +51 -0
  178. package/lib/components/search/search-input.module.d.ts +12 -0
  179. package/lib/components/search/search-libraries-results/search-libraries-query-builder.service.d.ts +57 -0
  180. package/lib/components/search/search-libraries-results/search-libraries-results.component.d.ts +58 -0
  181. package/lib/components/search/search-results/search-results.component.d.ts +70 -0
  182. package/lib/components/search/search-results-row/search-results-row.component.d.ts +49 -0
  183. package/lib/components/search/search-results.module.d.ts +21 -0
  184. package/lib/components/shared-files/shared-files.component.d.ts +48 -0
  185. package/lib/components/shared-link-view/shared-link-view.component.d.ts +48 -0
  186. package/lib/components/shared-link-view/shared-link-view.module.d.ts +14 -0
  187. package/lib/components/sidenav/components/button-menu.component.d.ts +38 -0
  188. package/lib/components/sidenav/components/expand-menu.component.d.ts +36 -0
  189. package/lib/components/sidenav/directives/action.directive.d.ts +14 -0
  190. package/lib/components/sidenav/directives/active-link.directive.d.ts +46 -0
  191. package/lib/components/sidenav/directives/expansion-panel.directive.d.ts +45 -0
  192. package/lib/components/sidenav/directives/menu-panel.directive.d.ts +43 -0
  193. package/lib/components/sidenav/sidenav-wrapper/sidenav-wrapper.component.d.ts +12 -0
  194. package/lib/components/sidenav/sidenav.component.d.ts +44 -0
  195. package/lib/components/sidenav/sidenav.module.d.ts +21 -0
  196. package/lib/components/toolbar/document-display-mode/document-display-mode.component.d.ts +13 -0
  197. package/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.d.ts +48 -0
  198. package/lib/components/toolbar/toggle-favorite/toggle-favorite.component.d.ts +43 -0
  199. package/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.d.ts +43 -0
  200. package/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.d.ts +11 -0
  201. package/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.d.ts +42 -0
  202. package/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.d.ts +10 -0
  203. package/lib/components/toolbar/toolbar.module.d.ts +20 -0
  204. package/lib/components/toolbar/view-node/view-node.component.d.ts +17 -0
  205. package/lib/components/trashcan/trashcan.component.d.ts +43 -0
  206. package/lib/components/trashcan/trashcan.module.d.ts +15 -0
  207. package/lib/components/upload-files-dialog/upload-files-dialog.component.d.ts +14 -0
  208. package/lib/components/view-profile/view-profile.component.d.ts +36 -0
  209. package/lib/components/view-profile/view-profile.guard.d.ts +12 -0
  210. package/lib/components/view-profile/view-profile.module.d.ts +9 -0
  211. package/lib/dialogs/node-template/create-from-template.dialog.d.ts +50 -0
  212. package/lib/directives/directives.module.d.ts +9 -0
  213. package/lib/directives/document-list.directive.d.ts +57 -0
  214. package/lib/extensions/core.extensions.module.d.ts +14 -0
  215. package/lib/material.module.d.ts +14 -0
  216. package/lib/services/content-management.service.d.ts +101 -0
  217. package/lib/services/content-service-extension.service.d.ts +11 -0
  218. package/lib/services/content-url.service.d.ts +17 -0
  219. package/lib/services/node-actions.service.d.ts +93 -0
  220. package/lib/services/node-template.service.d.ts +34 -0
  221. package/lib/store/app-store.module.d.ts +10 -0
  222. package/lib/store/effects/app.effects.d.ts +42 -0
  223. package/lib/store/effects/contextmenu.effects.d.ts +12 -0
  224. package/lib/store/effects/download.effects.d.ts +50 -0
  225. package/lib/store/effects/favorite.effects.d.ts +39 -0
  226. package/lib/store/effects/library.effects.d.ts +44 -0
  227. package/lib/store/effects/node.effects.d.ts +57 -0
  228. package/lib/store/effects/search.effects.d.ts +35 -0
  229. package/lib/store/effects/template.effects.d.ts +55 -0
  230. package/lib/store/effects/upload.effects.d.ts +53 -0
  231. package/lib/store/effects/viewer.effects.d.ts +56 -0
  232. package/lib/store/effects.d.ts +35 -0
  233. package/lib/store/initial-state.d.ts +27 -0
  234. package/lib/store/reducers/app.reducer.d.ts +27 -0
  235. package/package.json +34 -0
  236. package/public-api.d.ts +5 -0
  237. package/ui/application.scss +49 -0
  238. package/ui/colors.scss +98 -0
  239. package/ui/custom-theme.scss +28 -0
  240. package/ui/dynamic-theme/custom-background-color.scss +16 -0
  241. package/ui/dynamic-theme/custom-palette-creator.scss +138 -0
  242. package/ui/dynamic-theme/custom-text-color.scss +8 -0
  243. package/ui/dynamic-theme/custom-theme-palettes.scss +29 -0
  244. package/ui/dynamic-theme/custom-theme.scss.tpl +60 -0
  245. package/ui/dynamic-theme/index.scss +1 -0
  246. package/ui/dynamic-theme/theme-configuration.scss.tpl +14 -0
  247. package/ui/dynamic-theme/typography.scss +63 -0
  248. package/ui/mixins.scss +26 -0
  249. package/ui/overrides/adf-about.theme.scss +39 -0
  250. package/ui/overrides/adf-pagination.theme.scss +47 -0
  251. package/ui/overrides/adf-style-fixes.theme.scss +18 -0
  252. package/ui/overrides/ay11.scss +204 -0
  253. package/ui/theme.scss +57 -0
  254. package/ui/variables/font-family.scss +1 -0
  255. package/ui/variables/variables.scss +83 -0
@@ -0,0 +1,99 @@
1
+ /*!
2
+ * @license
3
+ * Alfresco Example Content Application
4
+ *
5
+ * Copyright (C) 2005 - 2020 Alfresco Software Limited
6
+ *
7
+ * This file is part of the Alfresco Example Content Application.
8
+ * If the software was purchased under a paid Alfresco license, the terms of
9
+ * the paid license agreement will prevail. Otherwise, the software is
10
+ * provided under the following open source license terms:
11
+ *
12
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU Lesser General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * (at your option) any later version.
16
+ *
17
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU Lesser General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU Lesser General Public License
23
+ * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
24
+ */
25
+ import { AppExtensionService, ContentApiService, PageComponent } from '@alfresco/aca-shared';
26
+ import { UploadService } from '@alfresco/adf-core';
27
+ import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
28
+ import { Component } from '@angular/core';
29
+ import { Router } from '@angular/router';
30
+ import { Store } from '@ngrx/store';
31
+ import { debounceTime, map } from 'rxjs/operators';
32
+ import { ContentManagementService } from '../../services/content-management.service';
33
+ import * as i0 from "@angular/core";
34
+ import * as i1 from "@angular/router";
35
+ import * as i2 from "@ngrx/store";
36
+ import * as i3 from "@alfresco/aca-shared";
37
+ import * as i4 from "../../services/content-management.service";
38
+ import * as i5 from "@alfresco/adf-core";
39
+ import * as i6 from "@angular/cdk/layout";
40
+ import * as i7 from "@angular/common";
41
+ import * as i8 from "@alfresco/adf-content-services";
42
+ import * as i9 from "@alfresco/adf-extensions";
43
+ import * as i10 from "../../directives/document-list.directive";
44
+ export class FavoritesComponent extends PageComponent {
45
+ constructor(router, store, extensions, contentApi, content, uploadService, breakpointObserver) {
46
+ super(store, extensions, content);
47
+ this.router = router;
48
+ this.contentApi = contentApi;
49
+ this.uploadService = uploadService;
50
+ this.breakpointObserver = breakpointObserver;
51
+ this.isSmallScreen = false;
52
+ this.columns = [];
53
+ }
54
+ ngOnInit() {
55
+ super.ngOnInit();
56
+ this.subscriptions = this.subscriptions.concat([
57
+ this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe((_) => this.reload()),
58
+ this.uploadService.fileUploadDeleted.pipe(debounceTime(300)).subscribe((_) => this.reload()),
59
+ this.breakpointObserver.observe([Breakpoints.HandsetPortrait, Breakpoints.HandsetLandscape]).subscribe((result) => {
60
+ this.isSmallScreen = result.matches;
61
+ })
62
+ ]);
63
+ this.columns = this.extensions.documentListPresets.favorites;
64
+ }
65
+ navigate(favorite) {
66
+ const { isFolder, id } = favorite;
67
+ // TODO: rework as it will fail on non-English setups
68
+ const isSitePath = (path) => path && path.elements && path.elements.some(({ name }) => name === 'Sites');
69
+ if (isFolder) {
70
+ this.contentApi
71
+ .getNode(id)
72
+ .pipe(map((node) => node.entry))
73
+ .subscribe(({ path }) => {
74
+ const routeUrl = isSitePath(path) ? '/libraries' : '/personal-files';
75
+ this.router.navigate([routeUrl, id]);
76
+ });
77
+ }
78
+ }
79
+ onNodeDoubleClick(node) {
80
+ if (node && node.entry) {
81
+ if (node.entry.isFolder) {
82
+ this.navigate(node.entry);
83
+ }
84
+ if (node.entry.isFile) {
85
+ this.showPreview(node, { location: this.router.url });
86
+ }
87
+ }
88
+ }
89
+ handleNodeClick(event) {
90
+ this.onNodeDoubleClick(event.detail?.node);
91
+ }
92
+ }
93
+ FavoritesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: FavoritesComponent, deps: [{ token: i1.Router }, { token: i2.Store }, { token: i3.AppExtensionService }, { token: i3.ContentApiService }, { token: i4.ContentManagementService }, { token: i5.UploadService }, { token: i6.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
94
+ FavoritesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: FavoritesComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<aca-page-layout>\n <aca-page-layout-header>\n <adf-breadcrumb root=\"APP.BROWSE.FAVORITES.TITLE\"> </adf-breadcrumb>\n\n <adf-toolbar class=\"adf-toolbar--inline\">\n <ng-container *ngFor=\"let entry of actions; trackBy: trackByActionId\">\n <aca-toolbar-action [actionRef]=\"entry\"></aca-toolbar-action>\n </ng-container>\n </adf-toolbar>\n </aca-page-layout-header>\n\n <aca-page-layout-content>\n <div class=\"main-content\">\n <adf-document-list\n #documentList\n acaDocumentList\n acaContextActions\n [display]=\"documentDisplayMode$ | async\"\n currentFolderId=\"-favorites-\"\n selectionMode=\"multiple\"\n [navigate]=\"false\"\n [sorting]=\"['modifiedAt', 'desc']\"\n sortingMode=\"client\"\n [imageResolver]=\"imageResolver\"\n (node-dblclick)=\"handleNodeClick($event)\"\n (name-click)=\"handleNodeClick($event)\"\n >\n <adf-custom-empty-content-template>\n <adf-empty-content icon=\"star_rate\" [title]=\"'APP.BROWSE.FAVORITES.EMPTY_STATE.TITLE'\" subtitle=\"APP.BROWSE.FAVORITES.EMPTY_STATE.TEXT\">\n </adf-empty-content>\n </adf-custom-empty-content-template>\n\n <data-columns>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n >\n <ng-template let-context>\n <adf-dynamic-column [id]=\"column.template\" [context]=\"context\"> </adf-dynamic-column>\n </ng-template>\n </data-column>\n </ng-container>\n\n <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n >\n </data-column>\n </ng-container>\n </ng-container>\n </data-columns>\n </adf-document-list>\n\n <adf-pagination acaPagination [target]=\"documentList\"> </adf-pagination>\n </div>\n\n <div class=\"sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n <aca-info-drawer [node]=\"selection.last\"></aca-info-drawer>\n </div>\n </aca-page-layout-content>\n</aca-page-layout>\n", dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DocumentListComponent, selector: "adf-document-list", inputs: ["includeFields", "where", "display", "permissionsStyle", "locationFormat", "navigate", "showHeader", "navigationMode", "thumbnails", "selectionMode", "multiselect", "contentActions", "contentActionsPosition", "contextMenuActions", "emptyFolderImageUrl", "allowDropFiles", "sorting", "additionalSorting", "sortingMode", "rowStyle", "rowStyleClass", "loading", "_rowFilter", "rowFilter", "imageResolver", "stickyHeader", "headerFilters", "filterValue", "currentFolderId", "preselectNodes", "node", "maxItems"], outputs: ["nodeClick", "nodeDblClick", "folderChange", "preview", "ready", "error", "nodeSelected", "filterSelection"] }, { kind: "component", type: i8.BreadcrumbComponent, selector: "adf-breadcrumb", inputs: ["folderNode", "root", "rootId", "target", "transform", "maxItems", "readOnly"], outputs: ["navigate"] }, { kind: "component", type: i5.PaginationComponent, selector: "adf-pagination", inputs: ["target", "supportedPageSizes", "pagination"], outputs: ["change", "changePageNumber", "changePageSize", "nextPage", "prevPage"] }, { kind: "component", type: i5.ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "directive", type: i5.CustomEmptyContentTemplateDirective, selector: "adf-custom-empty-content-template, empty-folder-content" }, { kind: "component", type: i5.DataColumnComponent, selector: "data-column", inputs: ["id", "key", "customData", "type", "format", "sortable", "draggable", "isHidden", "title", "formatTooltip", "sr-title", "class", "copyContent", "editable", "focus", "sortingKey"] }, { kind: "component", type: i5.DataColumnListComponent, selector: "data-columns" }, { kind: "component", type: i5.EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: i9.DynamicColumnComponent, selector: "adf-dynamic-column", inputs: ["id", "context"] }, { kind: "directive", type: i3.ContextActionsDirective, selector: "[acaContextActions]", inputs: ["acaContextEnable"], exportAs: ["acaContextActions"] }, { kind: "component", type: i3.PageLayoutContentComponent, selector: "aca-page-layout-content", inputs: ["scrollable"] }, { kind: "component", type: i3.PageLayoutHeaderComponent, selector: "aca-page-layout-header" }, { kind: "component", type: i3.PageLayoutComponent, selector: "aca-page-layout", inputs: ["hasError"] }, { kind: "directive", type: i10.DocumentListDirective, selector: "[acaDocumentList]" }, { kind: "directive", type: i3.PaginationDirective, selector: "[acaPagination]" }, { kind: "component", type: i3.InfoDrawerComponent, selector: "aca-info-drawer", inputs: ["nodeId", "node"] }, { kind: "component", type: i3.ToolbarActionComponent, selector: "aca-toolbar-action", inputs: ["type", "color", "actionRef"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: FavoritesComponent, decorators: [{
96
+ type: Component,
97
+ args: [{ template: "<aca-page-layout>\n <aca-page-layout-header>\n <adf-breadcrumb root=\"APP.BROWSE.FAVORITES.TITLE\"> </adf-breadcrumb>\n\n <adf-toolbar class=\"adf-toolbar--inline\">\n <ng-container *ngFor=\"let entry of actions; trackBy: trackByActionId\">\n <aca-toolbar-action [actionRef]=\"entry\"></aca-toolbar-action>\n </ng-container>\n </adf-toolbar>\n </aca-page-layout-header>\n\n <aca-page-layout-content>\n <div class=\"main-content\">\n <adf-document-list\n #documentList\n acaDocumentList\n acaContextActions\n [display]=\"documentDisplayMode$ | async\"\n currentFolderId=\"-favorites-\"\n selectionMode=\"multiple\"\n [navigate]=\"false\"\n [sorting]=\"['modifiedAt', 'desc']\"\n sortingMode=\"client\"\n [imageResolver]=\"imageResolver\"\n (node-dblclick)=\"handleNodeClick($event)\"\n (name-click)=\"handleNodeClick($event)\"\n >\n <adf-custom-empty-content-template>\n <adf-empty-content icon=\"star_rate\" [title]=\"'APP.BROWSE.FAVORITES.EMPTY_STATE.TITLE'\" subtitle=\"APP.BROWSE.FAVORITES.EMPTY_STATE.TEXT\">\n </adf-empty-content>\n </adf-custom-empty-content-template>\n\n <data-columns>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n >\n <ng-template let-context>\n <adf-dynamic-column [id]=\"column.template\" [context]=\"context\"> </adf-dynamic-column>\n </ng-template>\n </data-column>\n </ng-container>\n\n <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n >\n </data-column>\n </ng-container>\n </ng-container>\n </data-columns>\n </adf-document-list>\n\n <adf-pagination acaPagination [target]=\"documentList\"> </adf-pagination>\n </div>\n\n <div class=\"sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n <aca-info-drawer [node]=\"selection.last\"></aca-info-drawer>\n </div>\n </aca-page-layout-content>\n</aca-page-layout>\n" }]
98
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Store }, { type: i3.AppExtensionService }, { type: i3.ContentApiService }, { type: i4.ContentManagementService }, { type: i5.UploadService }, { type: i6.BreakpointObserver }]; } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmF2b3JpdGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy9mYXZvcml0ZXMvZmF2b3JpdGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy9mYXZvcml0ZXMvZmF2b3JpdGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTXJGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBS25ELFlBQ1UsTUFBYyxFQUN0QixLQUFzQixFQUN0QixVQUErQixFQUN2QixVQUE2QixFQUNyQyxPQUFpQyxFQUN6QixhQUE0QixFQUM1QixrQkFBc0M7UUFFOUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFSMUIs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QUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUUsS0FBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7K0dBL0RVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDJFQ3hDL0IsZ3dGQXdFQTsyRkRoQ2Esa0JBQWtCO2tCQUg5QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAyMCBBbGZyZXNjbyBTb2Z0d2FyZSBMaW1pdGVkXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggQWxmcmVzY28uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBBcHBFeHRlbnNpb25TZXJ2aWNlLCBDb250ZW50QXBpU2VydmljZSwgUGFnZUNvbXBvbmVudCB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkJztcbmltcG9ydCB7IEFwcFN0b3JlIH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQvc3RvcmUnO1xuaW1wb3J0IHsgVXBsb2FkU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBNaW5pbWFsTm9kZUVudGl0eSwgTWluaW1hbE5vZGVFbnRyeUVudGl0eSwgUGF0aEVsZW1lbnRFbnRpdHksIFBhdGhJbmZvIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZW50TWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZW50LW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBEb2N1bWVudExpc3RQcmVzZXRSZWYgfSBmcm9tICdAYWxmcmVzY28vYWRmLWV4dGVuc2lvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2Zhdm9yaXRlcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRmF2b3JpdGVzQ29tcG9uZW50IGV4dGVuZHMgUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlzU21hbGxTY3JlZW4gPSBmYWxzZTtcblxuICBjb2x1bW5zOiBEb2N1bWVudExpc3RQcmVzZXRSZWZbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgc3RvcmU6IFN0b3JlPEFwcFN0b3JlPixcbiAgICBleHRlbnNpb25zOiBBcHBFeHRlbnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudEFwaTogQ29udGVudEFwaVNlcnZpY2UsXG4gICAgY29udGVudDogQ29udGVudE1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSxcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBleHRlbnNpb25zLCBjb250ZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuY29uY2F0KFtcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkQ29tcGxldGUucGlwZShkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChfKSA9PiB0aGlzLnJlbG9hZCgpKSxcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRGVsZXRlZC5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMucmVsb2FkKCkpLFxuXG4gICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0UG9ydHJhaXQsIEJyZWFrcG9pbnRzLkhhbmRzZXRMYW5kc2NhcGVdKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmlzU21hbGxTY3JlZW4gPSByZXN1bHQubWF0Y2hlcztcbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmV4dGVuc2lvbnMuZG9jdW1lbnRMaXN0UHJlc2V0cy5mYXZvcml0ZXM7XG4gIH1cblxuICBuYXZpZ2F0ZShmYXZvcml0ZTogTWluaW1hbE5vZGVFbnRyeUVudGl0eSkge1xuICAgIGNvbnN0IHsgaXNGb2xkZXIsIGlkIH0gPSBmYXZvcml0ZTtcblxuICAgIC8vIFRPRE86IHJld29yayBhcyBpdCB3aWxsIGZhaWwgb24gbm9uLUVuZ2xpc2ggc2V0dXBzXG4gICAgY29uc3QgaXNTaXRlUGF0aCA9IChwYXRoOiBQYXRoSW5mbyk6IGJvb2xlYW4gPT4gcGF0aCAmJiBwYXRoLmVsZW1lbnRzICYmIHBhdGguZWxlbWVudHMuc29tZSgoeyBuYW1lIH06IFBhdGhFbGVtZW50RW50aXR5KSA9PiBuYW1lID09PSAnU2l0ZXMnKTtcblxuICAgIGlmIChpc0ZvbGRlcikge1xuICAgICAgdGhpcy5jb250ZW50QXBpXG4gICAgICAgIC5nZXROb2RlKGlkKVxuICAgICAgICAucGlwZShtYXAoKG5vZGUpID0+IG5vZGUuZW50cnkpKVxuICAgICAgICAuc3Vic2NyaWJlKCh7IHBhdGggfTogTWluaW1hbE5vZGVFbnRyeUVudGl0eSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvdXRlVXJsID0gaXNTaXRlUGF0aChwYXRoKSA/ICcvbGlicmFyaWVzJyA6ICcvcGVyc29uYWwtZmlsZXMnO1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZVVybCwgaWRdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Ob2RlRG91YmxlQ2xpY2sobm9kZTogTWluaW1hbE5vZGVFbnRpdHkpIHtcbiAgICBpZiAobm9kZSAmJiBub2RlLmVudHJ5KSB7XG4gICAgICBpZiAobm9kZS5lbnRyeS5pc0ZvbGRlcikge1xuICAgICAgICB0aGlzLm5hdmlnYXRlKG5vZGUuZW50cnkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgdGhpcy5zaG93UHJldmlldyhub2RlLCB7IGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmwgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTm9kZUNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMub25Ob2RlRG91YmxlQ2xpY2soKGV2ZW50IGFzIEN1c3RvbUV2ZW50KS5kZXRhaWw/Lm5vZGUpO1xuICB9XG59XG4iLCI8YWNhLXBhZ2UtbGF5b3V0PlxuICA8YWNhLXBhZ2UtbGF5b3V0LWhlYWRlcj5cbiAgICA8YWRmLWJyZWFkY3J1bWIgcm9vdD1cIkFQUC5CUk9XU0UuRkFWT1JJVEVTLlRJVExFXCI+IDwvYWRmLWJyZWFkY3J1bWI+XG5cbiAgICA8YWRmLXRvb2xiYXIgY2xhc3M9XCJhZGYtdG9vbGJhci0taW5saW5lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBhY3Rpb25zOyB0cmFja0J5OiB0cmFja0J5QWN0aW9uSWRcIj5cbiAgICAgICAgPGFjYS10b29sYmFyLWFjdGlvbiBbYWN0aW9uUmVmXT1cImVudHJ5XCI+PC9hY2EtdG9vbGJhci1hY3Rpb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2FkZi10b29sYmFyPlxuICA8L2FjYS1wYWdlLWxheW91dC1oZWFkZXI+XG5cbiAgPGFjYS1wYWdlLWxheW91dC1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgIDxhZGYtZG9jdW1lbnQtbGlzdFxuICAgICAgICAjZG9jdW1lbnRMaXN0XG4gICAgICAgIGFjYURvY3VtZW50TGlzdFxuICAgICAgICBhY2FDb250ZXh0QWN0aW9uc1xuICAgICAgICBbZGlzcGxheV09XCJkb2N1bWVudERpc3BsYXlNb2RlJCB8IGFzeW5jXCJcbiAgICAgICAgY3VycmVudEZvbGRlcklkPVwiLWZhdm9yaXRlcy1cIlxuICAgICAgICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICBbbmF2aWdhdGVdPVwiZmFsc2VcIlxuICAgICAgICBbc29ydGluZ109XCJbJ21vZGlmaWVkQXQnLCAnZGVzYyddXCJcbiAgICAgICAgc29ydGluZ01vZGU9XCJjbGllbnRcIlxuICAgICAgICBbaW1hZ2VSZXNvbHZlcl09XCJpbWFnZVJlc29sdmVyXCJcbiAgICAgICAgKG5vZGUtZGJsY2xpY2spPVwiaGFuZGxlTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAobmFtZS1jbGljayk9XCJoYW5kbGVOb2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50IGljb249XCJzdGFyX3JhdGVcIiBbdGl0bGVdPVwiJ0FQUC5CUk9XU0UuRkFWT1JJVEVTLkVNUFRZX1NUQVRFLlRJVExFJ1wiIHN1YnRpdGxlPVwiQVBQLkJST1dTRS5GQVZPUklURVMuRU1QVFlfU1RBVEUuVEVYVFwiPlxuICAgICAgICAgIDwvYWRmLWVtcHR5LWNvbnRlbnQ+XG4gICAgICAgIDwvYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgICAgIDxkYXRhLWNvbHVtbnM+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlDb2x1bW5JZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50ZW1wbGF0ZSAmJiAhKGNvbHVtbi5kZXNrdG9wT25seSAmJiBpc1NtYWxsU2NyZWVuKVwiPlxuICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW5cbiAgICAgICAgICAgICAgICBba2V5XT1cImNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4udGl0bGVcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImNvbHVtbi50eXBlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbHVtbi5mb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb250ZXh0PlxuICAgICAgICAgICAgICAgICAgPGFkZi1keW5hbWljLWNvbHVtbiBbaWRdPVwiY29sdW1uLnRlbXBsYXRlXCIgW2NvbnRleHRdPVwiY29udGV4dFwiPiA8L2FkZi1keW5hbWljLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2RhdGEtY29sdW1uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnRlbXBsYXRlICYmICEoY29sdW1uLmRlc2t0b3BPbmx5ICYmIGlzU21hbGxTY3JlZW4pXCI+XG4gICAgICAgICAgICAgIDxkYXRhLWNvbHVtblxuICAgICAgICAgICAgICAgIFtrZXldPVwiY29sdW1uLmtleVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiY29sdW1uLnR5cGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiY29sdW1uLmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kYXRhLWNvbHVtbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2RhdGEtY29sdW1ucz5cbiAgICAgIDwvYWRmLWRvY3VtZW50LWxpc3Q+XG5cbiAgICAgIDxhZGYtcGFnaW5hdGlvbiBhY2FQYWdpbmF0aW9uIFt0YXJnZXRdPVwiZG9jdW1lbnRMaXN0XCI+IDwvYWRmLXBhZ2luYXRpb24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2lkZWJhclwiICpuZ0lmPVwiaW5mb0RyYXdlck9wZW5lZCQgfCBhc3luY1wiPlxuICAgICAgPGFjYS1pbmZvLWRyYXdlciBbbm9kZV09XCJzZWxlY3Rpb24ubGFzdFwiPjwvYWNhLWluZm8tZHJhd2VyPlxuICAgIDwvZGl2PlxuICA8L2FjYS1wYWdlLWxheW91dC1jb250ZW50PlxuPC9hY2EtcGFnZS1sYXlvdXQ+XG4iXX0=
@@ -0,0 +1,312 @@
1
+ /*!
2
+ * @license
3
+ * Alfresco Example Content Application
4
+ *
5
+ * Copyright (C) 2005 - 2020 Alfresco Software Limited
6
+ *
7
+ * This file is part of the Alfresco Example Content Application.
8
+ * If the software was purchased under a paid Alfresco license, the terms of
9
+ * the paid license agreement will prevail. Otherwise, the software is
10
+ * provided under the following open source license terms:
11
+ *
12
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU Lesser General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * (at your option) any later version.
16
+ *
17
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU Lesser General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU Lesser General Public License
23
+ * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
24
+ */
25
+ import { ShowHeaderMode, UploadService } from '@alfresco/adf-core';
26
+ import { Component } from '@angular/core';
27
+ import { ActivatedRoute, Router } from '@angular/router';
28
+ import { Store } from '@ngrx/store';
29
+ import { ContentManagementService } from '../../services/content-management.service';
30
+ import { NodeActionsService } from '../../services/node-actions.service';
31
+ import { AppExtensionService, ContentApiService, PageComponent } from '@alfresco/aca-shared';
32
+ import { SetCurrentFolderAction, isAdmin, UploadFileVersionAction, showLoaderSelector } from '@alfresco/aca-shared/store';
33
+ import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
34
+ import { debounceTime, takeUntil } from 'rxjs/operators';
35
+ import * as i0 from "@angular/core";
36
+ import * as i1 from "@angular/router";
37
+ import * as i2 from "@alfresco/aca-shared";
38
+ import * as i3 from "@ngrx/store";
39
+ import * as i4 from "../../services/node-actions.service";
40
+ import * as i5 from "@alfresco/adf-core";
41
+ import * as i6 from "../../services/content-management.service";
42
+ import * as i7 from "@angular/cdk/layout";
43
+ import * as i8 from "@angular/common";
44
+ import * as i9 from "@alfresco/adf-content-services";
45
+ import * as i10 from "@angular/material/progress-spinner";
46
+ import * as i11 from "@alfresco/adf-extensions";
47
+ import * as i12 from "../../directives/document-list.directive";
48
+ import * as i13 from "@ngx-translate/core";
49
+ export class FilesComponent extends PageComponent {
50
+ constructor(router, route, contentApi, store, nodeActionsService, uploadService, content, extensions, breakpointObserver) {
51
+ super(store, extensions, content);
52
+ this.router = router;
53
+ this.route = route;
54
+ this.contentApi = contentApi;
55
+ this.nodeActionsService = nodeActionsService;
56
+ this.uploadService = uploadService;
57
+ this.breakpointObserver = breakpointObserver;
58
+ this.isValidPath = true;
59
+ this.isSmallScreen = false;
60
+ this.isAdmin = false;
61
+ this.queryParams = null;
62
+ this.columns = [];
63
+ }
64
+ ngOnInit() {
65
+ super.ngOnInit();
66
+ const { route, nodeActionsService, uploadService } = this;
67
+ const { data } = route.snapshot;
68
+ this.title = data.title;
69
+ this.showLoader$ = this.store.select(showLoaderSelector);
70
+ route.queryParamMap.subscribe((queryMap) => {
71
+ this.queryParams = queryMap.params;
72
+ });
73
+ route.params.subscribe(({ folderId }) => {
74
+ const nodeId = folderId || data.defaultNodeId;
75
+ this.contentApi.getNode(nodeId).subscribe((node) => {
76
+ this.isValidPath = true;
77
+ if (node.entry && node.entry.isFolder) {
78
+ this.updateCurrentNode(node.entry);
79
+ }
80
+ else {
81
+ this.router.navigate(['/personal-files', node.entry.parentId], {
82
+ replaceUrl: true
83
+ });
84
+ }
85
+ }, () => (this.isValidPath = false));
86
+ });
87
+ this.subscriptions = this.subscriptions.concat([
88
+ nodeActionsService.contentCopied.subscribe((nodes) => this.onContentCopied(nodes)),
89
+ uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe((file) => this.onFileUploadedEvent(file)),
90
+ uploadService.fileUploadDeleted.pipe(debounceTime(300)).subscribe((file) => this.onFileUploadedEvent(file)),
91
+ this.breakpointObserver.observe([Breakpoints.HandsetPortrait, Breakpoints.HandsetLandscape]).subscribe((result) => {
92
+ this.isSmallScreen = result.matches;
93
+ })
94
+ ]);
95
+ this.store
96
+ .select(isAdmin)
97
+ .pipe(takeUntil(this.onDestroy$))
98
+ .subscribe((value) => {
99
+ this.isAdmin = value;
100
+ });
101
+ this.columns = this.extensions.documentListPresets.files || [];
102
+ }
103
+ ngOnDestroy() {
104
+ this.store.dispatch(new SetCurrentFolderAction(null));
105
+ super.ngOnDestroy();
106
+ }
107
+ navigate(nodeId = null) {
108
+ const currentNodeId = this.route.snapshot.paramMap.get('folderId');
109
+ const urlWithoutParams = decodeURIComponent(this.router.url).split('?')[0];
110
+ const urlToNavigate = this.getUrlToNavigate(urlWithoutParams, currentNodeId, nodeId);
111
+ this.router.navigate(urlToNavigate);
112
+ }
113
+ getUrlToNavigate(currentURL, currentNodeId, nextNodeId) {
114
+ return currentNodeId ? this.getNextNodeUrlToNavigate(currentURL, currentNodeId, nextNodeId) : this.appendNextNodeIdToUrl(currentURL, nextNodeId);
115
+ }
116
+ getNextNodeUrlToNavigate(currentURL, currentNodeId, nextNodeId) {
117
+ const urlToNavigate = nextNodeId && !this.isRootNode(nextNodeId)
118
+ ? this.replaceCurrentNodeIdWithNextNodeId(currentURL, currentNodeId, nextNodeId)
119
+ : this.removeNodeIdFromUrl(currentURL, currentNodeId);
120
+ urlToNavigate.shift();
121
+ return urlToNavigate;
122
+ }
123
+ replaceCurrentNodeIdWithNextNodeId(currentURL, currentNodeId, nextNodeId) {
124
+ const nextNodeUrlToNavigate = currentURL.split('/');
125
+ const index = nextNodeUrlToNavigate.indexOf(currentNodeId);
126
+ if (index > 0) {
127
+ nextNodeUrlToNavigate[index] = nextNodeId;
128
+ }
129
+ return nextNodeUrlToNavigate;
130
+ }
131
+ removeNodeIdFromUrl(currentURL, currentNodeId) {
132
+ const rootUrl = currentURL.replace(currentNodeId, '').split('/');
133
+ rootUrl.pop();
134
+ return rootUrl;
135
+ }
136
+ appendNextNodeIdToUrl(currentURL, nodeId) {
137
+ const navigateToNodeUrl = currentURL.split('/');
138
+ if (nodeId && !this.isRootNode(nodeId)) {
139
+ navigateToNodeUrl.push(nodeId);
140
+ }
141
+ navigateToNodeUrl.shift();
142
+ return navigateToNodeUrl;
143
+ }
144
+ onUploadNewVersion(ev) {
145
+ this.store.dispatch(new UploadFileVersionAction(ev));
146
+ }
147
+ navigateTo(node) {
148
+ if (node && node.entry) {
149
+ this.selectedNode = node;
150
+ const { isFolder } = node.entry;
151
+ if (isFolder) {
152
+ let id;
153
+ if (node.entry.nodeType === 'app:folderlink') {
154
+ id = node.entry.properties['cm:destination'];
155
+ }
156
+ else {
157
+ id = node.entry.id;
158
+ }
159
+ this.documentList.resetNewFolderPagination();
160
+ this.navigate(id);
161
+ return;
162
+ }
163
+ this.showPreview(node, { location: this.router.url });
164
+ }
165
+ }
166
+ handleNodeClick(event) {
167
+ this.navigateTo(event.detail?.node);
168
+ }
169
+ onBreadcrumbNavigate(route) {
170
+ this.documentList.resetNewFolderPagination();
171
+ // todo: review this approach once 5.2.3 is out
172
+ if (this.nodePath && this.nodePath.length > 2) {
173
+ if (this.nodePath[1].name === 'Sites' && this.nodePath[2].id === route.id) {
174
+ return this.navigate(this.nodePath[3].id);
175
+ }
176
+ }
177
+ this.navigate(route.id);
178
+ }
179
+ onFileUploadedEvent(event) {
180
+ const node = event.file.data;
181
+ // check root and child nodes
182
+ if (node && node.entry && node.entry.parentId === this.getParentNodeId()) {
183
+ this.reload(this.selectedNode);
184
+ return;
185
+ }
186
+ // check the child nodes to show dropped folder
187
+ if (event && event.file.options.parentId === this.getParentNodeId()) {
188
+ this.displayFolderParent(event.file.options.path, 0);
189
+ return;
190
+ }
191
+ if (event && event.file.options.parentId) {
192
+ if (this.nodePath) {
193
+ const correspondingNodePath = this.nodePath.find((pathItem) => pathItem.id === event.file.options.parentId);
194
+ // check if the current folder has the 'trigger-upload-folder' as one of its parents
195
+ if (correspondingNodePath) {
196
+ const correspondingIndex = this.nodePath.length - this.nodePath.indexOf(correspondingNodePath);
197
+ this.displayFolderParent(event.file.options.path, correspondingIndex);
198
+ }
199
+ }
200
+ }
201
+ }
202
+ displayFolderParent(filePath = '', index) {
203
+ const parentName = filePath.split('/')[index];
204
+ const currentFoldersDisplayed = this.documentList.data.getRows() || [];
205
+ const alreadyDisplayedParentFolder = currentFoldersDisplayed.find((row) => row.node.entry.isFolder && row.node.entry.name === parentName);
206
+ if (alreadyDisplayedParentFolder) {
207
+ return;
208
+ }
209
+ this.reload(this.selectedNode);
210
+ }
211
+ onContentCopied(nodes) {
212
+ const newNode = nodes.find((node) => node && node.entry && node.entry.parentId === this.getParentNodeId());
213
+ if (newNode) {
214
+ this.reload(this.selectedNode);
215
+ }
216
+ }
217
+ // todo: review this approach once 5.2.3 is out
218
+ async updateCurrentNode(node) {
219
+ this.nodePath = null;
220
+ if (node && node.path && node.path.elements) {
221
+ const elements = node.path.elements;
222
+ this.nodePath = elements.map((pathElement) => Object.assign({}, pathElement));
223
+ if (elements.length > 1) {
224
+ if (elements[1].name === 'User Homes') {
225
+ if (!this.isAdmin) {
226
+ elements.splice(0, 2);
227
+ }
228
+ }
229
+ else if (elements[1].name === 'Sites') {
230
+ await this.normalizeSitePath(node);
231
+ }
232
+ }
233
+ }
234
+ this.node = node;
235
+ this.store.dispatch(new SetCurrentFolderAction(node));
236
+ }
237
+ // todo: review this approach once 5.2.3 is out
238
+ async normalizeSitePath(node) {
239
+ const elements = node.path.elements;
240
+ // remove 'Sites'
241
+ elements.splice(1, 1);
242
+ if (this.isSiteContainer(node)) {
243
+ // rename 'documentLibrary' entry to the target site display name
244
+ // clicking on the breadcrumb entry loads the site content
245
+ const parentNode = await this.contentApi.getNodeInfo(node.parentId).toPromise();
246
+ node.name = parentNode.properties['cm:title'] || parentNode.name;
247
+ // remove the site entry
248
+ elements.splice(1, 1);
249
+ }
250
+ else {
251
+ // remove 'documentLibrary' in the middle of the path
252
+ const docLib = elements.findIndex((el) => el.name === 'documentLibrary');
253
+ if (docLib > -1) {
254
+ const siteFragment = elements[docLib - 1];
255
+ const siteNode = await this.contentApi.getNodeInfo(siteFragment.id).toPromise();
256
+ // apply Site Name to the parent fragment
257
+ siteFragment.name = siteNode.properties['cm:title'] || siteNode.name;
258
+ elements.splice(docLib, 1);
259
+ }
260
+ }
261
+ }
262
+ isSiteContainer(node) {
263
+ if (node && node.aspectNames && node.aspectNames.length > 0) {
264
+ return node.aspectNames.indexOf('st:siteContainer') >= 0;
265
+ }
266
+ return false;
267
+ }
268
+ isRootNode(nodeId) {
269
+ if (this.node && this.node.path && this.node.path.elements && this.node.path.elements.length > 0) {
270
+ return this.node.path.elements[0].id === nodeId;
271
+ }
272
+ return false;
273
+ }
274
+ onFilterSelected(activeFilters) {
275
+ if (activeFilters.length) {
276
+ this.showHeader = ShowHeaderMode.Always;
277
+ this.navigateToFilter(activeFilters);
278
+ }
279
+ else {
280
+ this.router.navigate(['.'], { relativeTo: this.route });
281
+ this.showHeader = ShowHeaderMode.Data;
282
+ this.onAllFilterCleared();
283
+ }
284
+ }
285
+ navigateToFilter(activeFilters) {
286
+ const objectFromMap = {};
287
+ activeFilters.forEach((filter) => {
288
+ let paramValue;
289
+ if (filter.value && filter.value.from && filter.value.to) {
290
+ paramValue = `${filter.value.from}||${filter.value.to}`;
291
+ }
292
+ else {
293
+ paramValue = filter.value;
294
+ }
295
+ objectFromMap[filter.key] = paramValue;
296
+ });
297
+ this.router.navigate([], { relativeTo: this.route, queryParams: objectFromMap });
298
+ }
299
+ isFilterHeaderActive() {
300
+ return this.showHeader === ShowHeaderMode.Always;
301
+ }
302
+ onError() {
303
+ this.isValidPath = false;
304
+ }
305
+ }
306
+ FilesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: FilesComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ContentApiService }, { token: i3.Store }, { token: i4.NodeActionsService }, { token: i5.UploadService }, { token: i6.ContentManagementService }, { token: i2.AppExtensionService }, { token: i7.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
307
+ FilesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: FilesComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<aca-page-layout [hasError]=\"!isValidPath\">\n <aca-page-layout-header>\n <adf-breadcrumb [root]=\"title\" [folderNode]=\"node\" [maxItems]=\"isSmallScreen ? 1 : 0\" (navigate)=\"onBreadcrumbNavigate($event)\"> </adf-breadcrumb>\n\n <adf-toolbar class=\"adf-toolbar--inline\">\n <ng-container *ngFor=\"let entry of actions; trackBy: trackByActionId\">\n <aca-toolbar-action [actionRef]=\"entry\"></aca-toolbar-action>\n </ng-container>\n </adf-toolbar>\n </aca-page-layout-header>\n\n <aca-page-layout-error>\n <aca-generic-error></aca-generic-error>\n </aca-page-layout-error>\n\n <aca-page-layout-content>\n <div class=\"main-content\" *ngIf=\"!(showLoader$ | async)\">\n <adf-upload-drag-area [rootFolderId]=\"node?.id\" [disabled]=\"!canUpload\" (updateFileVersion)=\"onUploadNewVersion($event)\">\n <adf-document-list\n #documentList\n acaDocumentList\n acaContextActions\n [display]=\"documentDisplayMode$ | async\"\n selectionMode=\"multiple\"\n [currentFolderId]=\"node?.id\"\n [loading]=\"true\"\n [showHeader]=\"showHeader\"\n [node]=\"nodeResult\"\n [allowDropFiles]=\"true\"\n [navigate]=\"false\"\n [sorting]=\"['name', 'ASC']\"\n [imageResolver]=\"imageResolver\"\n [headerFilters]=\"true\"\n [filterValue]=\"queryParams\"\n (node-dblclick)=\"handleNodeClick($event)\"\n (name-click)=\"handleNodeClick($event)\"\n (sorting-changed)=\"onSortingChanged($event)\"\n (filterSelection)=\"onFilterSelected($event)\"\n (error)=\"onError()\"\n >\n <data-columns>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n [sortingKey]=\"column.sortingKey || column.key\"\n >\n <ng-template let-context>\n <adf-dynamic-column [id]=\"column.template\" [context]=\"context\"> </adf-dynamic-column>\n </ng-template>\n </data-column>\n </ng-container>\n\n <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n [sortingKey]=\"column.sortingKey || column.key\"\n >\n </data-column>\n </ng-container>\n </ng-container>\n </data-columns>\n\n <adf-custom-empty-content-template *ngIf=\"isFilterHeaderActive()\">\n <ng-container>\n <div class=\"empty-search__block\" aria-live=\"polite\">\n <p class=\"empty-search__text\">\n {{ 'APP.BROWSE.SEARCH.NO_FILTER_RESULTS' | translate }}\n </p>\n </div>\n </ng-container>\n </adf-custom-empty-content-template>\n </adf-document-list>\n\n <adf-pagination acaPagination [target]=\"documentList\"> </adf-pagination>\n </adf-upload-drag-area>\n </div>\n\n <mat-progress-spinner *ngIf=\"showLoader$ | async\"\n id=\"adf-document-list-loading\"\n class=\"adf-document-list-loading-margin\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n\n <div class=\"sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n <aca-info-drawer [node]=\"selection.last\"></aca-info-drawer>\n </div>\n </aca-page-layout-content>\n</aca-page-layout>\n", dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.DocumentListComponent, selector: "adf-document-list", inputs: ["includeFields", "where", "display", "permissionsStyle", "locationFormat", "navigate", "showHeader", "navigationMode", "thumbnails", "selectionMode", "multiselect", "contentActions", "contentActionsPosition", "contextMenuActions", "emptyFolderImageUrl", "allowDropFiles", "sorting", "additionalSorting", "sortingMode", "rowStyle", "rowStyleClass", "loading", "_rowFilter", "rowFilter", "imageResolver", "stickyHeader", "headerFilters", "filterValue", "currentFolderId", "preselectNodes", "node", "maxItems"], outputs: ["nodeClick", "nodeDblClick", "folderChange", "preview", "ready", "error", "nodeSelected", "filterSelection"] }, { kind: "component", type: i9.UploadDragAreaComponent, selector: "adf-upload-drag-area" }, { kind: "component", type: i9.BreadcrumbComponent, selector: "adf-breadcrumb", inputs: ["folderNode", "root", "rootId", "target", "transform", "maxItems", "readOnly"], outputs: ["navigate"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.PaginationComponent, selector: "adf-pagination", inputs: ["target", "supportedPageSizes", "pagination"], outputs: ["change", "changePageNumber", "changePageSize", "nextPage", "prevPage"] }, { kind: "component", type: i5.ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "directive", type: i5.CustomEmptyContentTemplateDirective, selector: "adf-custom-empty-content-template, empty-folder-content" }, { kind: "component", type: i5.DataColumnComponent, selector: "data-column", inputs: ["id", "key", "customData", "type", "format", "sortable", "draggable", "isHidden", "title", "formatTooltip", "sr-title", "class", "copyContent", "editable", "focus", "sortingKey"] }, { kind: "component", type: i5.DataColumnListComponent, selector: "data-columns" }, { kind: "component", type: i11.DynamicColumnComponent, selector: "adf-dynamic-column", inputs: ["id", "context"] }, { kind: "directive", type: i2.ContextActionsDirective, selector: "[acaContextActions]", inputs: ["acaContextEnable"], exportAs: ["acaContextActions"] }, { kind: "component", type: i2.GenericErrorComponent, selector: "aca-generic-error", inputs: ["text"] }, { kind: "component", type: i2.PageLayoutContentComponent, selector: "aca-page-layout-content", inputs: ["scrollable"] }, { kind: "component", type: i2.PageLayoutErrorComponent, selector: "aca-page-layout-error" }, { kind: "component", type: i2.PageLayoutHeaderComponent, selector: "aca-page-layout-header" }, { kind: "component", type: i2.PageLayoutComponent, selector: "aca-page-layout", inputs: ["hasError"] }, { kind: "directive", type: i12.DocumentListDirective, selector: "[acaDocumentList]" }, { kind: "directive", type: i2.PaginationDirective, selector: "[acaPagination]" }, { kind: "component", type: i2.InfoDrawerComponent, selector: "aca-info-drawer", inputs: ["nodeId", "node"] }, { kind: "component", type: i2.ToolbarActionComponent, selector: "aca-toolbar-action", inputs: ["type", "color", "actionRef"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: FilesComponent, decorators: [{
309
+ type: Component,
310
+ args: [{ template: "<aca-page-layout [hasError]=\"!isValidPath\">\n <aca-page-layout-header>\n <adf-breadcrumb [root]=\"title\" [folderNode]=\"node\" [maxItems]=\"isSmallScreen ? 1 : 0\" (navigate)=\"onBreadcrumbNavigate($event)\"> </adf-breadcrumb>\n\n <adf-toolbar class=\"adf-toolbar--inline\">\n <ng-container *ngFor=\"let entry of actions; trackBy: trackByActionId\">\n <aca-toolbar-action [actionRef]=\"entry\"></aca-toolbar-action>\n </ng-container>\n </adf-toolbar>\n </aca-page-layout-header>\n\n <aca-page-layout-error>\n <aca-generic-error></aca-generic-error>\n </aca-page-layout-error>\n\n <aca-page-layout-content>\n <div class=\"main-content\" *ngIf=\"!(showLoader$ | async)\">\n <adf-upload-drag-area [rootFolderId]=\"node?.id\" [disabled]=\"!canUpload\" (updateFileVersion)=\"onUploadNewVersion($event)\">\n <adf-document-list\n #documentList\n acaDocumentList\n acaContextActions\n [display]=\"documentDisplayMode$ | async\"\n selectionMode=\"multiple\"\n [currentFolderId]=\"node?.id\"\n [loading]=\"true\"\n [showHeader]=\"showHeader\"\n [node]=\"nodeResult\"\n [allowDropFiles]=\"true\"\n [navigate]=\"false\"\n [sorting]=\"['name', 'ASC']\"\n [imageResolver]=\"imageResolver\"\n [headerFilters]=\"true\"\n [filterValue]=\"queryParams\"\n (node-dblclick)=\"handleNodeClick($event)\"\n (name-click)=\"handleNodeClick($event)\"\n (sorting-changed)=\"onSortingChanged($event)\"\n (filterSelection)=\"onFilterSelected($event)\"\n (error)=\"onError()\"\n >\n <data-columns>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByColumnId\">\n <ng-container *ngIf=\"column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n [sortingKey]=\"column.sortingKey || column.key\"\n >\n <ng-template let-context>\n <adf-dynamic-column [id]=\"column.template\" [context]=\"context\"> </adf-dynamic-column>\n </ng-template>\n </data-column>\n </ng-container>\n\n <ng-container *ngIf=\"!column.template && !(column.desktopOnly && isSmallScreen)\">\n <data-column\n [key]=\"column.key\"\n [title]=\"column.title\"\n [type]=\"column.type\"\n [format]=\"column.format\"\n [class]=\"column.class\"\n [sortable]=\"column.sortable\"\n [sortingKey]=\"column.sortingKey || column.key\"\n >\n </data-column>\n </ng-container>\n </ng-container>\n </data-columns>\n\n <adf-custom-empty-content-template *ngIf=\"isFilterHeaderActive()\">\n <ng-container>\n <div class=\"empty-search__block\" aria-live=\"polite\">\n <p class=\"empty-search__text\">\n {{ 'APP.BROWSE.SEARCH.NO_FILTER_RESULTS' | translate }}\n </p>\n </div>\n </ng-container>\n </adf-custom-empty-content-template>\n </adf-document-list>\n\n <adf-pagination acaPagination [target]=\"documentList\"> </adf-pagination>\n </adf-upload-drag-area>\n </div>\n\n <mat-progress-spinner *ngIf=\"showLoader$ | async\"\n id=\"adf-document-list-loading\"\n class=\"adf-document-list-loading-margin\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n\n <div class=\"sidebar\" *ngIf=\"infoDrawerOpened$ | async\">\n <aca-info-drawer [node]=\"selection.last\"></aca-info-drawer>\n </div>\n </aca-page-layout-content>\n</aca-page-layout>\n" }]
311
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ContentApiService }, { type: i3.Store }, { type: i4.NodeActionsService }, { type: i5.UploadService }, { type: i6.ContentManagementService }, { type: i2.AppExtensionService }, { type: i7.BreakpointObserver }]; } });
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGVzL2ZpbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9maWxlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQW1CLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLEVBQVksdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXpELE1BQU0sT0FBTyxjQUFlLFNBQVEsYUFBYTtJQVkvQyxZQUNVLE1BQWMsRUFDZCxLQUFxQixFQUNyQixVQUE2QixFQUNyQyxLQUFzQixFQUNkLGtCQUFzQyxFQUN0QyxhQUE0QixFQUNwQyxPQUFpQyxFQUNqQyxVQUErQixFQUN2QixrQkFBc0M7UUFFOUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFWMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRTdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFHNUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXBCaEQsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUtuQixZQUFPLEdBQTRCLEVBQUUsQ0FBQztJQWN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixNQUFNLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMxRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pELEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQVUsRUFBRSxFQUFFO1lBQzlDLE1BQU0sTUFBTSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBRTlDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFFeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQzdELFVBQVUsRUFBRSxJQUFJO3FCQUNqQixDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLEVBQ0QsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUNqQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQzdDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEYsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2hILElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxDQUFDLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSzthQUNQLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCLElBQUk7UUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sYUFBYSxHQUFhLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsYUFBcUIsRUFBRSxVQUFrQjtRQUNwRixPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkosQ0FBQztJQUVPLHdCQUF3QixDQUFDLFVBQWtCLEVBQUUsYUFBcUIsRUFBRSxVQUFrQjtRQUM1RixNQUFNLGFBQWEsR0FDakIsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQztZQUNoRixDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRCxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVPLGtDQUFrQyxDQUFDLFVBQWtCLEVBQUUsYUFBcUIsRUFBRSxVQUFrQjtRQUN0RyxNQUFNLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNiLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQztTQUMzQztRQUNELE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsYUFBcUI7UUFDbkUsTUFBTSxPQUFPLEdBQWEsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxVQUFrQixFQUFFLE1BQWM7UUFDOUQsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEM7UUFDRCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFlO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQXVCO1FBQ2hDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFFaEMsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxFQUFVLENBQUM7Z0JBRWYsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRTtvQkFDNUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQzlDO3FCQUFNO29CQUNMLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDcEI7Z0JBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVk7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBRSxLQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBd0I7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRTdDLCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBc0I7UUFDeEMsTUFBTSxJQUFJLEdBQXNCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWhELDZCQUE2QjtRQUM3QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvQixPQUFPO1NBQ1I7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUNuRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTVHLG9GQUFvRjtnQkFDcEYsSUFBSSxxQkFBcUIsRUFBRTtvQkFDekIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUMvRixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7aUJBQ3ZFO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLEtBQWE7UUFDOUMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxNQUFNLHVCQUF1QixHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBcUIsSUFBSSxFQUFFLENBQUM7UUFFM0YsTUFBTSw0QkFBNEIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7UUFFMUksSUFBSSw0QkFBNEIsRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQTBCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsK0NBQStDO0lBQ3ZDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUE0QjtRQUMxRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRXBDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUU5RSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO29CQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTt3QkFDakIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3ZCO2lCQUNGO3FCQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQ3ZDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNwQzthQUNGO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELCtDQUErQztJQUN2QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBNEI7UUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFcEMsaUJBQWlCO1FBQ2pCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixpRUFBaUU7WUFDakUsMERBQTBEO1lBQzFELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDO1lBRWpFLHdCQUF3QjtZQUN4QixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QjthQUFNO1lBQ0wscURBQXFEO1lBQ3JELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDZixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFFaEYseUNBQXlDO2dCQUN6QyxZQUFZLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDckUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUI7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBNEI7UUFDMUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxRDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFjO1FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQztTQUNqRDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQTZCO1FBQzVDLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3RDO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxhQUE2QjtRQUM1QyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRTtZQUM3QyxJQUFJLFVBQVUsQ0FBQztZQUNmLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDeEQsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUMzQjtZQUNELGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7OzJHQTVUVSxjQUFjOytGQUFkLGNBQWMsMkVDM0MzQix5a0lBb0dBOzJGRHpEYSxjQUFjO2tCQUgxQixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAyMCBBbGZyZXNjbyBTb2Z0d2FyZSBMaW1pdGVkXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggQWxmcmVzY28uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBGaWxlVXBsb2FkRXZlbnQsIFNob3dIZWFkZXJNb2RlLCBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE1pbmltYWxOb2RlRW50aXR5LCBNaW5pbWFsTm9kZUVudHJ5RW50aXR5LCBQYXRoRWxlbWVudCwgUGF0aEVsZW1lbnRFbnRpdHkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbnRlbnRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbnRlbnQtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV4dGVuc2lvblNlcnZpY2UsIENvbnRlbnRBcGlTZXJ2aWNlLCBQYWdlQ29tcG9uZW50IH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1zaGFyZWQnO1xuaW1wb3J0IHsgU2V0Q3VycmVudEZvbGRlckFjdGlvbiwgaXNBZG1pbiwgQXBwU3RvcmUsIFVwbG9hZEZpbGVWZXJzaW9uQWN0aW9uLCBzaG93TG9hZGVyU2VsZWN0b3IgfSBmcm9tICdAYWxmcmVzY28vYWNhLXNoYXJlZC9zdG9yZSc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZpbHRlclNlYXJjaCwgU2hhcmVEYXRhUm93IH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcbmltcG9ydCB7IERvY3VtZW50TGlzdFByZXNldFJlZiB9IGZyb20gJ0BhbGZyZXNjby9hZGYtZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZmlsZXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVzQ29tcG9uZW50IGV4dGVuZHMgUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgaXNWYWxpZFBhdGggPSB0cnVlO1xuICBpc1NtYWxsU2NyZWVuID0gZmFsc2U7XG4gIGlzQWRtaW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWROb2RlOiBNaW5pbWFsTm9kZUVudGl0eTtcbiAgcXVlcnlQYXJhbXMgPSBudWxsO1xuXG4gIHNob3dMb2FkZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwcml2YXRlIG5vZGVQYXRoOiBQYXRoRWxlbWVudFtdO1xuXG4gIGNvbHVtbnM6IERvY3VtZW50TGlzdFByZXNldFJlZltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNvbnRlbnRBcGk6IENvbnRlbnRBcGlTZXJ2aWNlLFxuICAgIHN0b3JlOiBTdG9yZTxBcHBTdG9yZT4sXG4gICAgcHJpdmF0ZSBub2RlQWN0aW9uc1NlcnZpY2U6IE5vZGVBY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFVwbG9hZFNlcnZpY2UsXG4gICAgY29udGVudDogQ29udGVudE1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIGV4dGVuc2lvbnM6IEFwcEV4dGVuc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlclxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZXh0ZW5zaW9ucywgY29udGVudCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgY29uc3QgeyByb3V0ZSwgbm9kZUFjdGlvbnNTZXJ2aWNlLCB1cGxvYWRTZXJ2aWNlIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gcm91dGUuc25hcHNob3Q7XG5cbiAgICB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcblxuICAgIHRoaXMuc2hvd0xvYWRlciQgPSB0aGlzLnN0b3JlLnNlbGVjdChzaG93TG9hZGVyU2VsZWN0b3IpO1xuICAgIHJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKChxdWVyeU1hcDogUGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcXVlcnlNYXAucGFyYW1zO1xuICAgIH0pO1xuXG4gICAgcm91dGUucGFyYW1zLnN1YnNjcmliZSgoeyBmb2xkZXJJZCB9OiBQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGZvbGRlcklkIHx8IGRhdGEuZGVmYXVsdE5vZGVJZDtcblxuICAgICAgdGhpcy5jb250ZW50QXBpLmdldE5vZGUobm9kZUlkKS5zdWJzY3JpYmUoXG4gICAgICAgIChub2RlKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1ZhbGlkUGF0aCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAobm9kZS5lbnRyeSAmJiBub2RlLmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnROb2RlKG5vZGUuZW50cnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wZXJzb25hbC1maWxlcycsIG5vZGUuZW50cnkucGFyZW50SWRdLCB7XG4gICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gKHRoaXMuaXNWYWxpZFBhdGggPSBmYWxzZSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuY29uY2F0KFtcbiAgICAgIG5vZGVBY3Rpb25zU2VydmljZS5jb250ZW50Q29waWVkLnN1YnNjcmliZSgobm9kZXMpID0+IHRoaXMub25Db250ZW50Q29waWVkKG5vZGVzKSksXG4gICAgICB1cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWRDb21wbGV0ZS5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoKGZpbGUpID0+IHRoaXMub25GaWxlVXBsb2FkZWRFdmVudChmaWxlKSksXG4gICAgICB1cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWREZWxldGVkLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoZmlsZSkgPT4gdGhpcy5vbkZpbGVVcGxvYWRlZEV2ZW50KGZpbGUpKSxcblxuICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbQnJlYWtwb2ludHMuSGFuZHNldFBvcnRyYWl0LCBCcmVha3BvaW50cy5IYW5kc2V0TGFuZHNjYXBlXSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5pc1NtYWxsU2NyZWVuID0gcmVzdWx0Lm1hdGNoZXM7XG4gICAgICB9KVxuICAgIF0pO1xuXG4gICAgdGhpcy5zdG9yZVxuICAgICAgLnNlbGVjdChpc0FkbWluKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmlzQWRtaW4gPSB2YWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5leHRlbnNpb25zLmRvY3VtZW50TGlzdFByZXNldHMuZmlsZXMgfHwgW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTZXRDdXJyZW50Rm9sZGVyQWN0aW9uKG51bGwpKTtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgbmF2aWdhdGUobm9kZUlkOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgY29uc3QgY3VycmVudE5vZGVJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdmb2xkZXJJZCcpO1xuICAgIGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy5yb3V0ZXIudXJsKS5zcGxpdCgnPycpWzBdO1xuICAgIGNvbnN0IHVybFRvTmF2aWdhdGU6IHN0cmluZ1tdID0gdGhpcy5nZXRVcmxUb05hdmlnYXRlKHVybFdpdGhvdXRQYXJhbXMsIGN1cnJlbnROb2RlSWQsIG5vZGVJZCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUodXJsVG9OYXZpZ2F0ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFVybFRvTmF2aWdhdGUoY3VycmVudFVSTDogc3RyaW5nLCBjdXJyZW50Tm9kZUlkOiBzdHJpbmcsIG5leHROb2RlSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gY3VycmVudE5vZGVJZCA/IHRoaXMuZ2V0TmV4dE5vZGVVcmxUb05hdmlnYXRlKGN1cnJlbnRVUkwsIGN1cnJlbnROb2RlSWQsIG5leHROb2RlSWQpIDogdGhpcy5hcHBlbmROZXh0Tm9kZUlkVG9VcmwoY3VycmVudFVSTCwgbmV4dE5vZGVJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldE5leHROb2RlVXJsVG9OYXZpZ2F0ZShjdXJyZW50VVJMOiBzdHJpbmcsIGN1cnJlbnROb2RlSWQ6IHN0cmluZywgbmV4dE5vZGVJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHVybFRvTmF2aWdhdGU6IHN0cmluZ1tdID1cbiAgICAgIG5leHROb2RlSWQgJiYgIXRoaXMuaXNSb290Tm9kZShuZXh0Tm9kZUlkKVxuICAgICAgICA/IHRoaXMucmVwbGFjZUN1cnJlbnROb2RlSWRXaXRoTmV4dE5vZGVJZChjdXJyZW50VVJMLCBjdXJyZW50Tm9kZUlkLCBuZXh0Tm9kZUlkKVxuICAgICAgICA6IHRoaXMucmVtb3ZlTm9kZUlkRnJvbVVybChjdXJyZW50VVJMLCBjdXJyZW50Tm9kZUlkKTtcbiAgICB1cmxUb05hdmlnYXRlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHVybFRvTmF2aWdhdGU7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDdXJyZW50Tm9kZUlkV2l0aE5leHROb2RlSWQoY3VycmVudFVSTDogc3RyaW5nLCBjdXJyZW50Tm9kZUlkOiBzdHJpbmcsIG5leHROb2RlSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBuZXh0Tm9kZVVybFRvTmF2aWdhdGUgPSBjdXJyZW50VVJMLnNwbGl0KCcvJyk7XG4gICAgY29uc3QgaW5kZXggPSBuZXh0Tm9kZVVybFRvTmF2aWdhdGUuaW5kZXhPZihjdXJyZW50Tm9kZUlkKTtcbiAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICBuZXh0Tm9kZVVybFRvTmF2aWdhdGVbaW5kZXhdID0gbmV4dE5vZGVJZDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHROb2RlVXJsVG9OYXZpZ2F0ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTm9kZUlkRnJvbVVybChjdXJyZW50VVJMOiBzdHJpbmcsIGN1cnJlbnROb2RlSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByb290VXJsOiBzdHJpbmdbXSA9IGN1cnJlbnRVUkwucmVwbGFjZShjdXJyZW50Tm9kZUlkLCAnJykuc3BsaXQoJy8nKTtcbiAgICByb290VXJsLnBvcCgpO1xuICAgIHJldHVybiByb290VXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmROZXh0Tm9kZUlkVG9VcmwoY3VycmVudFVSTDogc3RyaW5nLCBub2RlSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBuYXZpZ2F0ZVRvTm9kZVVybCA9IGN1cnJlbnRVUkwuc3BsaXQoJy8nKTtcbiAgICBpZiAobm9kZUlkICYmICF0aGlzLmlzUm9vdE5vZGUobm9kZUlkKSkge1xuICAgICAgbmF2aWdhdGVUb05vZGVVcmwucHVzaChub2RlSWQpO1xuICAgIH1cbiAgICBuYXZpZ2F0ZVRvTm9kZVVybC5zaGlmdCgpO1xuICAgIHJldHVybiBuYXZpZ2F0ZVRvTm9kZVVybDtcbiAgfVxuXG4gIG9uVXBsb2FkTmV3VmVyc2lvbihldjogQ3VzdG9tRXZlbnQpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGxvYWRGaWxlVmVyc2lvbkFjdGlvbihldikpO1xuICB9XG5cbiAgbmF2aWdhdGVUbyhub2RlOiBNaW5pbWFsTm9kZUVudGl0eSkge1xuICAgIGlmIChub2RlICYmIG5vZGUuZW50cnkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcbiAgICAgIGNvbnN0IHsgaXNGb2xkZXIgfSA9IG5vZGUuZW50cnk7XG5cbiAgICAgIGlmIChpc0ZvbGRlcikge1xuICAgICAgICBsZXQgaWQ6IHN0cmluZztcblxuICAgICAgICBpZiAobm9kZS5lbnRyeS5ub2RlVHlwZSA9PT0gJ2FwcDpmb2xkZXJsaW5rJykge1xuICAgICAgICAgIGlkID0gbm9kZS5lbnRyeS5wcm9wZXJ0aWVzWydjbTpkZXN0aW5hdGlvbiddO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlkID0gbm9kZS5lbnRyeS5pZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlKGlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNob3dQcmV2aWV3KG5vZGUsIHsgbG9jYXRpb246IHRoaXMucm91dGVyLnVybCB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVOb2RlQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5uYXZpZ2F0ZVRvKChldmVudCBhcyBDdXN0b21FdmVudCkuZGV0YWlsPy5ub2RlKTtcbiAgfVxuXG4gIG9uQnJlYWRjcnVtYk5hdmlnYXRlKHJvdXRlOiBQYXRoRWxlbWVudEVudGl0eSkge1xuICAgIHRoaXMuZG9jdW1lbnRMaXN0LnJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpO1xuXG4gICAgLy8gdG9kbzogcmV2aWV3IHRoaXMgYXBwcm9hY2ggb25jZSA1LjIuMyBpcyBvdXRcbiAgICBpZiAodGhpcy5ub2RlUGF0aCAmJiB0aGlzLm5vZGVQYXRoLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICh0aGlzLm5vZGVQYXRoWzFdLm5hbWUgPT09ICdTaXRlcycgJiYgdGhpcy5ub2RlUGF0aFsyXS5pZCA9PT0gcm91dGUuaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5ub2RlUGF0aFszXS5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubmF2aWdhdGUocm91dGUuaWQpO1xuICB9XG5cbiAgb25GaWxlVXBsb2FkZWRFdmVudChldmVudDogRmlsZVVwbG9hZEV2ZW50KSB7XG4gICAgY29uc3Qgbm9kZTogTWluaW1hbE5vZGVFbnRpdHkgPSBldmVudC5maWxlLmRhdGE7XG5cbiAgICAvLyBjaGVjayByb290IGFuZCBjaGlsZCBub2Rlc1xuICAgIGlmIChub2RlICYmIG5vZGUuZW50cnkgJiYgbm9kZS5lbnRyeS5wYXJlbnRJZCA9PT0gdGhpcy5nZXRQYXJlbnROb2RlSWQoKSkge1xuICAgICAgdGhpcy5yZWxvYWQodGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHRoZSBjaGlsZCBub2RlcyB0byBzaG93IGRyb3BwZWQgZm9sZGVyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmZpbGUub3B0aW9ucy5wYXJlbnRJZCA9PT0gdGhpcy5nZXRQYXJlbnROb2RlSWQoKSkge1xuICAgICAgdGhpcy5kaXNwbGF5Rm9sZGVyUGFyZW50KGV2ZW50LmZpbGUub3B0aW9ucy5wYXRoLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZmlsZS5vcHRpb25zLnBhcmVudElkKSB7XG4gICAgICBpZiAodGhpcy5ub2RlUGF0aCkge1xuICAgICAgICBjb25zdCBjb3JyZXNwb25kaW5nTm9kZVBhdGggPSB0aGlzLm5vZGVQYXRoLmZpbmQoKHBhdGhJdGVtKSA9PiBwYXRoSXRlbS5pZCA9PT0gZXZlbnQuZmlsZS5vcHRpb25zLnBhcmVudElkKTtcblxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgY3VycmVudCBmb2xkZXIgaGFzIHRoZSAndHJpZ2dlci11cGxvYWQtZm9sZGVyJyBhcyBvbmUgb2YgaXRzIHBhcmVudHNcbiAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdOb2RlUGF0aCkge1xuICAgICAgICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdJbmRleCA9IHRoaXMubm9kZVBhdGgubGVuZ3RoIC0gdGhpcy5ub2RlUGF0aC5pbmRleE9mKGNvcnJlc3BvbmRpbmdOb2RlUGF0aCk7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5Rm9sZGVyUGFyZW50KGV2ZW50LmZpbGUub3B0aW9ucy5wYXRoLCBjb3JyZXNwb25kaW5nSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGxheUZvbGRlclBhcmVudChmaWxlUGF0aCA9ICcnLCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyZW50TmFtZSA9IGZpbGVQYXRoLnNwbGl0KCcvJylbaW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnRGb2xkZXJzRGlzcGxheWVkID0gKHRoaXMuZG9jdW1lbnRMaXN0LmRhdGEuZ2V0Um93cygpIGFzIFNoYXJlRGF0YVJvd1tdKSB8fCBbXTtcblxuICAgIGNvbnN0IGFscmVhZHlEaXNwbGF5ZWRQYXJlbnRGb2xkZXIgPSBjdXJyZW50Rm9sZGVyc0Rpc3BsYXllZC5maW5kKChyb3cpID0+IHJvdy5ub2RlLmVudHJ5LmlzRm9sZGVyICYmIHJvdy5ub2RlLmVudHJ5Lm5hbWUgPT09IHBhcmVudE5hbWUpO1xuXG4gICAgaWYgKGFscmVhZHlEaXNwbGF5ZWRQYXJlbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZWxvYWQodGhpcy5zZWxlY3RlZE5vZGUpO1xuICB9XG5cbiAgb25Db250ZW50Q29waWVkKG5vZGVzOiBNaW5pbWFsTm9kZUVudGl0eVtdKSB7XG4gICAgY29uc3QgbmV3Tm9kZSA9IG5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUgJiYgbm9kZS5lbnRyeSAmJiBub2RlLmVudHJ5LnBhcmVudElkID09PSB0aGlzLmdldFBhcmVudE5vZGVJZCgpKTtcbiAgICBpZiAobmV3Tm9kZSkge1xuICAgICAgdGhpcy5yZWxvYWQodGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRvZG86IHJldmlldyB0aGlzIGFwcHJvYWNoIG9uY2UgNS4yLjMgaXMgb3V0XG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ3VycmVudE5vZGUobm9kZTogTWluaW1hbE5vZGVFbnRyeUVudGl0eSkge1xuICAgIHRoaXMubm9kZVBhdGggPSBudWxsO1xuXG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXRoICYmIG5vZGUucGF0aC5lbGVtZW50cykge1xuICAgICAgY29uc3QgZWxlbWVudHMgPSBub2RlLnBhdGguZWxlbWVudHM7XG5cbiAgICAgIHRoaXMubm9kZVBhdGggPSBlbGVtZW50cy5tYXAoKHBhdGhFbGVtZW50KSA9PiBPYmplY3QuYXNzaWduKHt9LCBwYXRoRWxlbWVudCkpO1xuXG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoZWxlbWVudHNbMV0ubmFtZSA9PT0gJ1VzZXIgSG9tZXMnKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzQWRtaW4pIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnNwbGljZSgwLCAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHNbMV0ubmFtZSA9PT0gJ1NpdGVzJykge1xuICAgICAgICAgIGF3YWl0IHRoaXMubm9ybWFsaXplU2l0ZVBhdGgobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldEN1cnJlbnRGb2xkZXJBY3Rpb24obm9kZSkpO1xuICB9XG5cbiAgLy8gdG9kbzogcmV2aWV3IHRoaXMgYXBwcm9hY2ggb25jZSA1LjIuMyBpcyBvdXRcbiAgcHJpdmF0ZSBhc3luYyBub3JtYWxpemVTaXRlUGF0aChub2RlOiBNaW5pbWFsTm9kZUVudHJ5RW50aXR5KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBub2RlLnBhdGguZWxlbWVudHM7XG5cbiAgICAvLyByZW1vdmUgJ1NpdGVzJ1xuICAgIGVsZW1lbnRzLnNwbGljZSgxLCAxKTtcblxuICAgIGlmICh0aGlzLmlzU2l0ZUNvbnRhaW5lcihub2RlKSkge1xuICAgICAgLy8gcmVuYW1lICdkb2N1bWVudExpYnJhcnknIGVudHJ5IHRvIHRoZSB0YXJnZXQgc2l0ZSBkaXNwbGF5IG5hbWVcbiAgICAgIC8vIGNsaWNraW5nIG9uIHRoZSBicmVhZGNydW1iIGVudHJ5IGxvYWRzIHRoZSBzaXRlIGNvbnRlbnRcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBhd2FpdCB0aGlzLmNvbnRlbnRBcGkuZ2V0Tm9kZUluZm8obm9kZS5wYXJlbnRJZCkudG9Qcm9taXNlKCk7XG4gICAgICBub2RlLm5hbWUgPSBwYXJlbnROb2RlLnByb3BlcnRpZXNbJ2NtOnRpdGxlJ10gfHwgcGFyZW50Tm9kZS5uYW1lO1xuXG4gICAgICAvLyByZW1vdmUgdGhlIHNpdGUgZW50cnlcbiAgICAgIGVsZW1lbnRzLnNwbGljZSgxLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVtb3ZlICdkb2N1bWVudExpYnJhcnknIGluIHRoZSBtaWRkbGUgb2YgdGhlIHBhdGhcbiAgICAgIGNvbnN0IGRvY0xpYiA9IGVsZW1lbnRzLmZpbmRJbmRleCgoZWwpID0+IGVsLm5hbWUgPT09ICdkb2N1bWVudExpYnJhcnknKTtcbiAgICAgIGlmIChkb2NMaWIgPiAtMSkge1xuICAgICAgICBjb25zdCBzaXRlRnJhZ21lbnQgPSBlbGVtZW50c1tkb2NMaWIgLSAxXTtcbiAgICAgICAgY29uc3Qgc2l0ZU5vZGUgPSBhd2FpdCB0aGlzLmNvbnRlbnRBcGkuZ2V0Tm9kZUluZm8oc2l0ZUZyYWdtZW50LmlkKS50b1Byb21pc2UoKTtcblxuICAgICAgICAvLyBhcHBseSBTaXRlIE5hbWUgdG8gdGhlIHBhcmVudCBmcmFnbWVudFxuICAgICAgICBzaXRlRnJhZ21lbnQubmFtZSA9IHNpdGVOb2RlLnByb3BlcnRpZXNbJ2NtOnRpdGxlJ10gfHwgc2l0ZU5vZGUubmFtZTtcbiAgICAgICAgZWxlbWVudHMuc3BsaWNlKGRvY0xpYiwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTaXRlQ29udGFpbmVyKG5vZGU6IE1pbmltYWxOb2RlRW50cnlFbnRpdHkpOiBib29sZWFuIHtcbiAgICBpZiAobm9kZSAmJiBub2RlLmFzcGVjdE5hbWVzICYmIG5vZGUuYXNwZWN0TmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5vZGUuYXNwZWN0TmFtZXMuaW5kZXhPZignc3Q6c2l0ZUNvbnRhaW5lcicpID49IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzUm9vdE5vZGUobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5wYXRoICYmIHRoaXMubm9kZS5wYXRoLmVsZW1lbnRzICYmIHRoaXMubm9kZS5wYXRoLmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUucGF0aC5lbGVtZW50c1swXS5pZCA9PT0gbm9kZUlkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvbkZpbHRlclNlbGVjdGVkKGFjdGl2ZUZpbHRlcnM6IEZpbHRlclNlYXJjaFtdKSB7XG4gICAgaWYgKGFjdGl2ZUZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5BbHdheXM7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9GaWx0ZXIoYWN0aXZlRmlsdGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICB0aGlzLnNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5EYXRhO1xuICAgICAgdGhpcy5vbkFsbEZpbHRlckNsZWFyZWQoKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZVRvRmlsdGVyKGFjdGl2ZUZpbHRlcnM6IEZpbHRlclNlYXJjaFtdKSB7XG4gICAgY29uc3Qgb2JqZWN0RnJvbU1hcCA9IHt9O1xuICAgIGFjdGl2ZUZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBGaWx0ZXJTZWFyY2gpID0+IHtcbiAgICAgIGxldCBwYXJhbVZhbHVlO1xuICAgICAgaWYgKGZpbHRlci52YWx1ZSAmJiBmaWx0ZXIudmFsdWUuZnJvbSAmJiBmaWx0ZXIudmFsdWUudG8pIHtcbiAgICAgICAgcGFyYW1WYWx1ZSA9IGAke2ZpbHRlci52YWx1ZS5mcm9tfXx8JHtmaWx0ZXIudmFsdWUudG99YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtVmFsdWUgPSBmaWx0ZXIudmFsdWU7XG4gICAgICB9XG4gICAgICBvYmplY3RGcm9tTWFwW2ZpbHRlci5rZXldID0gcGFyYW1WYWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHF1ZXJ5UGFyYW1zOiBvYmplY3RGcm9tTWFwIH0pO1xuICB9XG5cbiAgaXNGaWx0ZXJIZWFkZXJBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0hlYWRlciA9PT0gU2hvd0hlYWRlck1vZGUuQWx3YXlzO1xuICB9XG5cbiAgb25FcnJvcigpIHtcbiAgICB0aGlzLmlzVmFsaWRQYXRoID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxhY2EtcGFnZS1sYXlvdXQgW2hhc0Vycm9yXT1cIiFpc1ZhbGlkUGF0aFwiPlxuICA8YWNhLXBhZ2UtbGF5b3V0LWhlYWRlcj5cbiAgICA8YWRmLWJyZWFkY3J1bWIgW3Jvb3RdPVwidGl0bGVcIiBbZm9sZGVyTm9kZV09XCJub2RlXCIgW21heEl0ZW1zXT1cImlzU21hbGxTY3JlZW4gPyAxIDogMFwiIChuYXZpZ2F0ZSk9XCJvbkJyZWFkY3J1bWJOYXZpZ2F0ZSgkZXZlbnQpXCI+IDwvYWRmLWJyZWFkY3J1bWI+XG5cbiAgICA8YWRmLXRvb2xiYXIgY2xhc3M9XCJhZGYtdG9vbGJhci0taW5saW5lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBhY3Rpb25zOyB0cmFja0J5OiB0cmFja0J5QWN0aW9uSWRcIj5cbiAgICAgICAgPGFjYS10b29sYmFyLWFjdGlvbiBbYWN0aW9uUmVmXT1cImVudHJ5XCI+PC9hY2EtdG9vbGJhci1hY3Rpb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2FkZi10b29sYmFyPlxuICA8L2FjYS1wYWdlLWxheW91dC1oZWFkZXI+XG5cbiAgPGFjYS1wYWdlLWxheW91dC1lcnJvcj5cbiAgICA8YWNhLWdlbmVyaWMtZXJyb3I+PC9hY2EtZ2VuZXJpYy1lcnJvcj5cbiAgPC9hY2EtcGFnZS1sYXlvdXQtZXJyb3I+XG5cbiAgPGFjYS1wYWdlLWxheW91dC1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIiAqbmdJZj1cIiEoc2hvd0xvYWRlciQgfCBhc3luYylcIj5cbiAgICAgIDxhZGYtdXBsb2FkLWRyYWctYXJlYSBbcm9vdEZvbGRlcklkXT1cIm5vZGU/LmlkXCIgW2Rpc2FibGVkXT1cIiFjYW5VcGxvYWRcIiAodXBkYXRlRmlsZVZlcnNpb24pPVwib25VcGxvYWROZXdWZXJzaW9uKCRldmVudClcIj5cbiAgICAgICAgPGFkZi1kb2N1bWVudC1saXN0XG4gICAgICAgICAgI2RvY3VtZW50TGlzdFxuICAgICAgICAgIGFjYURvY3VtZW50TGlzdFxuICAgICAgICAgIGFjYUNvbnRleHRBY3Rpb25zXG4gICAgICAgICAgW2Rpc3BsYXldPVwiZG9jdW1lbnREaXNwbGF5TW9kZSQgfCBhc3luY1wiXG4gICAgICAgICAgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICBbY3VycmVudEZvbGRlcklkXT1cIm5vZGU/LmlkXCJcbiAgICAgICAgICBbbG9hZGluZ109XCJ0cnVlXCJcbiAgICAgICAgICBbc2hvd0hlYWRlcl09XCJzaG93SGVhZGVyXCJcbiAgICAgICAgICBbbm9kZV09XCJub2RlUmVzdWx0XCJcbiAgICAgICAgICBbYWxsb3dEcm9wRmlsZXNdPVwidHJ1ZVwiXG4gICAgICAgICAgW25hdmlnYXRlXT1cImZhbHNlXCJcbiAgICAgICAgICBbc29ydGluZ109XCJbJ25hbWUnLCAnQVNDJ11cIlxuICAgICAgICAgIFtpbWFnZVJlc29sdmVyXT1cImltYWdlUmVzb2x2ZXJcIlxuICAgICAgICAgIFtoZWFkZXJGaWx0ZXJzXT1cInRydWVcIlxuICAgICAgICAgIFtmaWx0ZXJWYWx1ZV09XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgICAgKG5vZGUtZGJsY2xpY2spPVwiaGFuZGxlTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgIChuYW1lLWNsaWNrKT1cImhhbmRsZU5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAoc29ydGluZy1jaGFuZ2VkKT1cIm9uU29ydGluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGZpbHRlclNlbGVjdGlvbik9XCJvbkZpbHRlclNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIChlcnJvcik9XCJvbkVycm9yKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRhdGEtY29sdW1ucz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5Q29sdW1uSWRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50ZW1wbGF0ZSAmJiAhKGNvbHVtbi5kZXNrdG9wT25seSAmJiBpc1NtYWxsU2NyZWVuKVwiPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtblxuICAgICAgICAgICAgICAgICAgW2tleV09XCJjb2x1bW4ua2V5XCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiY29sdW1uLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJjb2x1bW4uZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBbc29ydGluZ0tleV09XCJjb2x1bW4uc29ydGluZ0tleSB8fCBjb2x1bW4ua2V5XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbnRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxhZGYtZHluYW1pYy1jb2x1bW4gW2lkXT1cImNvbHVtbi50ZW1wbGF0ZVwiIFtjb250ZXh0XT1cImNvbnRleHRcIj4gPC9hZGYtZHluYW1pYy1jb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGF0YS1jb2x1bW4+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnRlbXBsYXRlICYmICEoY29sdW1uLmRlc2t0b3BPbmx5ICYmIGlzU21hbGxTY3JlZW4pXCI+XG4gICAgICAgICAgICAgICAgPGRhdGEtY29sdW1uXG4gICAgICAgICAgICAgICAgICBba2V5XT1cImNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb2x1bW4udHlwZVwiXG4gICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbHVtbi5mb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIFtzb3J0aW5nS2V5XT1cImNvbHVtbi5zb3J0aW5nS2V5IHx8IGNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2RhdGEtY29sdW1uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGF0YS1jb2x1bW5zPlxuXG4gICAgICAgICAgPGFkZi1jdXN0b20tZW1wdHktY29udGVudC10ZW1wbGF0ZSAqbmdJZj1cImlzRmlsdGVySGVhZGVyQWN0aXZlKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zZWFyY2hfX2Jsb2NrXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eS1zZWFyY2hfX3RleHRcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdBUFAuQlJPV1NFLlNFQVJDSC5OT19GSUxURVJfUkVTVUxUUycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9hZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgIDwvYWRmLWRvY3VtZW50LWxpc3Q+XG5cbiAgICAgICAgPGFkZi1wYWdpbmF0aW9uIGFjYVBhZ2luYXRpb24gW3RhcmdldF09XCJkb2N1bWVudExpc3RcIj4gPC9hZGYtcGFnaW5hdGlvbj5cbiAgICAgIDwvYWRmLXVwbG9hZC1kcmFnLWFyZWE+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgKm5nSWY9XCJzaG93TG9hZGVyJCB8IGFzeW5jXCJcbiAgICAgIGlkPVwiYWRmLWRvY3VtZW50LWxpc3QtbG9hZGluZ1wiXG4gICAgICBjbGFzcz1cImFkZi1kb2N1bWVudC1saXN0LWxvYWRpbmctbWFyZ2luXCJcbiAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgW21vZGVdPVwiJ2luZGV0ZXJtaW5hdGUnXCI+XG4gICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyXCIgKm5nSWY9XCJpbmZvRHJhd2VyT3BlbmVkJCB8IGFzeW5jXCI+XG4gICAgICA8YWNhLWluZm8tZHJhd2VyIFtub2RlXT1cInNlbGVjdGlvbi5sYXN0XCI+PC9hY2EtaW5mby1kcmF3ZXI+XG4gICAgPC9kaXY+XG4gIDwvYWNhLXBhZ2UtbGF5b3V0LWNvbnRlbnQ+XG48L2FjYS1wYWdlLWxheW91dD5cbiJdfQ==