@alfresco/aca-content 4.4.1 → 4.5.0-10004013253

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 (288) hide show
  1. package/about/about.component.d.ts +2 -2
  2. package/about/dev-mode.tokens.d.ts +1 -1
  3. package/about/package-json.token.d.ts +1 -1
  4. package/about/public-api.d.ts +1 -1
  5. package/assets/app.extensions.json +13 -19
  6. package/assets/i18n/ar.json +1 -1
  7. package/assets/i18n/cs.json +1 -1
  8. package/assets/i18n/da.json +1 -1
  9. package/assets/i18n/de.json +1 -1
  10. package/assets/i18n/en.json +1 -1
  11. package/assets/i18n/es.json +1 -1
  12. package/assets/i18n/fi.json +1 -1
  13. package/assets/i18n/fr.json +1 -1
  14. package/assets/i18n/it.json +1 -1
  15. package/assets/i18n/ja.json +1 -1
  16. package/assets/i18n/nb.json +1 -1
  17. package/assets/i18n/nl.json +1 -1
  18. package/assets/i18n/pl.json +1 -1
  19. package/assets/i18n/pt-BR.json +1 -1
  20. package/assets/i18n/ru.json +1 -1
  21. package/assets/i18n/sv.json +1 -1
  22. package/assets/i18n/zh-CN.json +1 -1
  23. package/esm2020/about/about.component.mjs +7 -7
  24. package/esm2020/about/aca-about.module.mjs +2 -2
  25. package/esm2020/about/dev-mode.tokens.mjs +2 -2
  26. package/esm2020/about/package-json.token.mjs +2 -2
  27. package/esm2020/about/public-api.mjs +2 -2
  28. package/esm2020/folder-rules/folder-rules.module.mjs +8 -3
  29. package/esm2020/folder-rules/folder-rules.rules.mjs +2 -2
  30. package/esm2020/folder-rules/manage-rules/manage-rules.smart-component.mjs +6 -5
  31. package/esm2020/folder-rules/model/action-parameter-constraint.model.mjs +2 -2
  32. package/esm2020/folder-rules/model/rule-action.model.mjs +2 -2
  33. package/esm2020/folder-rules/model/rule-composite-condition.model.mjs +2 -2
  34. package/esm2020/folder-rules/model/rule-grouping-item.model.mjs +2 -2
  35. package/esm2020/folder-rules/model/rule-set.model.mjs +2 -2
  36. package/esm2020/folder-rules/model/rule-simple-condition.model.mjs +2 -2
  37. package/esm2020/folder-rules/model/rule.model.mjs +2 -2
  38. package/esm2020/folder-rules/public-api.mjs +2 -2
  39. package/esm2020/folder-rules/rule-details/actions/rule-action-list.ui-component.mjs +2 -2
  40. package/esm2020/folder-rules/rule-details/actions/rule-action.ui-component.mjs +77 -10
  41. package/esm2020/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.mjs +2 -2
  42. package/esm2020/folder-rules/rule-details/conditions/rule-condition-comparators.mjs +2 -2
  43. package/esm2020/folder-rules/rule-details/conditions/rule-condition-fields.mjs +2 -2
  44. package/esm2020/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.mjs +21 -22
  45. package/esm2020/folder-rules/rule-details/edit-rule-dialog.ui-component.mjs +2 -2
  46. package/esm2020/folder-rules/rule-details/options/rule-options.ui-component.mjs +2 -2
  47. package/esm2020/folder-rules/rule-details/rule-details.ui-component.mjs +2 -2
  48. package/esm2020/folder-rules/rule-details/triggers/rule-triggers.ui-component.mjs +2 -2
  49. package/esm2020/folder-rules/rule-details/validators/rule-actions.validator.mjs +2 -2
  50. package/esm2020/folder-rules/rule-details/validators/rule-composite-condition.validator.mjs +2 -2
  51. package/esm2020/folder-rules/rule-list/rule-list/rule-list.ui-component.mjs +25 -19
  52. package/esm2020/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.mjs +2 -2
  53. package/esm2020/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.mjs +2 -2
  54. package/esm2020/folder-rules/rule-set-picker/rule-set-picker.smart-component.mjs +2 -2
  55. package/esm2020/folder-rules/services/actions.service.mjs +2 -2
  56. package/esm2020/folder-rules/services/folder-rule-sets.service.mjs +7 -3
  57. package/esm2020/folder-rules/services/folder-rules.service.mjs +2 -2
  58. package/esm2020/lib/aca-content.module.mjs +39 -87
  59. package/esm2020/lib/aca-content.routes.mjs +2 -2
  60. package/esm2020/lib/components/common/index.mjs +2 -2
  61. package/esm2020/lib/components/common/language-picker/language-picker.component.mjs +2 -2
  62. package/esm2020/lib/components/common/location-link/location-link.component.mjs +2 -2
  63. package/esm2020/lib/components/common/logout/logout.component.mjs +5 -6
  64. package/esm2020/lib/components/common/toggle-shared/toggle-shared.component.mjs +2 -2
  65. package/esm2020/lib/components/common/user-info/user-info.component.mjs +2 -2
  66. package/esm2020/lib/components/context-menu/context-menu-item.component.mjs +7 -9
  67. package/esm2020/lib/components/context-menu/context-menu-outside-event.directive.mjs +2 -2
  68. package/esm2020/lib/components/context-menu/context-menu-overlay.mjs +2 -2
  69. package/esm2020/lib/components/context-menu/context-menu.component.mjs +8 -10
  70. package/esm2020/lib/components/context-menu/context-menu.service.mjs +2 -2
  71. package/esm2020/lib/components/context-menu/direction.token.mjs +2 -2
  72. package/esm2020/lib/components/context-menu/interfaces.mjs +2 -2
  73. package/esm2020/lib/components/details/details.component.mjs +2 -2
  74. package/esm2020/lib/components/dl-custom-components/name-column/name-column.component.mjs +7 -9
  75. package/esm2020/lib/components/dl-custom-components/tags-column/tags-column.component.mjs +2 -2
  76. package/esm2020/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +2 -2
  77. package/esm2020/lib/components/favorite-libraries/favorite-libraries.component.mjs +11 -12
  78. package/esm2020/lib/components/favorites/favorites.component.mjs +11 -12
  79. package/esm2020/lib/components/files/files.component.mjs +29 -27
  80. package/esm2020/lib/components/home/home.component.mjs +10 -14
  81. package/esm2020/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +2 -2
  82. package/esm2020/lib/components/info-drawer/info.drawer.module.mjs +2 -2
  83. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +2 -2
  84. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +2 -2
  85. package/esm2020/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +2 -2
  86. package/esm2020/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +7 -8
  87. package/esm2020/lib/components/libraries/libraries.component.mjs +11 -12
  88. package/esm2020/lib/components/recent-files/recent-files.component.mjs +11 -12
  89. package/esm2020/lib/components/search/index.mjs +2 -2
  90. package/esm2020/lib/components/search/search-action-menu/search-action-menu.component.mjs +2 -2
  91. package/esm2020/lib/components/search/search-input/search-input.component.mjs +2 -2
  92. package/esm2020/lib/components/search/search-input-control/search-input-control.component.mjs +2 -2
  93. package/esm2020/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +2 -2
  94. package/esm2020/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +9 -10
  95. package/esm2020/lib/components/search/search-navigation.service.mjs +2 -2
  96. package/esm2020/lib/components/search/search-results/search-results.component.mjs +17 -22
  97. package/esm2020/lib/components/search/search-results-row/search-results-row.component.mjs +2 -2
  98. package/esm2020/lib/components/shared-files/shared-files.component.mjs +11 -12
  99. package/esm2020/lib/components/shared-link-view/shared-link-view.component.mjs +2 -2
  100. package/esm2020/lib/components/sidenav/components/button-menu.component.mjs +2 -2
  101. package/esm2020/lib/components/sidenav/components/expand-menu.component.mjs +2 -2
  102. package/esm2020/lib/components/sidenav/components/sidenav-header.component.mjs +11 -16
  103. package/esm2020/lib/components/sidenav/directives/action.directive.mjs +2 -2
  104. package/esm2020/lib/components/sidenav/directives/active-link.directive.mjs +2 -2
  105. package/esm2020/lib/components/sidenav/directives/expansion-panel.directive.mjs +2 -2
  106. package/esm2020/lib/components/sidenav/directives/menu-panel.directive.mjs +2 -2
  107. package/esm2020/lib/components/sidenav/index.mjs +2 -2
  108. package/esm2020/lib/components/sidenav/sidenav.component.mjs +5 -6
  109. package/esm2020/lib/components/sidenav/user-menu/user-menu.component.mjs +2 -2
  110. package/esm2020/lib/components/toolbar/index.mjs +2 -2
  111. package/esm2020/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +2 -2
  112. package/esm2020/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +7 -8
  113. package/esm2020/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +7 -8
  114. package/esm2020/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +2 -2
  115. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +6 -7
  116. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.mjs +7 -8
  117. package/esm2020/lib/components/toolbar/view-node/view-node.component.mjs +2 -2
  118. package/esm2020/lib/components/trashcan/trashcan.component.mjs +10 -11
  119. package/esm2020/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +2 -2
  120. package/esm2020/lib/components/view-profile/view-profile.component.mjs +2 -2
  121. package/esm2020/lib/components/view-profile/view-profile.guard.mjs +2 -2
  122. package/esm2020/lib/dialogs/node-template/create-from-template.dialog.mjs +2 -2
  123. package/esm2020/lib/directives/document-list.directive.mjs +44 -16
  124. package/esm2020/lib/extensions/core.extensions.module.mjs +2 -7
  125. package/esm2020/lib/services/content-management.service.mjs +26 -28
  126. package/esm2020/lib/services/content-url.service.mjs +2 -2
  127. package/esm2020/lib/services/node-actions.service.mjs +2 -2
  128. package/esm2020/lib/services/node-template.service.mjs +2 -2
  129. package/esm2020/lib/store/app-store.module.mjs +2 -2
  130. package/esm2020/lib/store/effects/app.effects.mjs +2 -2
  131. package/esm2020/lib/store/effects/contextmenu.effects.mjs +2 -2
  132. package/esm2020/lib/store/effects/download.effects.mjs +2 -2
  133. package/esm2020/lib/store/effects/favorite.effects.mjs +2 -2
  134. package/esm2020/lib/store/effects/library.effects.mjs +2 -2
  135. package/esm2020/lib/store/effects/node.effects.mjs +2 -2
  136. package/esm2020/lib/store/effects/search.effects.mjs +3 -3
  137. package/esm2020/lib/store/effects/template.effects.mjs +2 -2
  138. package/esm2020/lib/store/effects/upload.effects.mjs +2 -2
  139. package/esm2020/lib/store/effects/viewer.effects.mjs +2 -2
  140. package/esm2020/lib/store/effects.mjs +2 -2
  141. package/esm2020/lib/store/initial-state.mjs +3 -39
  142. package/esm2020/lib/store/reducers/app.reducer.mjs +3 -7
  143. package/esm2020/ms-office/actions/aos.actions.mjs +2 -2
  144. package/esm2020/ms-office/aos-extension.module.mjs +2 -2
  145. package/esm2020/ms-office/aos-extension.service.mjs +10 -12
  146. package/esm2020/ms-office/effects/aos.effects.mjs +2 -2
  147. package/esm2020/ms-office/public-api.mjs +2 -2
  148. package/esm2020/public-api.mjs +2 -2
  149. package/esm2020/viewer/lib/components/preview/preview.component.mjs +236 -0
  150. package/esm2020/viewer/lib/components/viewer/viewer.component.mjs +42 -203
  151. package/esm2020/viewer/lib/services/viewer.service.mjs +215 -0
  152. package/esm2020/viewer/lib/viewer.module.mjs +7 -6
  153. package/esm2020/viewer/public-api.mjs +3 -2
  154. package/fesm2015/alfresco-aca-content-about.mjs +10 -10
  155. package/fesm2015/alfresco-aca-content-about.mjs.map +1 -1
  156. package/fesm2015/alfresco-aca-content-folder-rules.mjs +167 -93
  157. package/fesm2015/alfresco-aca-content-folder-rules.mjs.map +1 -1
  158. package/fesm2015/alfresco-aca-content-ms-office.mjs +10 -13
  159. package/fesm2015/alfresco-aca-content-ms-office.mjs.map +1 -1
  160. package/fesm2015/alfresco-aca-content-viewer.mjs +414 -195
  161. package/fesm2015/alfresco-aca-content-viewer.mjs.map +1 -1
  162. package/fesm2015/alfresco-aca-content.mjs +5995 -6053
  163. package/fesm2015/alfresco-aca-content.mjs.map +1 -1
  164. package/fesm2020/alfresco-aca-content-about.mjs +10 -10
  165. package/fesm2020/alfresco-aca-content-about.mjs.map +1 -1
  166. package/fesm2020/alfresco-aca-content-folder-rules.mjs +178 -96
  167. package/fesm2020/alfresco-aca-content-folder-rules.mjs.map +1 -1
  168. package/fesm2020/alfresco-aca-content-ms-office.mjs +11 -14
  169. package/fesm2020/alfresco-aca-content-ms-office.mjs.map +1 -1
  170. package/fesm2020/alfresco-aca-content-viewer.mjs +449 -186
  171. package/fesm2020/alfresco-aca-content-viewer.mjs.map +1 -1
  172. package/fesm2020/alfresco-aca-content.mjs +4935 -4993
  173. package/fesm2020/alfresco-aca-content.mjs.map +1 -1
  174. package/folder-rules/folder-rules.module.d.ts +1 -1
  175. package/folder-rules/folder-rules.rules.d.ts +1 -1
  176. package/folder-rules/manage-rules/manage-rules.smart-component.d.ts +1 -1
  177. package/folder-rules/model/action-parameter-constraint.model.d.ts +1 -1
  178. package/folder-rules/model/rule-action.model.d.ts +1 -1
  179. package/folder-rules/model/rule-composite-condition.model.d.ts +1 -1
  180. package/folder-rules/model/rule-grouping-item.model.d.ts +1 -1
  181. package/folder-rules/model/rule-set.model.d.ts +1 -1
  182. package/folder-rules/model/rule-simple-condition.model.d.ts +1 -1
  183. package/folder-rules/model/rule.model.d.ts +1 -1
  184. package/folder-rules/public-api.d.ts +1 -1
  185. package/folder-rules/rule-details/actions/rule-action-list.ui-component.d.ts +1 -1
  186. package/folder-rules/rule-details/actions/rule-action.ui-component.d.ts +10 -5
  187. package/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.d.ts +1 -1
  188. package/folder-rules/rule-details/conditions/rule-condition-comparators.d.ts +1 -1
  189. package/folder-rules/rule-details/conditions/rule-condition-fields.d.ts +1 -1
  190. package/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.d.ts +5 -6
  191. package/folder-rules/rule-details/edit-rule-dialog.ui-component.d.ts +1 -1
  192. package/folder-rules/rule-details/options/rule-options.ui-component.d.ts +1 -1
  193. package/folder-rules/rule-details/rule-details.ui-component.d.ts +1 -1
  194. package/folder-rules/rule-details/triggers/rule-triggers.ui-component.d.ts +1 -1
  195. package/folder-rules/rule-details/validators/rule-actions.validator.d.ts +1 -1
  196. package/folder-rules/rule-details/validators/rule-composite-condition.validator.d.ts +1 -1
  197. package/folder-rules/rule-list/rule-list/rule-list.ui-component.d.ts +14 -9
  198. package/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.d.ts +1 -1
  199. package/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.d.ts +1 -1
  200. package/folder-rules/rule-set-picker/rule-set-picker.smart-component.d.ts +1 -1
  201. package/lib/aca-content.module.d.ts +5 -16
  202. package/lib/aca-content.routes.d.ts +1 -1
  203. package/lib/components/common/index.d.ts +1 -1
  204. package/lib/components/common/location-link/location-link.component.d.ts +1 -1
  205. package/lib/components/common/toggle-shared/toggle-shared.component.d.ts +1 -1
  206. package/lib/components/context-menu/context-menu-outside-event.directive.d.ts +1 -1
  207. package/lib/components/context-menu/context-menu-overlay.d.ts +1 -1
  208. package/lib/components/context-menu/context-menu.component.d.ts +1 -1
  209. package/lib/components/context-menu/context-menu.service.d.ts +1 -1
  210. package/lib/components/context-menu/direction.token.d.ts +1 -1
  211. package/lib/components/context-menu/interfaces.d.ts +1 -1
  212. package/lib/components/details/details.component.d.ts +1 -1
  213. package/lib/components/dl-custom-components/name-column/name-column.component.d.ts +1 -1
  214. package/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.d.ts +1 -1
  215. package/lib/components/favorite-libraries/favorite-libraries.component.d.ts +1 -1
  216. package/lib/components/favorites/favorites.component.d.ts +1 -1
  217. package/lib/components/files/files.component.d.ts +3 -3
  218. package/lib/components/home/home.component.d.ts +2 -6
  219. package/lib/components/info-drawer/comments-tab/comments-tab.component.d.ts +1 -1
  220. package/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.d.ts +1 -1
  221. package/lib/components/info-drawer/metadata-tab/metadata-tab.component.d.ts +1 -1
  222. package/lib/components/info-drawer/versions-tab/versions-tab.component.d.ts +1 -1
  223. package/lib/components/recent-files/recent-files.component.d.ts +1 -1
  224. package/lib/components/search/index.d.ts +1 -1
  225. package/lib/components/search/search-action-menu/search-action-menu.component.d.ts +1 -1
  226. package/lib/components/search/search-input/search-input.component.d.ts +1 -1
  227. package/lib/components/search/search-input-control/search-input-control.component.d.ts +1 -1
  228. package/lib/components/search/search-libraries-results/search-libraries-query-builder.service.d.ts +1 -1
  229. package/lib/components/search/search-results/search-results.component.d.ts +1 -2
  230. package/lib/components/search/search-results-row/search-results-row.component.d.ts +1 -1
  231. package/lib/components/shared-files/shared-files.component.d.ts +1 -1
  232. package/lib/components/shared-link-view/shared-link-view.component.d.ts +1 -1
  233. package/lib/components/sidenav/components/button-menu.component.d.ts +1 -1
  234. package/lib/components/sidenav/components/expand-menu.component.d.ts +1 -1
  235. package/lib/components/sidenav/components/sidenav-header.component.d.ts +4 -5
  236. package/lib/components/sidenav/directives/active-link.directive.d.ts +1 -1
  237. package/lib/components/sidenav/directives/expansion-panel.directive.d.ts +1 -1
  238. package/lib/components/sidenav/directives/menu-panel.directive.d.ts +1 -1
  239. package/lib/components/sidenav/index.d.ts +1 -1
  240. package/lib/components/sidenav/sidenav.component.d.ts +1 -1
  241. package/lib/components/sidenav/user-menu/user-menu.component.d.ts +1 -1
  242. package/lib/components/toolbar/index.d.ts +1 -1
  243. package/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.d.ts +1 -1
  244. package/lib/components/toolbar/toggle-favorite/toggle-favorite.component.d.ts +1 -1
  245. package/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.d.ts +1 -1
  246. package/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.d.ts +1 -1
  247. package/lib/components/upload-files-dialog/upload-files-dialog.component.d.ts +1 -1
  248. package/lib/components/view-profile/view-profile.component.d.ts +1 -1
  249. package/lib/dialogs/node-template/create-from-template.dialog.d.ts +1 -1
  250. package/lib/directives/document-list.directive.d.ts +4 -1
  251. package/lib/extensions/core.extensions.module.d.ts +1 -2
  252. package/lib/services/content-management.service.d.ts +4 -3
  253. package/lib/store/effects/app.effects.d.ts +1 -1
  254. package/lib/store/effects/download.effects.d.ts +1 -1
  255. package/lib/store/effects/favorite.effects.d.ts +1 -1
  256. package/lib/store/effects/library.effects.d.ts +1 -1
  257. package/lib/store/effects/node.effects.d.ts +1 -1
  258. package/lib/store/effects/search.effects.d.ts +1 -1
  259. package/lib/store/effects/template.effects.d.ts +1 -1
  260. package/lib/store/effects/upload.effects.d.ts +1 -1
  261. package/lib/store/effects/viewer.effects.d.ts +1 -1
  262. package/lib/store/effects.d.ts +1 -1
  263. package/lib/store/initial-state.d.ts +2 -4
  264. package/lib/store/reducers/app.reducer.d.ts +1 -1
  265. package/ms-office/actions/aos.actions.d.ts +1 -1
  266. package/ms-office/aos-extension.module.d.ts +1 -1
  267. package/ms-office/aos-extension.service.d.ts +5 -5
  268. package/ms-office/public-api.d.ts +1 -1
  269. package/package.json +5 -13
  270. package/public-api.d.ts +1 -1
  271. package/{preview/lib/components → viewer/lib/components/preview}/preview.component.d.ts +16 -43
  272. package/viewer/lib/components/viewer/viewer.component.d.ts +20 -46
  273. package/viewer/lib/services/viewer.service.d.ts +65 -0
  274. package/viewer/lib/viewer.module.d.ts +2 -1
  275. package/viewer/public-api.d.ts +2 -1
  276. package/esm2020/folder-rules/rule-details/conditions/rule-mime-types.mjs +0 -25
  277. package/esm2020/preview/alfresco-aca-content-preview.mjs +0 -5
  278. package/esm2020/preview/lib/components/preview.component.mjs +0 -394
  279. package/esm2020/preview/lib/preview.module.mjs +0 -39
  280. package/esm2020/preview/public-api.mjs +0 -29
  281. package/fesm2015/alfresco-aca-content-preview.mjs +0 -447
  282. package/fesm2015/alfresco-aca-content-preview.mjs.map +0 -1
  283. package/fesm2020/alfresco-aca-content-preview.mjs +0 -461
  284. package/fesm2020/alfresco-aca-content-preview.mjs.map +0 -1
  285. package/folder-rules/rule-details/conditions/rule-mime-types.d.ts +0 -27
  286. package/preview/index.d.ts +0 -5
  287. package/preview/lib/preview.module.d.ts +0 -7
  288. package/preview/public-api.d.ts +0 -25
@@ -1,394 +0,0 @@
1
- /*!
2
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
3
- *
4
- * Alfresco Example Content Application
5
- *
6
- * This file is part of the Alfresco Example Content Application.
7
- * If the software was purchased under a paid Alfresco license, the terms of
8
- * the paid license agreement will prevail. Otherwise, the software is
9
- * provided under the following open source license terms:
10
- *
11
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Lesser General Public License as published by
13
- * the Free Software Foundation, either version 3 of the License, or
14
- * (at your option) any later version.
15
- *
16
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Lesser General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Lesser General Public License
22
- * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
- import { Component, ViewEncapsulation, HostListener } from '@angular/core';
25
- import { CommonModule, Location } from '@angular/common';
26
- import { ActivatedRoute, PRIMARY_OUTLET } from '@angular/router';
27
- import { debounceTime, map, takeUntil } from 'rxjs/operators';
28
- import { UserPreferencesService, ObjectUtils, ViewerModule } from '@alfresco/adf-core';
29
- import { ViewerActionTypes, SetSelectedNodesAction } from '@alfresco/aca-shared/store';
30
- import { PageComponent, AppHookService, ContentApiService, InfoDrawerComponent, ToolbarMenuItemComponent, ToolbarComponent } from '@alfresco/aca-shared';
31
- import { from } from 'rxjs';
32
- import { Actions, ofType } from '@ngrx/effects';
33
- import { AlfrescoViewerModule, NodesApiService } from '@alfresco/adf-content-services';
34
- import * as i0 from "@angular/core";
35
- import * as i1 from "@alfresco/aca-shared";
36
- import * as i2 from "@alfresco/adf-core";
37
- import * as i3 from "@angular/router";
38
- import * as i4 from "@alfresco/adf-content-services";
39
- import * as i5 from "@ngrx/effects";
40
- import * as i6 from "@angular/common";
41
- export class PreviewComponent extends PageComponent {
42
- constructor(contentApi, preferences, route, nodesApiService, actions$, location, appHookService) {
43
- super();
44
- this.contentApi = contentApi;
45
- this.preferences = preferences;
46
- this.route = route;
47
- this.nodesApiService = nodesApiService;
48
- this.actions$ = actions$;
49
- this.location = location;
50
- this.appHookService = appHookService;
51
- this.previewLocation = null;
52
- this.routesSkipNavigation = ['shared', 'recent-files', 'favorites'];
53
- this.navigateSource = null;
54
- this.navigationSources = ['favorites', 'libraries', 'personal-files', 'recent-files', 'shared'];
55
- this.folderId = null;
56
- this.nodeId = null;
57
- this.navigateMultiple = false;
58
- this.openWith = [];
59
- this.contentExtensions = [];
60
- this.showRightSide = false;
61
- this.navigateBackAsClose = false;
62
- this.simplestMode = false;
63
- this.recentFileFilters = [
64
- 'TYPE:"content"',
65
- '-PATH:"//cm:wiki/*"',
66
- '-TYPE:"app:filelink"',
67
- '-TYPE:"fm:post"',
68
- '-TYPE:"cm:thumbnail"',
69
- '-TYPE:"cm:failedThumbnail"',
70
- '-TYPE:"cm:rating"',
71
- '-TYPE:"dl:dataList"',
72
- '-TYPE:"dl:todoList"',
73
- '-TYPE:"dl:issue"',
74
- '-TYPE:"dl:contact"',
75
- '-TYPE:"dl:eventAgenda"',
76
- '-TYPE:"dl:event"',
77
- '-TYPE:"dl:task"',
78
- '-TYPE:"dl:simpletask"',
79
- '-TYPE:"dl:meetingAgenda"',
80
- '-TYPE:"dl:location"',
81
- '-TYPE:"fm:topic"',
82
- '-TYPE:"fm:post"',
83
- '-TYPE:"ia:calendarEvent"',
84
- '-TYPE:"lnk:link"'
85
- ];
86
- this.containersSkipNavigation = ['adf-viewer__sidebar', 'cdk-overlay-container', 'adf-image-viewer'];
87
- }
88
- ngOnInit() {
89
- super.ngOnInit();
90
- from(this.infoDrawerOpened$)
91
- .pipe(takeUntil(this.onDestroy$))
92
- .subscribe((val) => {
93
- this.showRightSide = val;
94
- });
95
- this.previewLocation = this.router.url.substr(0, this.router.url.indexOf('/', 1)).replace(/\//g, '');
96
- const routeData = this.route.snapshot.data;
97
- this.navigateBackAsClose = !!routeData.navigateBackAsClose;
98
- this.simplestMode = !!routeData.simplestMode;
99
- if (routeData.navigateMultiple) {
100
- this.navigateMultiple = true;
101
- }
102
- if (routeData.navigateSource) {
103
- const source = routeData.navigateSource.toLowerCase();
104
- if (this.navigationSources.includes(source)) {
105
- this.navigateSource = routeData.navigateSource;
106
- }
107
- }
108
- this.route.params.subscribe((params) => {
109
- this.folderId = params.folderId;
110
- const id = params.nodeId;
111
- if (id) {
112
- this.displayNode(id);
113
- }
114
- });
115
- this.subscriptions = this.subscriptions.concat([
116
- this.appHookService.nodesDeleted.subscribe(() => this.navigateToFileLocation(true)),
117
- this.uploadService.fileUploadDeleted.subscribe(() => this.navigateToFileLocation(true)),
118
- this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe((file) => this.nodesApiService.nodeUpdated.next(file.data.entry)),
119
- this.actions$
120
- .pipe(ofType(ViewerActionTypes.ClosePreview), map(() => this.navigateToFileLocation(true)))
121
- .subscribe(() => { })
122
- ]);
123
- this.extensions
124
- .getOpenWithActions()
125
- .pipe(takeUntil(this.onDestroy$))
126
- .subscribe((actions) => {
127
- this.openWith = actions;
128
- });
129
- }
130
- ngOnDestroy() {
131
- super.ngOnDestroy();
132
- }
133
- /**
134
- * Loads the particular node into the Viewer
135
- *
136
- * @param id Unique identifier for the Node to display
137
- */
138
- async displayNode(id) {
139
- if (id) {
140
- try {
141
- this.node = await this.contentApi.getNodeInfo(id).toPromise();
142
- this.store.dispatch(new SetSelectedNodesAction([{ entry: this.node }]));
143
- if (this.node?.isFile) {
144
- const nearest = await this.getNearestNodes(this.node.id, this.node.parentId);
145
- this.previousNodeId = nearest.left;
146
- this.nextNodeId = nearest.right;
147
- this.nodeId = this.node.id;
148
- return;
149
- }
150
- await this.router.navigate([this.previewLocation, id]);
151
- }
152
- catch (err) {
153
- if (!err || err.status !== 401) {
154
- await this.router.navigate([this.previewLocation, id]);
155
- }
156
- }
157
- }
158
- }
159
- handleKeyboardEvent(event) {
160
- const key = event.key;
161
- if (key === 'ArrowRight' || key === 'ArrowLeft') {
162
- event.preventDefault();
163
- event.stopImmediatePropagation();
164
- }
165
- }
166
- /**
167
- * Handles the visibility change of the Viewer component.
168
- *
169
- * @param isVisible Indicator whether Viewer is visible or hidden.
170
- */
171
- onVisibilityChanged(isVisible) {
172
- const shouldNavigate = !isVisible;
173
- this.navigateToFileLocation(shouldNavigate);
174
- }
175
- navigateToFileLocation(shouldNavigate) {
176
- if (shouldNavigate) {
177
- if (this.navigateBackAsClose) {
178
- this.location.back();
179
- }
180
- else {
181
- const shouldSkipNavigation = this.routesSkipNavigation.includes(this.previewLocation);
182
- const route = this.getNavigationCommands(this.previewLocation);
183
- if (!shouldSkipNavigation && this.folderId) {
184
- route.push(this.folderId);
185
- }
186
- this.router.navigate(route);
187
- }
188
- }
189
- }
190
- /** Handles navigation to a previous document */
191
- onNavigateBefore(event) {
192
- if (event.type !== 'click' && this.shouldNavigate(event.target)) {
193
- return;
194
- }
195
- if (this.previousNodeId) {
196
- this.router.navigate(this.getPreviewPath(this.folderId, this.previousNodeId));
197
- }
198
- }
199
- /** Handles navigation to a next document */
200
- onNavigateNext(event) {
201
- if (event.type !== 'click' && this.shouldNavigate(event.target)) {
202
- return;
203
- }
204
- if (this.nextNodeId) {
205
- this.router.navigate(this.getPreviewPath(this.folderId, this.nextNodeId));
206
- }
207
- }
208
- /**
209
- * Generates a node preview route based on folder and node IDs.
210
- *
211
- * @param folderId Folder ID
212
- * @param nodeId Node ID
213
- */
214
- getPreviewPath(folderId, nodeId) {
215
- const route = [this.previewLocation];
216
- if (folderId) {
217
- route.push(folderId);
218
- }
219
- if (nodeId) {
220
- route.push('preview', nodeId);
221
- }
222
- return route;
223
- }
224
- /**
225
- * Retrieves nearest node information for the given node and folder.
226
- *
227
- * @param nodeId Unique identifier of the document node
228
- * @param folderId Unique identifier of the containing folder node.
229
- */
230
- async getNearestNodes(nodeId, folderId) {
231
- const empty = {
232
- left: null,
233
- right: null
234
- };
235
- if (nodeId && folderId) {
236
- try {
237
- const ids = await this.getFileIds(this.navigateSource, folderId);
238
- const idx = ids.indexOf(nodeId);
239
- if (idx >= 0) {
240
- return {
241
- left: ids[idx - 1] || null,
242
- right: ids[idx + 1] || null
243
- };
244
- }
245
- else {
246
- return empty;
247
- }
248
- }
249
- catch {
250
- return empty;
251
- }
252
- }
253
- else {
254
- return empty;
255
- }
256
- }
257
- /**
258
- * Retrieves a list of node identifiers for the folder and data source.
259
- *
260
- * @param source Data source name. Allowed values are: personal-files, libraries, favorites, shared, recent-files.
261
- * @param folderId Containing folder node identifier for 'personal-files' and 'libraries' sources.
262
- */
263
- async getFileIds(source, folderId) {
264
- if ((source === 'personal-files' || source === 'libraries') && folderId) {
265
- const sortKey = this.preferences.get('personal-files.sorting.key') || 'modifiedAt';
266
- const sortDirection = this.preferences.get('personal-files.sorting.direction') || 'desc';
267
- const nodes = await this.contentApi
268
- .getNodeChildren(folderId, {
269
- // orderBy: `${sortKey} ${sortDirection}`,
270
- fields: ['id', this.getRootField(sortKey)],
271
- where: '(isFile=true)'
272
- })
273
- .toPromise();
274
- const entries = nodes.list.entries.map((obj) => obj.entry);
275
- this.sort(entries, sortKey, sortDirection);
276
- return entries.map((obj) => obj.id);
277
- }
278
- if (source === 'favorites') {
279
- const nodes = await this.contentApi
280
- .getFavorites('-me-', {
281
- where: '(EXISTS(target/file))',
282
- fields: ['target']
283
- })
284
- .toPromise();
285
- const sortKey = this.preferences.get('favorites.sorting.key') || 'modifiedAt';
286
- const sortDirection = this.preferences.get('favorites.sorting.direction') || 'desc';
287
- const files = nodes.list.entries.map((obj) => obj.entry.target.file);
288
- this.sort(files, sortKey, sortDirection);
289
- return files.map((f) => f.id);
290
- }
291
- if (source === 'shared') {
292
- const sortingKey = this.preferences.get('shared.sorting.key') || 'modifiedAt';
293
- const sortingDirection = this.preferences.get('shared.sorting.direction') || 'desc';
294
- const nodes = await this.contentApi
295
- .findSharedLinks({
296
- fields: ['nodeId', this.getRootField(sortingKey)]
297
- })
298
- .toPromise();
299
- const entries = nodes.list.entries.map((obj) => obj.entry);
300
- this.sort(entries, sortingKey, sortingDirection);
301
- return entries.map((obj) => obj.nodeId);
302
- }
303
- if (source === 'recent-files') {
304
- const person = await this.contentApi.getPerson('-me-').toPromise();
305
- const username = person.entry.id;
306
- const sortingKey = this.preferences.get('recent-files.sorting.key') || 'modifiedAt';
307
- const sortingDirection = this.preferences.get('recent-files.sorting.direction') || 'desc';
308
- const query = {
309
- query: {
310
- query: '*',
311
- language: 'afts'
312
- },
313
- filterQueries: [
314
- { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },
315
- { query: `cm:modifier:${username} OR cm:creator:${username}` },
316
- {
317
- query: this.recentFileFilters.join(' AND ')
318
- }
319
- ],
320
- fields: ['id', this.getRootField(sortingKey)],
321
- include: ['path', 'properties', 'allowableOperations'],
322
- sort: [
323
- {
324
- type: 'FIELD',
325
- field: 'cm:modified',
326
- ascending: false
327
- }
328
- ]
329
- };
330
- const nodes = await this.contentApi.search(query).toPromise();
331
- const entries = nodes.list.entries.map((obj) => obj.entry);
332
- this.sort(entries, sortingKey, sortingDirection);
333
- return entries.map((obj) => obj.id);
334
- }
335
- return [];
336
- }
337
- sort(items, key, direction) {
338
- const options = {};
339
- if (key.includes('sizeInBytes') || key === 'name') {
340
- options.numeric = true;
341
- }
342
- items.sort((a, b) => {
343
- let left = ObjectUtils.getValue(a, key) ?? '';
344
- left = left instanceof Date ? left.valueOf().toString() : left.toString();
345
- let right = ObjectUtils.getValue(b, key) ?? '';
346
- right = right instanceof Date ? right.valueOf().toString() : right.toString();
347
- return direction === 'asc' ? left.localeCompare(right, undefined, options) : right.localeCompare(left, undefined, options);
348
- });
349
- }
350
- /**
351
- * Get the root field name from the property path.
352
- * Example: 'property1.some.child.property' => 'property1'
353
- *
354
- * @param path Property path
355
- */
356
- getRootField(path) {
357
- if (path) {
358
- return path.split('.')[0];
359
- }
360
- return path;
361
- }
362
- getNavigationCommands(url) {
363
- const urlTree = this.router.parseUrl(url);
364
- const urlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];
365
- if (!urlSegmentGroup) {
366
- return [url];
367
- }
368
- const urlSegments = urlSegmentGroup.segments;
369
- return urlSegments.reduce(function (acc, item) {
370
- acc.push(item.path, item.parameters);
371
- return acc;
372
- }, []);
373
- }
374
- shouldNavigate(element) {
375
- let currentElement = element.parentElement;
376
- while (currentElement && !this.isChild(currentElement.classList)) {
377
- currentElement = currentElement.parentElement;
378
- }
379
- return !!currentElement;
380
- }
381
- isChild(list) {
382
- return Array.from(list).some((className) => this.containersSkipNavigation.includes(className));
383
- }
384
- }
385
- PreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreviewComponent, deps: [{ token: i1.ContentApiService }, { token: i2.UserPreferencesService }, { token: i3.ActivatedRoute }, { token: i4.NodesApiService }, { token: i5.Actions }, { token: i6.Location }, { token: i1.AppHookService }], target: i0.ɵɵFactoryTarget.Component });
386
- PreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: PreviewComponent, isStandalone: true, selector: "app-preview", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "app-preview" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"nodeId\">\n <adf-alfresco-viewer\n [ngClass]=\"{\n 'aca-right_side--hide': !showRightSide\n }\"\n [nodeId]=\"nodeId\"\n [allowNavigate]=\"navigateMultiple\"\n [allowRightSidebar]=\"true\"\n [allowPrint]=\"false\"\n [showRightSidebar]=\"true\"\n [allowDownload]=\"false\"\n [allowFullScreen]=\"false\"\n [canNavigateBefore]=\"!!previousNodeId\"\n [canNavigateNext]=\"!!nextNodeId\"\n [overlayMode]=\"true\"\n (showViewerChange)=\"onVisibilityChanged($event)\"\n (navigateBefore)=\"onNavigateBefore($event)\"\n (navigateNext)=\"onNavigateNext($event)\"\n >\n <adf-viewer-sidebar *ngIf=\"infoDrawerOpened$ | async\">\n <aca-info-drawer [node]=\"selection.file\"></aca-info-drawer>\n </adf-viewer-sidebar>\n\n <adf-viewer-open-with *ngIf=\"openWith.length\">\n <ng-container *ngFor=\"let action of openWith; trackBy: trackByActionId\">\n <app-toolbar-menu-item [actionRef]=\"action\"></app-toolbar-menu-item>\n </ng-container>\n </adf-viewer-open-with>\n\n <adf-viewer-toolbar-actions *ngIf=\"!simplestMode\">\n <aca-toolbar [items]=\"viewerToolbarActions\"></aca-toolbar>\n </adf-viewer-toolbar-actions>\n </adf-alfresco-viewer>\n</ng-container>\n", styles: [".app-preview{width:100%;height:100%}.adf-viewer-toolbar .adf-toolbar-divider{display:none}.adf-viewer-toolbar-actions{display:flex;flex-direction:row;align-items:center}.adf-viewer-toolbar-actions .adf-toolbar-divider{display:inline}.adf-viewer-toolbar>*>button:last-child{display:none}.adf-alfresco-viewer.aca-right_side--hide .adf-viewer__sidebar__right{width:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ViewerModule }, { kind: "component", type: i2.ViewerSidebarComponent, selector: "adf-viewer-sidebar" }, { kind: "component", type: i2.ViewerOpenWithComponent, selector: "adf-viewer-open-with" }, { kind: "component", type: i2.ViewerToolbarActionsComponent, selector: "adf-viewer-toolbar-actions" }, { kind: "ngmodule", type: AlfrescoViewerModule }, { kind: "component", type: i4.AlfrescoViewerComponent, selector: "adf-alfresco-viewer", inputs: ["nodeId", "versionId", "sharedLinkId", "showViewer", "maxRetries", "allowGoBack", "showToolbar", "overlayMode", "allowNavigate", "canNavigateBefore", "canNavigateNext", "allowLeftSidebar", "allowRightSidebar", "showRightSidebar", "showLeftSidebar", "allowDownload", "allowPrint", "allowFullScreen", "hideInfoButton", "closeButtonPosition", "sidebarRightTemplate", "sidebarLeftTemplate"], outputs: ["invalidSharedLink", "navigateBefore", "navigateNext", "showViewerChange"] }, { kind: "component", type: InfoDrawerComponent, selector: "aca-info-drawer", inputs: ["nodeId", "node"] }, { kind: "component", type: ToolbarMenuItemComponent, selector: "app-toolbar-menu-item", inputs: ["actionRef", "menuId"] }, { kind: "component", type: ToolbarComponent, selector: "aca-toolbar", inputs: ["items"] }], encapsulation: i0.ViewEncapsulation.None });
387
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreviewComponent, decorators: [{
388
- type: Component,
389
- args: [{ standalone: true, imports: [CommonModule, ViewerModule, AlfrescoViewerModule, InfoDrawerComponent, ToolbarMenuItemComponent, ToolbarComponent], selector: 'app-preview', encapsulation: ViewEncapsulation.None, host: { class: 'app-preview' }, template: "<ng-container *ngIf=\"nodeId\">\n <adf-alfresco-viewer\n [ngClass]=\"{\n 'aca-right_side--hide': !showRightSide\n }\"\n [nodeId]=\"nodeId\"\n [allowNavigate]=\"navigateMultiple\"\n [allowRightSidebar]=\"true\"\n [allowPrint]=\"false\"\n [showRightSidebar]=\"true\"\n [allowDownload]=\"false\"\n [allowFullScreen]=\"false\"\n [canNavigateBefore]=\"!!previousNodeId\"\n [canNavigateNext]=\"!!nextNodeId\"\n [overlayMode]=\"true\"\n (showViewerChange)=\"onVisibilityChanged($event)\"\n (navigateBefore)=\"onNavigateBefore($event)\"\n (navigateNext)=\"onNavigateNext($event)\"\n >\n <adf-viewer-sidebar *ngIf=\"infoDrawerOpened$ | async\">\n <aca-info-drawer [node]=\"selection.file\"></aca-info-drawer>\n </adf-viewer-sidebar>\n\n <adf-viewer-open-with *ngIf=\"openWith.length\">\n <ng-container *ngFor=\"let action of openWith; trackBy: trackByActionId\">\n <app-toolbar-menu-item [actionRef]=\"action\"></app-toolbar-menu-item>\n </ng-container>\n </adf-viewer-open-with>\n\n <adf-viewer-toolbar-actions *ngIf=\"!simplestMode\">\n <aca-toolbar [items]=\"viewerToolbarActions\"></aca-toolbar>\n </adf-viewer-toolbar-actions>\n </adf-alfresco-viewer>\n</ng-container>\n", styles: [".app-preview{width:100%;height:100%}.adf-viewer-toolbar .adf-toolbar-divider{display:none}.adf-viewer-toolbar-actions{display:flex;flex-direction:row;align-items:center}.adf-viewer-toolbar-actions .adf-toolbar-divider{display:inline}.adf-viewer-toolbar>*>button:last-child{display:none}.adf-alfresco-viewer.aca-right_side--hide .adf-viewer__sidebar__right{width:0}\n"] }]
390
- }], ctorParameters: function () { return [{ type: i1.ContentApiService }, { type: i2.UserPreferencesService }, { type: i3.ActivatedRoute }, { type: i4.NodesApiService }, { type: i5.Actions }, { type: i6.Location }, { type: i1.AppHookService }]; }, propDecorators: { handleKeyboardEvent: [{
391
- type: HostListener,
392
- args: ['document:keydown', ['$event']]
393
- }] } });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9wcmV2aWV3L3NyYy9saWIvY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3ByZXZpZXcvc3JjL2xpYi9jb21wb25lbnRzL3ByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUF3QyxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZGLE9BQU8sRUFBc0IsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVB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QUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxjQUFjLENBQUMsT0FBb0I7UUFDekMsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUUzQyxPQUFPLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hFLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1NBQy9DO1FBRUQsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBa0I7UUFDaEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDOzs2R0F4WlUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IseU1DckQ3QixrdkNBa0NBLHVhRFlZLFlBQVksa1pBQUUsWUFBWSx3VEFBRSxvQkFBb0IsNGxCQUFFLG1CQUFtQix3RkFBRSx3QkFBd0IsbUdBQUUsZ0JBQWdCOzJGQU9oSCxnQkFBZ0I7a0JBVDVCLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxZQUNsSCxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2tSQWtKOUIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDIzIEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdFbmNhcHN1bGF0aW9uLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFVybFRyZWUsIFVybFNlZ21lbnRHcm91cCwgVXJsU2VnbWVudCwgUFJJTUFSWV9PVVRMRVQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsIE9iamVjdFV0aWxzLCBWaWV3ZXJNb2R1bGUgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQ2xvc2VQcmV2aWV3QWN0aW9uLCBWaWV3ZXJBY3Rpb25UeXBlcywgU2V0U2VsZWN0ZWROb2Rlc0FjdGlvbiB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkL3N0b3JlJztcbmltcG9ydCB7XG4gIFBhZ2VDb21wb25lbnQsXG4gIEFwcEhvb2tTZXJ2aWNlLFxuICBDb250ZW50QXBpU2VydmljZSxcbiAgSW5mb0RyYXdlckNvbXBvbmVudCxcbiAgVG9vbGJhck1lbnVJdGVtQ29tcG9uZW50LFxuICBUb29sYmFyQ29tcG9uZW50XG59IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkJztcbmltcG9ydCB7IENvbnRlbnRBY3Rpb25SZWYsIFZpZXdlckV4dGVuc2lvblJlZiB9IGZyb20gJ0BhbGZyZXNjby9hZGYtZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBTZWFyY2hSZXF1ZXN0IH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3Rpb25zLCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IEFsZnJlc2NvVmlld2VyTW9kdWxlLCBOb2Rlc0FwaVNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVmlld2VyTW9kdWxlLCBBbGZyZXNjb1ZpZXdlck1vZHVsZSwgSW5mb0RyYXdlckNvbXBvbmVudCwgVG9vbGJhck1lbnVJdGVtQ29tcG9uZW50LCBUb29sYmFyQ29tcG9uZW50XSxcbiAgc2VsZWN0b3I6ICdhcHAtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnYXBwLXByZXZpZXcnIH1cbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld0NvbXBvbmVudCBleHRlbmRzIFBhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByZXZpZXdMb2NhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgcm91dGVzU2tpcE5hdmlnYXRpb24gPSBbJ3NoYXJlZCcsICdyZWNlbnQtZmlsZXMnLCAnZmF2b3JpdGVzJ107XG4gIG5hdmlnYXRlU291cmNlOiBzdHJpbmcgPSBudWxsO1xuICBuYXZpZ2F0aW9uU291cmNlcyA9IFsnZmF2b3JpdGVzJywgJ2xpYnJhcmllcycsICdwZXJzb25hbC1maWxlcycsICdyZWNlbnQtZmlsZXMnLCAnc2hhcmVkJ107XG4gIGZvbGRlcklkOiBzdHJpbmcgPSBudWxsO1xuICBub2RlSWQ6IHN0cmluZyA9IG51bGw7XG4gIHByZXZpb3VzTm9kZUlkOiBzdHJpbmc7XG4gIG5leHROb2RlSWQ6IHN0cmluZztcbiAgbmF2aWdhdGVNdWx0aXBsZSA9IGZhbHNlO1xuICBvcGVuV2l0aDogQXJyYXk8Q29udGVudEFjdGlvblJlZj4gPSBbXTtcbiAgY29udGVudEV4dGVuc2lvbnM6IEFycmF5PFZpZXdlckV4dGVuc2lvblJlZj4gPSBbXTtcbiAgc2hvd1JpZ2h0U2lkZSA9IGZhbHNlO1xuICBuYXZpZ2F0ZUJhY2tBc0Nsb3NlID0gZmFsc2U7XG4gIHNpbXBsZXN0TW9kZSA9IGZhbHNlO1xuXG4gIHJlY2VudEZpbGVGaWx0ZXJzID0gW1xuICAgICdUWVBFOlwiY29udGVudFwiJyxcbiAgICAnLVBBVEg6XCIvL2NtOndpa2kvKlwiJyxcbiAgICAnLVRZUEU6XCJhcHA6ZmlsZWxpbmtcIicsXG4gICAgJy1UWVBFOlwiZm06cG9zdFwiJyxcbiAgICAnLVRZUEU6XCJjbTp0aHVtYm5haWxcIicsXG4gICAgJy1UWVBFOlwiY206ZmFpbGVkVGh1bWJuYWlsXCInLFxuICAgICctVFlQRTpcImNtOnJhdGluZ1wiJyxcbiAgICAnLVRZUEU6XCJkbDpkYXRhTGlzdFwiJyxcbiAgICAnLVRZUEU6XCJkbDp0b2RvTGlzdFwiJyxcbiAgICAnLVRZUEU6XCJkbDppc3N1ZVwiJyxcbiAgICAnLVRZUEU6XCJkbDpjb250YWN0XCInLFxuICAgICctVFlQRTpcImRsOmV2ZW50QWdlbmRhXCInLFxuICAgICctVFlQRTpcImRsOmV2ZW50XCInLFxuICAgICctVFlQRTpcImRsOnRhc2tcIicsXG4gICAgJy1UWVBFOlwiZGw6c2ltcGxldGFza1wiJyxcbiAgICAnLVRZUEU6XCJkbDptZWV0aW5nQWdlbmRhXCInLFxuICAgICctVFlQRTpcImRsOmxvY2F0aW9uXCInLFxuICAgICctVFlQRTpcImZtOnRvcGljXCInLFxuICAgICctVFlQRTpcImZtOnBvc3RcIicsXG4gICAgJy1UWVBFOlwiaWE6Y2FsZW5kYXJFdmVudFwiJyxcbiAgICAnLVRZUEU6XCJsbms6bGlua1wiJ1xuICBdO1xuXG4gIHByaXZhdGUgY29udGFpbmVyc1NraXBOYXZpZ2F0aW9uID0gWydhZGYtdmlld2VyX19zaWRlYmFyJywgJ2Nkay1vdmVybGF5LWNvbnRhaW5lcicsICdhZGYtaW1hZ2Utdmlld2VyJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZW50QXBpOiBDb250ZW50QXBpU2VydmljZSxcbiAgICBwcml2YXRlIHByZWZlcmVuY2VzOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbm9kZXNBcGlTZXJ2aWNlOiBOb2Rlc0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIGFwcEhvb2tTZXJ2aWNlOiBBcHBIb29rU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIGZyb20odGhpcy5pbmZvRHJhd2VyT3BlbmVkJClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1JpZ2h0U2lkZSA9IHZhbDtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5wcmV2aWV3TG9jYXRpb24gPSB0aGlzLnJvdXRlci51cmwuc3Vic3RyKDAsIHRoaXMucm91dGVyLnVybC5pbmRleE9mKCcvJywgMSkpLnJlcGxhY2UoL1xcLy9nLCAnJyk7XG5cbiAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE7XG4gICAgdGhpcy5uYXZpZ2F0ZUJhY2tBc0Nsb3NlID0gISFyb3V0ZURhdGEubmF2aWdhdGVCYWNrQXNDbG9zZTtcbiAgICB0aGlzLnNpbXBsZXN0TW9kZSA9ICEhcm91dGVEYXRhLnNpbXBsZXN0TW9kZTtcblxuICAgIGlmIChyb3V0ZURhdGEubmF2aWdhdGVNdWx0aXBsZSkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZU11bHRpcGxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocm91dGVEYXRhLm5hdmlnYXRlU291cmNlKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSByb3V0ZURhdGEubmF2aWdhdGVTb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25Tb3VyY2VzLmluY2x1ZGVzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVNvdXJjZSA9IHJvdXRlRGF0YS5uYXZpZ2F0ZVNvdXJjZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgdGhpcy5mb2xkZXJJZCA9IHBhcmFtcy5mb2xkZXJJZDtcbiAgICAgIGNvbnN0IGlkID0gcGFyYW1zLm5vZGVJZDtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICB0aGlzLmRpc3BsYXlOb2RlKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5jb25jYXQoW1xuICAgICAgdGhpcy5hcHBIb29rU2VydmljZS5ub2Rlc0RlbGV0ZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVUb0ZpbGVMb2NhdGlvbih0cnVlKSksXG5cbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRGVsZXRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvRmlsZUxvY2F0aW9uKHRydWUpKSxcblxuICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWRDb21wbGV0ZS5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoKGZpbGUpID0+IHRoaXMubm9kZXNBcGlTZXJ2aWNlLm5vZGVVcGRhdGVkLm5leHQoZmlsZS5kYXRhLmVudHJ5KSksXG5cbiAgICAgIHRoaXMuYWN0aW9ucyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgb2ZUeXBlPENsb3NlUHJldmlld0FjdGlvbj4oVmlld2VyQWN0aW9uVHlwZXMuQ2xvc2VQcmV2aWV3KSxcbiAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvRmlsZUxvY2F0aW9uKHRydWUpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pXG4gICAgXSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvbnNcbiAgICAgIC5nZXRPcGVuV2l0aEFjdGlvbnMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChhY3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3BlbldpdGggPSBhY3Rpb25zO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBwYXJ0aWN1bGFyIG5vZGUgaW50byB0aGUgVmlld2VyXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE5vZGUgdG8gZGlzcGxheVxuICAgKi9cbiAgYXN5bmMgZGlzcGxheU5vZGUoaWQ6IHN0cmluZykge1xuICAgIGlmIChpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5ub2RlID0gYXdhaXQgdGhpcy5jb250ZW50QXBpLmdldE5vZGVJbmZvKGlkKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgU2V0U2VsZWN0ZWROb2Rlc0FjdGlvbihbeyBlbnRyeTogdGhpcy5ub2RlIH1dKSk7XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZT8uaXNGaWxlKSB7XG4gICAgICAgICAgY29uc3QgbmVhcmVzdCA9IGF3YWl0IHRoaXMuZ2V0TmVhcmVzdE5vZGVzKHRoaXMubm9kZS5pZCwgdGhpcy5ub2RlLnBhcmVudElkKTtcblxuICAgICAgICAgIHRoaXMucHJldmlvdXNOb2RlSWQgPSBuZWFyZXN0LmxlZnQ7XG4gICAgICAgICAgdGhpcy5uZXh0Tm9kZUlkID0gbmVhcmVzdC5yaWdodDtcbiAgICAgICAgICB0aGlzLm5vZGVJZCA9IHRoaXMubm9kZS5pZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucHJldmlld0xvY2F0aW9uLCBpZF0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZXJyIHx8IGVyci5zdGF0dXMgIT09IDQwMSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnByZXZpZXdMb2NhdGlvbiwgaWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBjaGFuZ2Ugb2YgdGhlIFZpZXdlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBpc1Zpc2libGUgSW5kaWNhdG9yIHdoZXRoZXIgVmlld2VyIGlzIHZpc2libGUgb3IgaGlkZGVuLlxuICAgKi9cbiAgb25WaXNpYmlsaXR5Q2hhbmdlZChpc1Zpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzaG91bGROYXZpZ2F0ZSA9ICFpc1Zpc2libGU7XG4gICAgdGhpcy5uYXZpZ2F0ZVRvRmlsZUxvY2F0aW9uKHNob3VsZE5hdmlnYXRlKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9GaWxlTG9jYXRpb24oc2hvdWxkTmF2aWdhdGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoc2hvdWxkTmF2aWdhdGUpIHtcbiAgICAgIGlmICh0aGlzLm5hdmlnYXRlQmFja0FzQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaG91bGRTa2lwTmF2aWdhdGlvbiA9IHRoaXMucm91dGVzU2tpcE5hdmlnYXRpb24uaW5jbHVkZXModGhpcy5wcmV2aWV3TG9jYXRpb24pO1xuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0TmF2aWdhdGlvbkNvbW1hbmRzKHRoaXMucHJldmlld0xvY2F0aW9uKTtcblxuICAgICAgICBpZiAoIXNob3VsZFNraXBOYXZpZ2F0aW9uICYmIHRoaXMuZm9sZGVySWQpIHtcbiAgICAgICAgICByb3V0ZS5wdXNoKHRoaXMuZm9sZGVySWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHJvdXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogSGFuZGxlcyBuYXZpZ2F0aW9uIHRvIGEgcHJldmlvdXMgZG9jdW1lbnQgKi9cbiAgb25OYXZpZ2F0ZUJlZm9yZShldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ2NsaWNrJyAmJiB0aGlzLnNob3VsZE5hdmlnYXRlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c05vZGVJZCkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUodGhpcy5nZXRQcmV2aWV3UGF0aCh0aGlzLmZvbGRlcklkLCB0aGlzLnByZXZpb3VzTm9kZUlkKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMgbmF2aWdhdGlvbiB0byBhIG5leHQgZG9jdW1lbnQgKi9cbiAgb25OYXZpZ2F0ZU5leHQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnR5cGUgIT09ICdjbGljaycgJiYgdGhpcy5zaG91bGROYXZpZ2F0ZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmV4dE5vZGVJZCkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUodGhpcy5nZXRQcmV2aWV3UGF0aCh0aGlzLmZvbGRlcklkLCB0aGlzLm5leHROb2RlSWQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgbm9kZSBwcmV2aWV3IHJvdXRlIGJhc2VkIG9uIGZvbGRlciBhbmQgbm9kZSBJRHMuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXJJZCBGb2xkZXIgSURcbiAgICogQHBhcmFtIG5vZGVJZCBOb2RlIElEXG4gICAqL1xuICBnZXRQcmV2aWV3UGF0aChmb2xkZXJJZDogc3RyaW5nLCBub2RlSWQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFt0aGlzLnByZXZpZXdMb2NhdGlvbl07XG5cbiAgICBpZiAoZm9sZGVySWQpIHtcbiAgICAgIHJvdXRlLnB1c2goZm9sZGVySWQpO1xuICAgIH1cblxuICAgIGlmIChub2RlSWQpIHtcbiAgICAgIHJvdXRlLnB1c2goJ3ByZXZpZXcnLCBub2RlSWQpO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgbmVhcmVzdCBub2RlIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gbm9kZSBhbmQgZm9sZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZUlkIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBkb2N1bWVudCBub2RlXG4gICAqIEBwYXJhbSBmb2xkZXJJZCBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29udGFpbmluZyBmb2xkZXIgbm9kZS5cbiAgICovXG4gIGFzeW5jIGdldE5lYXJlc3ROb2Rlcyhub2RlSWQ6IHN0cmluZywgZm9sZGVySWQ6IHN0cmluZyk6IFByb21pc2U8eyBsZWZ0OiBzdHJpbmc7IHJpZ2h0OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGVtcHR5ID0ge1xuICAgICAgbGVmdDogbnVsbCxcbiAgICAgIHJpZ2h0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChub2RlSWQgJiYgZm9sZGVySWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRoaXMuZ2V0RmlsZUlkcyh0aGlzLm5hdmlnYXRlU291cmNlLCBmb2xkZXJJZCk7XG4gICAgICAgIGNvbnN0IGlkeCA9IGlkcy5pbmRleE9mKG5vZGVJZCk7XG5cbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlZnQ6IGlkc1tpZHggLSAxXSB8fCBudWxsLFxuICAgICAgICAgICAgcmlnaHQ6IGlkc1tpZHggKyAxXSB8fCBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBub2RlIGlkZW50aWZpZXJzIGZvciB0aGUgZm9sZGVyIGFuZCBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSBEYXRhIHNvdXJjZSBuYW1lLiBBbGxvd2VkIHZhbHVlcyBhcmU6IHBlcnNvbmFsLWZpbGVzLCBsaWJyYXJpZXMsIGZhdm9yaXRlcywgc2hhcmVkLCByZWNlbnQtZmlsZXMuXG4gICAqIEBwYXJhbSBmb2xkZXJJZCBDb250YWluaW5nIGZvbGRlciBub2RlIGlkZW50aWZpZXIgZm9yICdwZXJzb25hbC1maWxlcycgYW5kICdsaWJyYXJpZXMnIHNvdXJjZXMuXG4gICAqL1xuICBhc3luYyBnZXRGaWxlSWRzKHNvdXJjZTogc3RyaW5nLCBmb2xkZXJJZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoKHNvdXJjZSA9PT0gJ3BlcnNvbmFsLWZpbGVzJyB8fCBzb3VyY2UgPT09ICdsaWJyYXJpZXMnKSAmJiBmb2xkZXJJZCkge1xuICAgICAgY29uc3Qgc29ydEtleSA9IHRoaXMucHJlZmVyZW5jZXMuZ2V0KCdwZXJzb25hbC1maWxlcy5zb3J0aW5nLmtleScpIHx8ICdtb2RpZmllZEF0JztcbiAgICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnByZWZlcmVuY2VzLmdldCgncGVyc29uYWwtZmlsZXMuc29ydGluZy5kaXJlY3Rpb24nKSB8fCAnZGVzYyc7XG4gICAgICBjb25zdCBub2RlcyA9IGF3YWl0IHRoaXMuY29udGVudEFwaVxuICAgICAgICAuZ2V0Tm9kZUNoaWxkcmVuKGZvbGRlcklkLCB7XG4gICAgICAgICAgLy8gb3JkZXJCeTogYCR7c29ydEtleX0gJHtzb3J0RGlyZWN0aW9ufWAsXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJywgdGhpcy5nZXRSb290RmllbGQoc29ydEtleSldLFxuICAgICAgICAgIHdoZXJlOiAnKGlzRmlsZT10cnVlKSdcbiAgICAgICAgfSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgICBjb25zdCBlbnRyaWVzID0gbm9kZXMubGlzdC5lbnRyaWVzLm1hcCgob2JqKSA9PiBvYmouZW50cnkpO1xuICAgICAgdGhpcy5zb3J0KGVudHJpZXMsIHNvcnRLZXksIHNvcnREaXJlY3Rpb24pO1xuXG4gICAgICByZXR1cm4gZW50cmllcy5tYXAoKG9iaikgPT4gb2JqLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlID09PSAnZmF2b3JpdGVzJykge1xuICAgICAgY29uc3Qgbm9kZXMgPSBhd2FpdCB0aGlzLmNvbnRlbnRBcGlcbiAgICAgICAgLmdldEZhdm9yaXRlcygnLW1lLScsIHtcbiAgICAgICAgICB3aGVyZTogJyhFWElTVFModGFyZ2V0L2ZpbGUpKScsXG4gICAgICAgICAgZmllbGRzOiBbJ3RhcmdldCddXG4gICAgICAgIH0pXG4gICAgICAgIC50b1Byb21pc2UoKTtcblxuICAgICAgY29uc3Qgc29ydEtleSA9IHRoaXMucHJlZmVyZW5jZXMuZ2V0KCdmYXZvcml0ZXMuc29ydGluZy5rZXknKSB8fCAnbW9kaWZpZWRBdCc7XG4gICAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5wcmVmZXJlbmNlcy5nZXQoJ2Zhdm9yaXRlcy5zb3J0aW5nLmRpcmVjdGlvbicpIHx8ICdkZXNjJztcbiAgICAgIGNvbnN0IGZpbGVzID0gbm9kZXMubGlzdC5lbnRyaWVzLm1hcCgob2JqKSA9PiBvYmouZW50cnkudGFyZ2V0LmZpbGUpO1xuICAgICAgdGhpcy5zb3J0KGZpbGVzLCBzb3J0S2V5LCBzb3J0RGlyZWN0aW9uKTtcblxuICAgICAgcmV0dXJuIGZpbGVzLm1hcCgoZikgPT4gZi5pZCk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSA9PT0gJ3NoYXJlZCcpIHtcbiAgICAgIGNvbnN0IHNvcnRpbmdLZXkgPSB0aGlzLnByZWZlcmVuY2VzLmdldCgnc2hhcmVkLnNvcnRpbmcua2V5JykgfHwgJ21vZGlmaWVkQXQnO1xuICAgICAgY29uc3Qgc29ydGluZ0RpcmVjdGlvbiA9IHRoaXMucHJlZmVyZW5jZXMuZ2V0KCdzaGFyZWQuc29ydGluZy5kaXJlY3Rpb24nKSB8fCAnZGVzYyc7XG5cbiAgICAgIGNvbnN0IG5vZGVzID0gYXdhaXQgdGhpcy5jb250ZW50QXBpXG4gICAgICAgIC5maW5kU2hhcmVkTGlua3Moe1xuICAgICAgICAgIGZpZWxkczogWydub2RlSWQnLCB0aGlzLmdldFJvb3RGaWVsZChzb3J0aW5nS2V5KV1cbiAgICAgICAgfSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgICBjb25zdCBlbnRyaWVzID0gbm9kZXMubGlzdC5lbnRyaWVzLm1hcCgob2JqKSA9PiBvYmouZW50cnkpO1xuICAgICAgdGhpcy5zb3J0KGVudHJpZXMsIHNvcnRpbmdLZXksIHNvcnRpbmdEaXJlY3Rpb24pO1xuXG4gICAgICByZXR1cm4gZW50cmllcy5tYXAoKG9iaikgPT4gb2JqLm5vZGVJZCk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSA9PT0gJ3JlY2VudC1maWxlcycpIHtcbiAgICAgIGNvbnN0IHBlcnNvbiA9IGF3YWl0IHRoaXMuY29udGVudEFwaS5nZXRQZXJzb24oJy1tZS0nKS50b1Byb21pc2UoKTtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gcGVyc29uLmVudHJ5LmlkO1xuICAgICAgY29uc3Qgc29ydGluZ0tleSA9IHRoaXMucHJlZmVyZW5jZXMuZ2V0KCdyZWNlbnQtZmlsZXMuc29ydGluZy5rZXknKSB8fCAnbW9kaWZpZWRBdCc7XG4gICAgICBjb25zdCBzb3J0aW5nRGlyZWN0aW9uID0gdGhpcy5wcmVmZXJlbmNlcy5nZXQoJ3JlY2VudC1maWxlcy5zb3J0aW5nLmRpcmVjdGlvbicpIHx8ICdkZXNjJztcblxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaFJlcXVlc3QgPSB7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgcXVlcnk6ICcqJyxcbiAgICAgICAgICBsYW5ndWFnZTogJ2FmdHMnXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclF1ZXJpZXM6IFtcbiAgICAgICAgICB7IHF1ZXJ5OiBgY206bW9kaWZpZWQ6W05PVy9EQVktMzBEQVlTIFRPIE5PVy9EQVkrMURBWV1gIH0sXG4gICAgICAgICAgeyBxdWVyeTogYGNtOm1vZGlmaWVyOiR7dXNlcm5hbWV9IE9SIGNtOmNyZWF0b3I6JHt1c2VybmFtZX1gIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcXVlcnk6IHRoaXMucmVjZW50RmlsZUZpbHRlcnMuam9pbignIEFORCAnKVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZmllbGRzOiBbJ2lkJywgdGhpcy5nZXRSb290RmllbGQoc29ydGluZ0tleSldLFxuICAgICAgICBpbmNsdWRlOiBbJ3BhdGgnLCAncHJvcGVydGllcycsICdhbGxvd2FibGVPcGVyYXRpb25zJ10sXG4gICAgICAgIHNvcnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnRklFTEQnLFxuICAgICAgICAgICAgZmllbGQ6ICdjbTptb2RpZmllZCcsXG4gICAgICAgICAgICBhc2NlbmRpbmc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgICAgY29uc3Qgbm9kZXMgPSBhd2FpdCB0aGlzLmNvbnRlbnRBcGkuc2VhcmNoKHF1ZXJ5KS50b1Byb21pc2UoKTtcblxuICAgICAgY29uc3QgZW50cmllcyA9IG5vZGVzLmxpc3QuZW50cmllcy5tYXAoKG9iaikgPT4gb2JqLmVudHJ5KTtcbiAgICAgIHRoaXMuc29ydChlbnRyaWVzLCBzb3J0aW5nS2V5LCBzb3J0aW5nRGlyZWN0aW9uKTtcblxuICAgICAgcmV0dXJuIGVudHJpZXMubWFwKChvYmopID0+IG9iai5pZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0KGl0ZW1zOiBhbnlbXSwga2V5OiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3Qgb3B0aW9uczogSW50bC5Db2xsYXRvck9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ3NpemVJbkJ5dGVzJykgfHwga2V5ID09PSAnbmFtZScpIHtcbiAgICAgIG9wdGlvbnMubnVtZXJpYyA9IHRydWU7XG4gICAgfVxuXG4gICAgaXRlbXMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgIGxldCBsZWZ0ID0gT2JqZWN0VXRpbHMuZ2V0VmFsdWUoYSwga2V5KSA/PyAnJztcbiAgICAgIGxlZnQgPSBsZWZ0IGluc3RhbmNlb2YgRGF0ZSA/IGxlZnQudmFsdWVPZigpLnRvU3RyaW5nKCkgOiBsZWZ0LnRvU3RyaW5nKCk7XG5cbiAgICAgIGxldCByaWdodCA9IE9iamVjdFV0aWxzLmdldFZhbHVlKGIsIGtleSkgPz8gJyc7XG4gICAgICByaWdodCA9IHJpZ2h0IGluc3RhbmNlb2YgRGF0ZSA/IHJpZ2h0LnZhbHVlT2YoKS50b1N0cmluZygpIDogcmlnaHQudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQsIHVuZGVmaW5lZCwgb3B0aW9ucykgOiByaWdodC5sb2NhbGVDb21wYXJlKGxlZnQsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByb290IGZpZWxkIG5hbWUgZnJvbSB0aGUgcHJvcGVydHkgcGF0aC5cbiAgICogRXhhbXBsZTogJ3Byb3BlcnR5MS5zb21lLmNoaWxkLnByb3BlcnR5JyA9PiAncHJvcGVydHkxJ1xuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBQcm9wZXJ0eSBwYXRoXG4gICAqL1xuICBnZXRSb290RmllbGQocGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJylbMF07XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROYXZpZ2F0aW9uQ29tbWFuZHModXJsOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgdXJsVHJlZTogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHVybCk7XG4gICAgY29uc3QgdXJsU2VnbWVudEdyb3VwOiBVcmxTZWdtZW50R3JvdXAgPSB1cmxUcmVlLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuXG4gICAgaWYgKCF1cmxTZWdtZW50R3JvdXApIHtcbiAgICAgIHJldHVybiBbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxTZWdtZW50czogVXJsU2VnbWVudFtdID0gdXJsU2VnbWVudEdyb3VwLnNlZ21lbnRzO1xuXG4gICAgcmV0dXJuIHVybFNlZ21lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBpdGVtKSB7XG4gICAgICBhY2MucHVzaChpdGVtLnBhdGgsIGl0ZW0ucGFyYW1ldGVycyk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkTmF2aWdhdGUoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQgJiYgIXRoaXMuaXNDaGlsZChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QpKSB7XG4gICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhY3VycmVudEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGlzQ2hpbGQobGlzdDogRE9NVG9rZW5MaXN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obGlzdCkuc29tZSgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHRoaXMuY29udGFpbmVyc1NraXBOYXZpZ2F0aW9uLmluY2x1ZGVzKGNsYXNzTmFtZSkpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUlkXCI+XG4gIDxhZGYtYWxmcmVzY28tdmlld2VyXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2FjYS1yaWdodF9zaWRlLS1oaWRlJzogIXNob3dSaWdodFNpZGVcbiAgICB9XCJcbiAgICBbbm9kZUlkXT1cIm5vZGVJZFwiXG4gICAgW2FsbG93TmF2aWdhdGVdPVwibmF2aWdhdGVNdWx0aXBsZVwiXG4gICAgW2FsbG93UmlnaHRTaWRlYmFyXT1cInRydWVcIlxuICAgIFthbGxvd1ByaW50XT1cImZhbHNlXCJcbiAgICBbc2hvd1JpZ2h0U2lkZWJhcl09XCJ0cnVlXCJcbiAgICBbYWxsb3dEb3dubG9hZF09XCJmYWxzZVwiXG4gICAgW2FsbG93RnVsbFNjcmVlbl09XCJmYWxzZVwiXG4gICAgW2Nhbk5hdmlnYXRlQmVmb3JlXT1cIiEhcHJldmlvdXNOb2RlSWRcIlxuICAgIFtjYW5OYXZpZ2F0ZU5leHRdPVwiISFuZXh0Tm9kZUlkXCJcbiAgICBbb3ZlcmxheU1vZGVdPVwidHJ1ZVwiXG4gICAgKHNob3dWaWV3ZXJDaGFuZ2UpPVwib25WaXNpYmlsaXR5Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAobmF2aWdhdGVCZWZvcmUpPVwib25OYXZpZ2F0ZUJlZm9yZSgkZXZlbnQpXCJcbiAgICAobmF2aWdhdGVOZXh0KT1cIm9uTmF2aWdhdGVOZXh0KCRldmVudClcIlxuICA+XG4gICAgPGFkZi12aWV3ZXItc2lkZWJhciAqbmdJZj1cImluZm9EcmF3ZXJPcGVuZWQkIHwgYXN5bmNcIj5cbiAgICAgIDxhY2EtaW5mby1kcmF3ZXIgW25vZGVdPVwic2VsZWN0aW9uLmZpbGVcIj48L2FjYS1pbmZvLWRyYXdlcj5cbiAgICA8L2FkZi12aWV3ZXItc2lkZWJhcj5cblxuICAgIDxhZGYtdmlld2VyLW9wZW4td2l0aCAqbmdJZj1cIm9wZW5XaXRoLmxlbmd0aFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG9wZW5XaXRoOyB0cmFja0J5OiB0cmFja0J5QWN0aW9uSWRcIj5cbiAgICAgICAgPGFwcC10b29sYmFyLW1lbnUtaXRlbSBbYWN0aW9uUmVmXT1cImFjdGlvblwiPjwvYXBwLXRvb2xiYXItbWVudS1pdGVtPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9hZGYtdmlld2VyLW9wZW4td2l0aD5cblxuICAgIDxhZGYtdmlld2VyLXRvb2xiYXItYWN0aW9ucyAqbmdJZj1cIiFzaW1wbGVzdE1vZGVcIj5cbiAgICAgIDxhY2EtdG9vbGJhciBbaXRlbXNdPVwidmlld2VyVG9vbGJhckFjdGlvbnNcIj48L2FjYS10b29sYmFyPlxuICAgIDwvYWRmLXZpZXdlci10b29sYmFyLWFjdGlvbnM+XG4gIDwvYWRmLWFsZnJlc2NvLXZpZXdlcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,39 +0,0 @@
1
- /*!
2
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
3
- *
4
- * Alfresco Example Content Application
5
- *
6
- * This file is part of the Alfresco Example Content Application.
7
- * If the software was purchased under a paid Alfresco license, the terms of
8
- * the paid license agreement will prevail. Otherwise, the software is
9
- * provided under the following open source license terms:
10
- *
11
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Lesser General Public License as published by
13
- * the Free Software Foundation, either version 3 of the License, or
14
- * (at your option) any later version.
15
- *
16
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Lesser General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Lesser General Public License
22
- * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
- import { NgModule } from '@angular/core';
25
- import { PreviewComponent } from './components/preview.component';
26
- import * as i0 from "@angular/core";
27
- export class PreviewModule {
28
- }
29
- PreviewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
30
- PreviewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: PreviewModule, imports: [PreviewComponent], exports: [PreviewComponent] });
31
- PreviewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreviewModule, imports: [PreviewComponent] });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreviewModule, decorators: [{
33
- type: NgModule,
34
- args: [{
35
- imports: [PreviewComponent],
36
- exports: [PreviewComponent]
37
- }]
38
- }] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9wcmV2aWV3L3NyYy9saWIvcHJldmlldy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQU1sRSxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLFlBSGQsZ0JBQWdCLGFBQ2hCLGdCQUFnQjsyR0FFZixhQUFhLFlBSGQsZ0JBQWdCOzJGQUdmLGFBQWE7a0JBSnpCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtQcmV2aWV3Q29tcG9uZW50XSxcbiAgZXhwb3J0czogW1ByZXZpZXdDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFByZXZpZXdNb2R1bGUge31cbiJdfQ==
@@ -1,29 +0,0 @@
1
- /*!
2
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
3
- *
4
- * Alfresco Example Content Application
5
- *
6
- * This file is part of the Alfresco Example Content Application.
7
- * If the software was purchased under a paid Alfresco license, the terms of
8
- * the paid license agreement will prevail. Otherwise, the software is
9
- * provided under the following open source license terms:
10
- *
11
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Lesser General Public License as published by
13
- * the Free Software Foundation, either version 3 of the License, or
14
- * (at your option) any later version.
15
- *
16
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Lesser General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Lesser General Public License
22
- * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
- */
24
- /*
25
- * Public API Surface of aca-preview
26
- */
27
- export * from './lib/components/preview.component';
28
- export * from './lib/preview.module';
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3ByZXZpZXcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSDs7R0FFRztBQUVILGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG4vKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGFjYS1wcmV2aWV3XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcmV2aWV3Lm1vZHVsZSc7XG4iXX0=