@alfresco/adf-content-services 8.1.0-16499147278 → 8.1.0-16877609768

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 (425) hide show
  1. package/bundles/assets/adf-content-services/i18n/de.json +3 -1
  2. package/bundles/assets/adf-content-services/i18n/en.json +3 -1
  3. package/bundles/assets/adf-content-services/i18n/es.json +3 -1
  4. package/bundles/assets/adf-content-services/i18n/fr.json +3 -1
  5. package/bundles/assets/adf-content-services/i18n/it.json +3 -1
  6. package/bundles/assets/adf-content-services/i18n/pl.json +2 -2
  7. package/bundles/assets/adf-content-services/i18n/pt.json +3 -1
  8. package/fesm2022/adf-content-services.mjs +873 -830
  9. package/fesm2022/adf-content-services.mjs.map +1 -1
  10. package/lib/aspect-list/aspect-list.component.d.ts +4 -0
  11. package/lib/aspect-list/interfaces/custom-aspect-paging.interface.d.ts +21 -0
  12. package/lib/aspect-list/public-api.d.ts +1 -0
  13. package/lib/aspect-list/services/aspect-list.service.d.ts +6 -4
  14. package/lib/category/categories-management/categories-management.component.d.ts +4 -0
  15. package/lib/content.module.d.ts +2 -2
  16. package/lib/dialogs/dialog.module.d.ts +6 -5
  17. package/lib/dialogs/download-zip/download-zip.dialog.d.ts +1 -1
  18. package/lib/dialogs/download-zip/download-zip.dialog.module.d.ts +2 -6
  19. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  20. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  21. package/lib/version-manager/version-list.component.scss +3 -2
  22. package/package.json +3 -5
  23. package/esm2022/adf-content-services.mjs +0 -5
  24. package/esm2022/lib/agent/index.mjs +0 -18
  25. package/esm2022/lib/agent/public-api.mjs +0 -18
  26. package/esm2022/lib/agent/services/agent.service.mjs +0 -60
  27. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +0 -27
  28. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +0 -42
  29. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +0 -77
  30. package/esm2022/lib/api-factories/index.mjs +0 -18
  31. package/esm2022/lib/api-factories/public-api.mjs +0 -19
  32. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +0 -18
  33. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +0 -77
  34. package/esm2022/lib/aspect-list/aspect-list.component.mjs +0 -139
  35. package/esm2022/lib/aspect-list/aspect-list.module.mjs +0 -35
  36. package/esm2022/lib/aspect-list/index.mjs +0 -18
  37. package/esm2022/lib/aspect-list/public-api.mjs +0 -24
  38. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +0 -83
  39. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +0 -86
  40. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +0 -52
  41. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +0 -26
  42. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +0 -42
  43. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -166
  44. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +0 -35
  45. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +0 -65
  46. package/esm2022/lib/breadcrumb/index.mjs +0 -18
  47. package/esm2022/lib/breadcrumb/public-api.mjs +0 -20
  48. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +0 -22
  49. package/esm2022/lib/category/categories-management/categories-management.component.mjs +0 -308
  50. package/esm2022/lib/category/category.module.mjs +0 -33
  51. package/esm2022/lib/category/index.mjs +0 -18
  52. package/esm2022/lib/category/models/category-node.interface.mjs +0 -18
  53. package/esm2022/lib/category/public-api.mjs +0 -23
  54. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +0 -80
  55. package/esm2022/lib/category/services/category.service.mjs +0 -159
  56. package/esm2022/lib/common/events/file.event.mjs +0 -46
  57. package/esm2022/lib/common/index.mjs +0 -18
  58. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +0 -18
  59. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +0 -18
  60. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +0 -37
  61. package/esm2022/lib/common/models/allowable-operations.enum.mjs +0 -30
  62. package/esm2022/lib/common/models/ecm-company.model.mjs +0 -19
  63. package/esm2022/lib/common/models/ecm-user.model.mjs +0 -45
  64. package/esm2022/lib/common/models/file.model.mjs +0 -53
  65. package/esm2022/lib/common/models/node-metadata.model.mjs +0 -23
  66. package/esm2022/lib/common/models/permissions.enum.mjs +0 -32
  67. package/esm2022/lib/common/public-api.mjs +0 -37
  68. package/esm2022/lib/common/services/card-view-content-update.service.mjs +0 -55
  69. package/esm2022/lib/common/services/content.service.mjs +0 -180
  70. package/esm2022/lib/common/services/discovery-api.service.mjs +0 -79
  71. package/esm2022/lib/common/services/favorites-api.service.mjs +0 -84
  72. package/esm2022/lib/common/services/nodes-api.service.mjs +0 -251
  73. package/esm2022/lib/common/services/people-content.service.mjs +0 -138
  74. package/esm2022/lib/common/services/rendition.service.mjs +0 -270
  75. package/esm2022/lib/common/services/saved-searches.service.mjs +0 -206
  76. package/esm2022/lib/common/services/sites.service.mjs +0 -243
  77. package/esm2022/lib/common/services/upload.service.mjs +0 -391
  78. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +0 -54
  79. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +0 -490
  80. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +0 -128
  81. package/esm2022/lib/content-metadata/content-metadata.module.mjs +0 -36
  82. package/esm2022/lib/content-metadata/index.mjs +0 -18
  83. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +0 -18
  84. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +0 -18
  85. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +0 -18
  86. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +0 -18
  87. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +0 -18
  88. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +0 -28
  89. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +0 -18
  90. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +0 -18
  91. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +0 -18
  92. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +0 -18
  93. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +0 -18
  94. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +0 -18
  95. package/esm2022/lib/content-metadata/public-api.mjs +0 -31
  96. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +0 -107
  97. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +0 -106
  98. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +0 -76
  99. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +0 -40
  100. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +0 -108
  101. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +0 -33
  102. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +0 -99
  103. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +0 -134
  104. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +0 -52
  105. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +0 -169
  106. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +0 -256
  107. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +0 -617
  108. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +0 -66
  109. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +0 -18
  110. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +0 -205
  111. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +0 -50
  112. package/esm2022/lib/content-node-selector/index.mjs +0 -18
  113. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +0 -48
  114. package/esm2022/lib/content-node-selector/public-api.mjs +0 -25
  115. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +0 -168
  116. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +0 -287
  117. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +0 -102
  118. package/esm2022/lib/content-node-share/content-node-share.module.mjs +0 -35
  119. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +0 -18
  120. package/esm2022/lib/content-node-share/index.mjs +0 -18
  121. package/esm2022/lib/content-node-share/public-api.mjs +0 -22
  122. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +0 -83
  123. package/esm2022/lib/content-type/content-type-dialog.component.mjs +0 -57
  124. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +0 -18
  125. package/esm2022/lib/content-type/content-type.service.mjs +0 -52
  126. package/esm2022/lib/content-type/index.mjs +0 -20
  127. package/esm2022/lib/content.module.mjs +0 -277
  128. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +0 -51
  129. package/esm2022/lib/dialogs/dialog.module.mjs +0 -52
  130. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +0 -111
  131. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +0 -38
  132. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +0 -66
  133. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +0 -44
  134. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +0 -146
  135. package/esm2022/lib/dialogs/index.mjs +0 -18
  136. package/esm2022/lib/dialogs/library/library.dialog.mjs +0 -224
  137. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +0 -115
  138. package/esm2022/lib/dialogs/public-api.mjs +0 -25
  139. package/esm2022/lib/directives/auto-focus.directive.mjs +0 -38
  140. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +0 -126
  141. package/esm2022/lib/directives/content-directive.module.mjs +0 -75
  142. package/esm2022/lib/directives/index.mjs +0 -18
  143. package/esm2022/lib/directives/library-favorite.directive.mjs +0 -119
  144. package/esm2022/lib/directives/library-membership.directive.mjs +0 -202
  145. package/esm2022/lib/directives/node-counter.directive.mjs +0 -59
  146. package/esm2022/lib/directives/node-delete.directive.mjs +0 -177
  147. package/esm2022/lib/directives/node-download.directive.mjs +0 -138
  148. package/esm2022/lib/directives/node-favorite.directive.mjs +0 -193
  149. package/esm2022/lib/directives/node-lock.directive.mjs +0 -57
  150. package/esm2022/lib/directives/node-restore.directive.mjs +0 -218
  151. package/esm2022/lib/directives/public-api.mjs +0 -28
  152. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +0 -60
  153. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +0 -196
  154. package/esm2022/lib/document-list/components/document-list.component.mjs +0 -965
  155. package/esm2022/lib/document-list/components/document-list.token.mjs +0 -21
  156. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +0 -42
  157. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +0 -107
  158. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +0 -131
  159. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +0 -91
  160. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +0 -86
  161. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +0 -118
  162. package/esm2022/lib/document-list/components/node.event.mjs +0 -30
  163. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +0 -83
  164. package/esm2022/lib/document-list/data/image-resolver.model.mjs +0 -18
  165. package/esm2022/lib/document-list/data/row-filter.model.mjs +0 -18
  166. package/esm2022/lib/document-list/data/share-data-row.model.mjs +0 -102
  167. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +0 -258
  168. package/esm2022/lib/document-list/document-list.module.mjs +0 -75
  169. package/esm2022/lib/document-list/index.mjs +0 -18
  170. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +0 -18
  171. package/esm2022/lib/document-list/models/content-action.model.mjs +0 -59
  172. package/esm2022/lib/document-list/models/document-folder.model.mjs +0 -23
  173. package/esm2022/lib/document-list/models/node-action.enum.mjs +0 -27
  174. package/esm2022/lib/document-list/models/permissions-style.model.mjs +0 -27
  175. package/esm2022/lib/document-list/models/permissions.model.mjs +0 -26
  176. package/esm2022/lib/document-list/models/preset.model.mjs +0 -257
  177. package/esm2022/lib/document-list/public-api.mjs +0 -47
  178. package/esm2022/lib/document-list/services/custom-resources.service.mjs +0 -378
  179. package/esm2022/lib/document-list/services/document-actions.service.mjs +0 -142
  180. package/esm2022/lib/document-list/services/document-list.service.mjs +0 -175
  181. package/esm2022/lib/document-list/services/folder-actions.service.mjs +0 -137
  182. package/esm2022/lib/document-list/services/lock.service.mjs +0 -72
  183. package/esm2022/lib/document-list/services/node-actions.service.mjs +0 -122
  184. package/esm2022/lib/group/index.mjs +0 -18
  185. package/esm2022/lib/group/public-api.mjs +0 -18
  186. package/esm2022/lib/group/services/group.service.mjs +0 -84
  187. package/esm2022/lib/infinite-scroll-datasource/index.mjs +0 -18
  188. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +0 -69
  189. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +0 -18
  190. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +0 -18
  191. package/esm2022/lib/interfaces/index.mjs +0 -18
  192. package/esm2022/lib/interfaces/library-entity.interface.mjs +0 -18
  193. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +0 -18
  194. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +0 -18
  195. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +0 -18
  196. package/esm2022/lib/interfaces/public-api.mjs +0 -23
  197. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +0 -19
  198. package/esm2022/lib/legal-hold/index.mjs +0 -18
  199. package/esm2022/lib/legal-hold/public-api.mjs +0 -18
  200. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +0 -136
  201. package/esm2022/lib/material.module.mjs +0 -183
  202. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +0 -43
  203. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +0 -65
  204. package/esm2022/lib/mock/document-library.model.mock.mjs +0 -84
  205. package/esm2022/lib/mock/document-list.component.mock.mjs +0 -364
  206. package/esm2022/lib/mock/index.mjs +0 -18
  207. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +0 -161
  208. package/esm2022/lib/mock/public-api.mjs +0 -27
  209. package/esm2022/lib/mock/search-filter-mock.mjs +0 -637
  210. package/esm2022/lib/mock/search-query.mock.mjs +0 -40
  211. package/esm2022/lib/mock/search.component.mock.mjs +0 -165
  212. package/esm2022/lib/mock/search.service.mock.mjs +0 -61
  213. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +0 -281
  214. package/esm2022/lib/new-version-uploader/index.mjs +0 -18
  215. package/esm2022/lib/new-version-uploader/models/index.mjs +0 -18
  216. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +0 -24
  217. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +0 -74
  218. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +0 -33
  219. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +0 -103
  220. package/esm2022/lib/new-version-uploader/public-api.mjs +0 -21
  221. package/esm2022/lib/node-comments/index.mjs +0 -18
  222. package/esm2022/lib/node-comments/node-comments.component.mjs +0 -50
  223. package/esm2022/lib/node-comments/node-comments.module.mjs +0 -33
  224. package/esm2022/lib/node-comments/public-api.mjs +0 -20
  225. package/esm2022/lib/node-comments/services/node-comments.service.mjs +0 -85
  226. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +0 -18
  227. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +0 -123
  228. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +0 -102
  229. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +0 -69
  230. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +0 -45
  231. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +0 -67
  232. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +0 -56
  233. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +0 -102
  234. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +0 -87
  235. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +0 -219
  236. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +0 -134
  237. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +0 -88
  238. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +0 -82
  239. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +0 -111
  240. package/esm2022/lib/permission-manager/index.mjs +0 -18
  241. package/esm2022/lib/permission-manager/models/member.model.mjs +0 -59
  242. package/esm2022/lib/permission-manager/models/permission.model.mjs +0 -29
  243. package/esm2022/lib/permission-manager/models/role.model.mjs +0 -18
  244. package/esm2022/lib/permission-manager/permission-manager.module.mjs +0 -84
  245. package/esm2022/lib/permission-manager/public-api.mjs +0 -36
  246. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +0 -78
  247. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +0 -299
  248. package/esm2022/lib/pipes/content-pipe.module.mjs +0 -37
  249. package/esm2022/lib/pipes/index.mjs +0 -18
  250. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +0 -69
  251. package/esm2022/lib/pipes/public-api.mjs +0 -19
  252. package/esm2022/lib/prediction/index.mjs +0 -18
  253. package/esm2022/lib/prediction/public-api.mjs +0 -18
  254. package/esm2022/lib/prediction/services/index.mjs +0 -18
  255. package/esm2022/lib/prediction/services/prediction.service.mjs +0 -57
  256. package/esm2022/lib/search/components/empty-search-result.component.mjs +0 -27
  257. package/esm2022/lib/search/components/index.mjs +0 -43
  258. package/esm2022/lib/search/components/reset-search.directive.mjs +0 -41
  259. package/esm2022/lib/search/components/search-check-list/index.mjs +0 -18
  260. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +0 -158
  261. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +0 -18
  262. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +0 -169
  263. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +0 -46
  264. package/esm2022/lib/search/components/search-control.component.mjs +0 -180
  265. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +0 -22
  266. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +0 -23
  267. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +0 -23
  268. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +0 -196
  269. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +0 -18
  270. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +0 -201
  271. package/esm2022/lib/search/components/search-datetime-range/index.mjs +0 -18
  272. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +0 -223
  273. package/esm2022/lib/search/components/search-facet-field/index.mjs +0 -18
  274. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +0 -132
  275. package/esm2022/lib/search/components/search-filter/index.mjs +0 -19
  276. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +0 -45
  277. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +0 -80
  278. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +0 -18
  279. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +0 -154
  280. package/esm2022/lib/search/components/search-filter-chips/index.mjs +0 -23
  281. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +0 -104
  282. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +0 -109
  283. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +0 -129
  284. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +0 -63
  285. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +0 -43
  286. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +0 -109
  287. package/esm2022/lib/search/components/search-filter-container/index.mjs +0 -18
  288. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +0 -122
  289. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +0 -19
  290. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +0 -36
  291. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +0 -63
  292. package/esm2022/lib/search/components/search-form/index.mjs +0 -18
  293. package/esm2022/lib/search/components/search-form/search-form.component.mjs +0 -52
  294. package/esm2022/lib/search/components/search-input/index.mjs +0 -18
  295. package/esm2022/lib/search/components/search-input/search-input.component.mjs +0 -108
  296. package/esm2022/lib/search/components/search-logical-filter/index.mjs +0 -18
  297. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +0 -163
  298. package/esm2022/lib/search/components/search-number-range/index.mjs +0 -18
  299. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +0 -154
  300. package/esm2022/lib/search/components/search-panel/index.mjs +0 -18
  301. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +0 -44
  302. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +0 -18
  303. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +0 -23
  304. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +0 -26
  305. package/esm2022/lib/search/components/search-properties/index.mjs +0 -22
  306. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +0 -244
  307. package/esm2022/lib/search/components/search-properties/search-properties.mjs +0 -18
  308. package/esm2022/lib/search/components/search-radio/index.mjs +0 -18
  309. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +0 -145
  310. package/esm2022/lib/search/components/search-slider/index.mjs +0 -18
  311. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +0 -119
  312. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +0 -18
  313. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +0 -77
  314. package/esm2022/lib/search/components/search-text/index.mjs +0 -18
  315. package/esm2022/lib/search/components/search-text/search-text.component.mjs +0 -134
  316. package/esm2022/lib/search/components/search-widget-container/index.mjs +0 -18
  317. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +0 -113
  318. package/esm2022/lib/search/components/search.component.mjs +0 -152
  319. package/esm2022/lib/search/forms/index.mjs +0 -19
  320. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +0 -23
  321. package/esm2022/lib/search/forms/search-term-validator.mjs +0 -26
  322. package/esm2022/lib/search/index.mjs +0 -18
  323. package/esm2022/lib/search/mocks/index.mjs +0 -18
  324. package/esm2022/lib/search/mocks/search.service.mock.mjs +0 -56
  325. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +0 -22
  326. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +0 -18
  327. package/esm2022/lib/search/models/facet-field.interface.mjs +0 -29
  328. package/esm2022/lib/search/models/facet-query.interface.mjs +0 -18
  329. package/esm2022/lib/search/models/facet-widget.interface.mjs +0 -18
  330. package/esm2022/lib/search/models/filter-query.interface.mjs +0 -18
  331. package/esm2022/lib/search/models/filter-search.interface.mjs +0 -18
  332. package/esm2022/lib/search/models/index.mjs +0 -34
  333. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +0 -31
  334. package/esm2022/lib/search/models/search-category.interface.mjs +0 -18
  335. package/esm2022/lib/search/models/search-configuration.interface.mjs +0 -18
  336. package/esm2022/lib/search/models/search-filter-list.model.mjs +0 -148
  337. package/esm2022/lib/search/models/search-form.interface.mjs +0 -18
  338. package/esm2022/lib/search/models/search-range.interface.mjs +0 -18
  339. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +0 -18
  340. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +0 -18
  341. package/esm2022/lib/search/models/search-widget.interface.mjs +0 -18
  342. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +0 -18
  343. package/esm2022/lib/search/public-api.mjs +0 -24
  344. package/esm2022/lib/search/search-configuration.token.mjs +0 -19
  345. package/esm2022/lib/search/search.module.mjs +0 -192
  346. package/esm2022/lib/search/services/base-query-builder.service.mjs +0 -509
  347. package/esm2022/lib/search/services/index.mjs +0 -24
  348. package/esm2022/lib/search/services/search-configuration.service.mjs +0 -50
  349. package/esm2022/lib/search/services/search-facet-filters.service.mjs +0 -374
  350. package/esm2022/lib/search/services/search-filter.service.mjs +0 -56
  351. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +0 -136
  352. package/esm2022/lib/search/services/search-query-builder.service.mjs +0 -48
  353. package/esm2022/lib/search/services/search.service.mjs +0 -89
  354. package/esm2022/lib/search-ai/index.mjs +0 -18
  355. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +0 -18
  356. package/esm2022/lib/search-ai/public-api.mjs +0 -19
  357. package/esm2022/lib/search-ai/services/search-ai.service.mjs +0 -103
  358. package/esm2022/lib/security/index.mjs +0 -18
  359. package/esm2022/lib/security/public-api.mjs +0 -18
  360. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +0 -18
  361. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +0 -18
  362. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +0 -274
  363. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +0 -43
  364. package/esm2022/lib/services/alfresco-api.interface.mjs +0 -18
  365. package/esm2022/lib/services/alfresco-api.service.mjs +0 -120
  366. package/esm2022/lib/services/index.mjs +0 -18
  367. package/esm2022/lib/services/public-api.mjs +0 -18
  368. package/esm2022/lib/tag/index.mjs +0 -18
  369. package/esm2022/lib/tag/public-api.mjs +0 -24
  370. package/esm2022/lib/tag/services/tag.service.mjs +0 -171
  371. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +0 -114
  372. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +0 -98
  373. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +0 -80
  374. package/esm2022/lib/tag/tag.module.mjs +0 -37
  375. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +0 -27
  376. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +0 -370
  377. package/esm2022/lib/testing/content.testing.module.mjs +0 -56
  378. package/esm2022/lib/tree/components/tree.component.mjs +0 -312
  379. package/esm2022/lib/tree/index.mjs +0 -18
  380. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +0 -18
  381. package/esm2022/lib/tree/models/tree-node.interface.mjs +0 -22
  382. package/esm2022/lib/tree/models/tree-response.interface.mjs +0 -18
  383. package/esm2022/lib/tree/public-api.mjs +0 -23
  384. package/esm2022/lib/tree/services/tree.service.mjs +0 -134
  385. package/esm2022/lib/tree/tree.module.mjs +0 -33
  386. package/esm2022/lib/tree-view/components/tree-view.component.mjs +0 -75
  387. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +0 -99
  388. package/esm2022/lib/tree-view/index.mjs +0 -18
  389. package/esm2022/lib/tree-view/models/tree-view.model.mjs +0 -28
  390. package/esm2022/lib/tree-view/public-api.mjs +0 -22
  391. package/esm2022/lib/tree-view/services/tree-view.service.mjs +0 -38
  392. package/esm2022/lib/tree-view/tree-view.module.mjs +0 -33
  393. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +0 -176
  394. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +0 -190
  395. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +0 -92
  396. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +0 -124
  397. package/esm2022/lib/upload/components/upload-button.component.mjs +0 -133
  398. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +0 -112
  399. package/esm2022/lib/upload/components/upload-files.event.mjs +0 -41
  400. package/esm2022/lib/upload/components/upload-version-button.component.mjs +0 -54
  401. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +0 -154
  402. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +0 -75
  403. package/esm2022/lib/upload/index.mjs +0 -18
  404. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +0 -39
  405. package/esm2022/lib/upload/public-api.mjs +0 -29
  406. package/esm2022/lib/upload/upload.module.mjs +0 -72
  407. package/esm2022/lib/version-compatibility/index.mjs +0 -18
  408. package/esm2022/lib/version-compatibility/public-api.mjs +0 -20
  409. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +0 -26
  410. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +0 -53
  411. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +0 -33
  412. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +0 -76
  413. package/esm2022/lib/version-manager/content-version.service.mjs +0 -53
  414. package/esm2022/lib/version-manager/index.mjs +0 -18
  415. package/esm2022/lib/version-manager/public-api.mjs +0 -23
  416. package/esm2022/lib/version-manager/version-comparison.component.mjs +0 -42
  417. package/esm2022/lib/version-manager/version-list.component.mjs +0 -215
  418. package/esm2022/lib/version-manager/version-manager.component.mjs +0 -145
  419. package/esm2022/lib/version-manager/version-manager.module.mjs +0 -48
  420. package/esm2022/lib/version-manager/version-upload.component.mjs +0 -154
  421. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +0 -33
  422. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +0 -408
  423. package/esm2022/lib/viewer/index.mjs +0 -18
  424. package/esm2022/lib/viewer/public-api.mjs +0 -19
  425. package/esm2022/public-api.mjs +0 -56
@@ -1,617 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { Component, DestroyRef, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
18
- import { CustomEmptyContentTemplateDirective, DataColumnComponent, DataColumnListComponent, HighlightDirective, InfinitePaginationComponent, ShowHeaderMode, ToolbarComponent, ToolbarTitleComponent, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
19
- import { NodesApiService, SitesService, UploadService } from '../../common';
20
- import { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
21
- import { Pagination, SiteEntry, SitePaging } from '@alfresco/js-api';
22
- import { DocumentListComponent } from '../../document-list/components/document-list.component';
23
- import { CustomResourcesService } from '../../document-list/services/custom-resources.service';
24
- import { debounceTime } from 'rxjs/operators';
25
- import { ContentNodeSelectorPanelService } from './content-node-selector-panel.service';
26
- import { CommonModule } from '@angular/common';
27
- import { MatFormFieldModule } from '@angular/material/form-field';
28
- import { TranslatePipe } from '@ngx-translate/core';
29
- import { MatInputModule } from '@angular/material/input';
30
- import { AutoFocusDirective } from '../../directives/auto-focus.directive';
31
- import { NodeCounterDirective } from '../../directives/node-counter.directive';
32
- import { MatIconModule } from '@angular/material/icon';
33
- import { DropdownSitesComponent } from '../site-dropdown/sites-dropdown.component';
34
- import { MatButtonModule } from '@angular/material/button';
35
- import { NameLocationCellComponent } from '../name-location-cell/name-location-cell.component';
36
- import { DropdownBreadcrumbComponent } from '../../breadcrumb/dropdown-breadcrumb.component';
37
- import { SearchQueryBuilderService } from '../../search/services/search-query-builder.service';
38
- import { SearchPanelComponent } from '../../search/components/search-panel/search-panel.component';
39
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
40
- import * as i0 from "@angular/core";
41
- import * as i1 from "../../document-list/services/custom-resources.service";
42
- import * as i2 from "../../search/services/search-query-builder.service";
43
- import * as i3 from "@alfresco/adf-core";
44
- import * as i4 from "../../common";
45
- import * as i5 from "./content-node-selector-panel.service";
46
- import * as i6 from "@angular/common";
47
- import * as i7 from "@angular/material/form-field";
48
- import * as i8 from "@angular/material/input";
49
- import * as i9 from "@angular/forms";
50
- import * as i10 from "@angular/material/icon";
51
- import * as i11 from "@angular/material/button";
52
- export const defaultValidation = () => true;
53
- export class ContentNodeSelectorPanelComponent {
54
- /**
55
- * Custom row filter function. See the
56
- * [Row Filter Model](row-filter.model.md) page
57
- * for more information.
58
- */
59
- set rowFilter(rowFilter) {
60
- this.createRowFilter(rowFilter);
61
- }
62
- get rowFilter() {
63
- return this._rowFilter;
64
- }
65
- /**
66
- * Custom list of site content componentIds.
67
- * Used to filter out the corresponding items from the displayed nodes
68
- */
69
- set excludeSiteContent(excludeSiteContent) {
70
- this._excludeSiteContent = excludeSiteContent;
71
- this.createRowFilter(this._rowFilter);
72
- }
73
- get excludeSiteContent() {
74
- return this._excludeSiteContent;
75
- }
76
- /** Toggle search input rendering */
77
- set showSearch(value) {
78
- if (value !== undefined && value !== null) {
79
- this.showSearchField = value;
80
- }
81
- }
82
- get showSearch() {
83
- return this.showSearchField;
84
- }
85
- /** Toggle sites list dropdown rendering */
86
- set showDropdownSiteList(value) {
87
- if (value !== undefined && value !== null) {
88
- this.showSiteList = value;
89
- }
90
- }
91
- get showDropdownSiteList() {
92
- return this.showSiteList;
93
- }
94
- /** Shows the files and folders in the search result */
95
- set showFilesInResult(value) {
96
- if (value !== undefined && value !== null) {
97
- const showFilesQuery = `TYPE:'cm:folder'${value ? ` OR TYPE:'cm:content'` : ''}`;
98
- this.queryBuilderService.addFilterQuery(showFilesQuery);
99
- }
100
- }
101
- /** Shows the node counter in the breadcrumb */
102
- set showNodeCounter(value) {
103
- this.showCounter = value ?? false;
104
- }
105
- get showNodeCounter() {
106
- return this.showCounter;
107
- }
108
- constructor(customResourcesService, queryBuilderService, userPreferencesService, nodesApiService, uploadService, sitesService, contentNodeSelectorPanelService) {
109
- this.customResourcesService = customResourcesService;
110
- this.queryBuilderService = queryBuilderService;
111
- this.userPreferencesService = userPreferencesService;
112
- this.nodesApiService = nodesApiService;
113
- this.uploadService = uploadService;
114
- this.sitesService = sitesService;
115
- this.contentNodeSelectorPanelService = contentNodeSelectorPanelService;
116
- // eslint-disable-next-line @typescript-eslint/naming-convention
117
- this.DEFAULT_PAGINATION = new Pagination({
118
- maxItems: 25,
119
- skipCount: 0
120
- });
121
- this.disableActionFolderList = ['-mysites-'];
122
- this.showSiteList = true;
123
- this.showSearchField = true;
124
- this.showCounter = false;
125
- this._emptyList = true;
126
- /** If true will restrict the search and breadcrumbs to the currentFolderId */
127
- this.restrictRootToCurrentFolderId = false;
128
- /** Node ID of the folder currently listed. */
129
- this.currentFolderId = null;
130
- /**
131
- * Hide the "My Files" option added to the site list by default.
132
- * See the [Sites Dropdown component](sites-dropdown.component.md)
133
- * for more information.
134
- */
135
- this.dropdownHideMyFiles = false;
136
- /**
137
- * Custom site for site dropdown. This is the same as the `siteList`.
138
- * property of the Sites Dropdown component (see its doc page
139
- * for more information).
140
- */
141
- this.dropdownSiteList = null;
142
- this._rowFilter = defaultValidation;
143
- this._excludeSiteContent = [];
144
- /**
145
- * Custom image resolver function. See the
146
- * [Image Resolver Model](image-resolver.model.md) page
147
- * for more information.
148
- */
149
- this.imageResolver = null;
150
- /** Number of items shown per page in the list. */
151
- this.pageSize = this.DEFAULT_PAGINATION.maxItems;
152
- /** Define the selection mode for document list. The allowed values are single or multiple */
153
- this.selectionMode = 'single';
154
- /**
155
- * Function used to decide if the selected node has permission to be selected.
156
- * Default value is a function that always returns true.
157
- */
158
- this.isSelectionValid = defaultValidation;
159
- /** Emitted when the user has chosen an item. */
160
- this.select = new EventEmitter();
161
- /** Emitted when the navigation changes. */
162
- this.navigationChange = new EventEmitter();
163
- /** Emitted when the select site changes. */
164
- this.siteChange = new EventEmitter();
165
- /** Emitted when search is running. */
166
- this.showingSearch = new EventEmitter();
167
- /** Emitted when current folder loaded. */
168
- this.currentFolder = new EventEmitter();
169
- /** Emitted when folder loaded. */
170
- this.folderLoaded = new EventEmitter();
171
- this.nodePaging = null;
172
- this.searchTerm = '';
173
- this.showingSearchResults = false;
174
- this.loadingSearchResults = false;
175
- this.inDialog = false;
176
- this._chosenNode = null;
177
- this.selectionWithoutValidation = null;
178
- this.folderIdToShow = null;
179
- this.breadcrumbFolderTitle = null;
180
- this.startSiteGuid = null;
181
- this.hasValidQuery = false;
182
- this.showHeader = ShowHeaderMode.Never;
183
- this.infiniteScroll = false;
184
- this.debounceSearch = 200;
185
- this.searchInput = new UntypedFormControl();
186
- this.preselectedNodes = [];
187
- this.currentUploadBatch = [];
188
- this.sorting = ['createdAt', 'desc'];
189
- this.searchPanelExpanded = false;
190
- this.destroyRef = inject(DestroyRef);
191
- }
192
- set chosenNode(value) {
193
- this._chosenNode = value;
194
- this.select.next(value);
195
- }
196
- get chosenNode() {
197
- return this._chosenNode;
198
- }
199
- get emptyList() {
200
- return this._emptyList;
201
- }
202
- getSelectedCount() {
203
- return this.chosenNode?.length || 0;
204
- }
205
- ngOnInit() {
206
- this.searchInput.valueChanges
207
- .pipe(debounceTime(this.debounceSearch), takeUntilDestroyed(this.destroyRef))
208
- .subscribe((searchValue) => {
209
- this.searchTerm = searchValue;
210
- this.queryBuilderService.userQuery = searchValue.length > 0 ? `${searchValue}*` : searchValue;
211
- this.queryBuilderService.update();
212
- });
213
- this.queryBuilderService.updated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((searchRequest) => {
214
- if (searchRequest) {
215
- this.hasValidQuery = true;
216
- this.prepareDialogForNewSearch(searchRequest);
217
- this.queryBuilderService.execute(false, searchRequest);
218
- }
219
- else {
220
- this.hasValidQuery = false;
221
- this.resetFolderToShow();
222
- this.clearSearch();
223
- }
224
- });
225
- this.queryBuilderService.executed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((results) => {
226
- if (this.hasValidQuery) {
227
- this.showSearchResults(results);
228
- }
229
- });
230
- this.userPreferencesService
231
- .select(UserPreferenceValues.PaginationSize)
232
- .pipe(takeUntilDestroyed(this.destroyRef))
233
- .subscribe((pagSize) => (this.pageSize = pagSize));
234
- this.target = this.documentList;
235
- this.folderIdToShow = this.currentFolderId;
236
- if (this.currentFolderId) {
237
- if (this.restrictRootToCurrentFolderId) {
238
- this.breadcrumbRootId = this.currentFolderId;
239
- this.siteId = this.currentFolderId;
240
- }
241
- else {
242
- this.getStartSite();
243
- }
244
- }
245
- this.breadcrumbTransform = this.breadcrumbTransform ? this.breadcrumbTransform : null;
246
- this.isSelectionValid = this.isSelectionValid ? this.isSelectionValid : defaultValidation;
247
- this.onFileUploadEvent();
248
- this.onFileUploadDeletedEvent();
249
- this.resetPagination();
250
- this.setSearchScopeToNodes();
251
- this.documentList.$folderNode.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((currentNode) => {
252
- this.currentFolder.emit(currentNode);
253
- });
254
- }
255
- toggleSearchPanel() {
256
- this.searchPanelExpanded = !this.searchPanelExpanded;
257
- }
258
- hasCustomModels() {
259
- return this.contentNodeSelectorPanelService?.customModels?.length > 0;
260
- }
261
- onFileUploadEvent() {
262
- this.uploadService.fileUploadComplete
263
- .pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef))
264
- .subscribe((fileUploadEvent) => {
265
- this.currentUploadBatch.push(fileUploadEvent.data);
266
- if (!this.uploadService.isUploading()) {
267
- this.preselectedNodes = this.getPreselectNodesBasedOnSelectionMode();
268
- this.currentUploadBatch = [];
269
- this.documentList.reloadWithoutResettingSelection();
270
- }
271
- });
272
- }
273
- onFileUploadDeletedEvent() {
274
- this.uploadService.fileUploadDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((deletedFileEvent) => {
275
- this.documentList.unselectRowFromNodeId(deletedFileEvent.file.data.entry.id);
276
- this.documentList.reloadWithoutResettingSelection();
277
- });
278
- }
279
- getStartSite() {
280
- this.nodesApiService.getNode(this.currentFolderId).subscribe((startNodeEntry) => {
281
- this.startSiteGuid = this.sitesService.getSiteNameFromNodePath(startNodeEntry);
282
- if (this.startSiteGuid) {
283
- this.sitesService.getSite(this.startSiteGuid).subscribe((startSiteEntry) => {
284
- if (startSiteEntry instanceof SiteEntry) {
285
- this.siteChange.emit(startSiteEntry.entry.title);
286
- }
287
- });
288
- }
289
- });
290
- }
291
- createRowFilter(filter) {
292
- if (!filter) {
293
- filter = () => true;
294
- }
295
- this._rowFilter = (value, index, array) => filter(value, index, array) && !this.isExcludedSiteContent(value);
296
- }
297
- isExcludedSiteContent(row) {
298
- const entry = row.node.entry;
299
- if (this._excludeSiteContent?.length && entry?.properties?.['st:componentId']) {
300
- const excludedItem = this._excludeSiteContent.find((id) => entry.properties['st:componentId'] === id);
301
- return !!excludedItem;
302
- }
303
- return false;
304
- }
305
- /**
306
- * Updates the site attribute and starts a new search
307
- *
308
- * @param chosenSite SiteEntry to search within
309
- */
310
- siteChanged(chosenSite) {
311
- this.siteId = chosenSite.entry.guid;
312
- this.setTitleIfCustomSite(chosenSite);
313
- this.siteChange.emit(chosenSite.entry.title);
314
- this.queryBuilderService.update();
315
- }
316
- /**
317
- * Get current breadcrumb folder node
318
- *
319
- * @returns the actually selected|entered folder node or null in case of searching for the breadcrumb
320
- */
321
- get breadcrumbFolderNode() {
322
- let folderNode;
323
- if (this.showingSearchResults && this.selectionWithoutValidation?.length) {
324
- folderNode = this.selectionWithoutValidation[0];
325
- }
326
- else {
327
- folderNode = this.documentList.folderNode;
328
- }
329
- return folderNode;
330
- }
331
- /**
332
- * Prepares the dialog for a new search
333
- *
334
- * @param searchRequest request options
335
- */
336
- prepareDialogForNewSearch(searchRequest) {
337
- this.target = searchRequest ? null : this.documentList;
338
- if (this.target) {
339
- this.infinitePaginationComponent.reset();
340
- }
341
- this.folderIdToShow = null;
342
- this.preselectedNodes = [];
343
- this.loadingSearchResults = true;
344
- this.addCorrespondingNodeIdsQuery();
345
- this.resetChosenNode();
346
- }
347
- /**
348
- * Clear the search input and reset to last folder node in which search was performed
349
- */
350
- clear() {
351
- this.searchTerm = '';
352
- this.queryBuilderService.userQuery = '';
353
- this.queryBuilderService.update();
354
- }
355
- /**
356
- * Resets the folder to be shown with the site selection or the initial landing folder
357
- */
358
- resetFolderToShow() {
359
- this.folderIdToShow = this.siteId || this.currentFolderId;
360
- }
361
- /**
362
- * Clear the search input and search related data
363
- */
364
- clearSearch() {
365
- this.searchTerm = '';
366
- this.nodePaging = null;
367
- this.resetPagination();
368
- this.resetChosenNode();
369
- this.showingSearchResults = false;
370
- this.showingSearch.emit(this.showingSearchResults);
371
- }
372
- addCorrespondingNodeIdsQuery() {
373
- let extraParentFiltering = '';
374
- if (this.customResourcesService.hasCorrespondingNodeIds(this.siteId)) {
375
- this.customResourcesService.getCorrespondingNodeIds(this.siteId).subscribe((nodeIds) => {
376
- if (nodeIds?.length) {
377
- nodeIds
378
- .filter((id) => id !== this.siteId)
379
- .forEach((extraId) => {
380
- extraParentFiltering += ` OR ANCESTOR:'workspace://SpacesStore/${extraId}'`;
381
- });
382
- }
383
- const parentFiltering = this.siteId ? `ANCESTOR:'workspace://SpacesStore/${this.siteId}'${extraParentFiltering}` : '';
384
- this.queryBuilderService.addFilterQuery(parentFiltering);
385
- });
386
- }
387
- else {
388
- const parentFiltering = this.siteId ? `ANCESTOR:'workspace://SpacesStore/${this.siteId}'` : '';
389
- this.queryBuilderService.addFilterQuery(parentFiltering);
390
- }
391
- }
392
- setSearchScopeToNodes() {
393
- const scope = {
394
- locations: 'nodes'
395
- };
396
- this.queryBuilderService.setScope(scope);
397
- }
398
- /**
399
- * Show the results of the search
400
- *
401
- * @param results Search results
402
- */
403
- showSearchResults(results) {
404
- this.showingSearchResults = true;
405
- this.loadingSearchResults = false;
406
- this.showingSearch.emit(this.showingSearchResults);
407
- this.nodePaging = results;
408
- }
409
- /**
410
- * Sets showingSearchResults state to be able to differentiate between search results or folder results
411
- *
412
- * @param $event node event
413
- */
414
- onFolderChange($event) {
415
- this.folderIdToShow = $event.value.id;
416
- this.showingSearchResults = false;
417
- this.infiniteScroll = false;
418
- this.breadcrumbFolderTitle = null;
419
- this.preselectedNodes = [];
420
- this.clearSearch();
421
- this.navigationChange.emit($event);
422
- }
423
- /**
424
- * Attempts to set the currently loaded node
425
- *
426
- * @param nodePaging pagination model
427
- */
428
- onFolderLoaded(nodePaging) {
429
- setTimeout(() => {
430
- this._emptyList = !this.documentList.data.getRows().length;
431
- });
432
- this.updatePaginationAfterRowFilter(nodePaging);
433
- if (!this.showingSearchResults) {
434
- this.attemptNodeSelection(this.documentList.folderNode);
435
- }
436
- this.folderLoaded.emit();
437
- }
438
- /**
439
- * Updates pagination.hasMoreItems to false after filtering only folders during 'COPY' and 'MOVE' action
440
- *
441
- * @param nodePaging pagination model
442
- */
443
- updatePaginationAfterRowFilter(nodePaging) {
444
- if (this.documentList.data.getRows().length < nodePaging.list.pagination.maxItems) {
445
- nodePaging.list.pagination.hasMoreItems = false;
446
- }
447
- }
448
- /**
449
- * Returns whether breadcrumb has to be shown or not
450
- *
451
- * @returns `true` if needs to show the breadcrumb, otherwise `false`
452
- */
453
- showBreadcrumbs() {
454
- return !this.showingSearchResults || this.chosenNode;
455
- }
456
- /**
457
- * Loads the next batch of search results
458
- *
459
- * @param pagination Pagination object
460
- */
461
- getNextPageOfSearch(pagination) {
462
- this.infiniteScroll = true;
463
- this.queryBuilderService.paging.maxItems = pagination.maxItems;
464
- this.queryBuilderService.paging.skipCount = pagination.skipCount;
465
- if (this.searchTerm.length > 0) {
466
- this.queryBuilderService.update();
467
- }
468
- }
469
- /**
470
- * Selects node as chosen if it has the right permission, clears the selection otherwise
471
- *
472
- * @param entry node entry
473
- */
474
- attemptNodeSelection(entry) {
475
- if (entry && this.isSelectionValid(entry) && !this.isActionDisabledForFolder(this.documentList.currentFolderId)) {
476
- this.chosenNode = [entry];
477
- }
478
- }
479
- isActionDisabledForFolder(folderId) {
480
- return this.disableActionFolderList.includes(folderId);
481
- }
482
- /**
483
- * Clears the chosen node
484
- */
485
- resetChosenNode() {
486
- this.chosenNode = null;
487
- }
488
- /**
489
- * It filters and emit the selection coming from the document list
490
- *
491
- * @param nodesEntries selected nodes
492
- */
493
- onCurrentSelection(nodesEntries) {
494
- const validNodesEntity = nodesEntries.filter((node) => this.isSelectionValid(node.entry));
495
- this.chosenNode = validNodesEntity.map((node) => node.entry);
496
- this.selectionWithoutValidation = nodesEntries.map((node) => node.entry);
497
- }
498
- setTitleIfCustomSite(site) {
499
- if (this.customResourcesService.isCustomSource(site.entry.guid)) {
500
- this.breadcrumbFolderTitle = site.entry.title;
501
- if (this.documentList.folderNode.path.elements) {
502
- this.breadcrumbFolderNode.name = site.entry.title;
503
- this.documentList.folderNode.path.elements = null;
504
- }
505
- }
506
- else {
507
- this.breadcrumbFolderTitle = null;
508
- }
509
- }
510
- hasPreselectNodes() {
511
- return this.preselectedNodes?.length > 0;
512
- }
513
- isSingleSelectionMode() {
514
- return this.selectionMode === 'single';
515
- }
516
- getPreselectNodesBasedOnSelectionMode() {
517
- let selectedNodes = [];
518
- if (this.currentUploadBatch?.length) {
519
- if (this.isSingleSelectionMode()) {
520
- selectedNodes = [this.currentUploadBatch[this.currentUploadBatch.length - 1]];
521
- }
522
- else {
523
- selectedNodes = this.currentUploadBatch;
524
- }
525
- }
526
- return selectedNodes;
527
- }
528
- resetPagination() {
529
- this.queryBuilderService.paging = {
530
- maxItems: this.pageSize,
531
- skipCount: this.DEFAULT_PAGINATION.skipCount
532
- };
533
- }
534
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeSelectorPanelComponent, deps: [{ token: i1.CustomResourcesService }, { token: i2.SearchQueryBuilderService }, { token: i3.UserPreferencesService }, { token: i4.NodesApiService }, { token: i4.UploadService }, { token: i4.SitesService }, { token: i5.ContentNodeSelectorPanelService }], target: i0.ɵɵFactoryTarget.Component }); }
535
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContentNodeSelectorPanelComponent, isStandalone: true, selector: "adf-content-node-selector-panel", inputs: { restrictRootToCurrentFolderId: "restrictRootToCurrentFolderId", currentFolderId: "currentFolderId", dropdownHideMyFiles: "dropdownHideMyFiles", dropdownSiteList: "dropdownSiteList", where: "where", rowFilter: "rowFilter", excludeSiteContent: "excludeSiteContent", imageResolver: "imageResolver", pageSize: "pageSize", selectionMode: "selectionMode", isSelectionValid: "isSelectionValid", breadcrumbTransform: "breadcrumbTransform", showSearch: "showSearch", showDropdownSiteList: "showDropdownSiteList", showFilesInResult: "showFilesInResult", showNodeCounter: "showNodeCounter" }, outputs: { select: "select", navigationChange: "navigationChange", siteChange: "siteChange", showingSearch: "showingSearch", currentFolder: "currentFolder", folderLoaded: "folderLoaded" }, host: { classAttribute: "adf-content-node-selector-panel" }, providers: [SearchQueryBuilderService], viewQueries: [{ propertyName: "documentList", first: true, predicate: ["documentList"], descendants: true, static: true }, { propertyName: "highlighter", first: true, predicate: HighlightDirective, descendants: true, static: true }, { propertyName: "infinitePaginationComponent", first: true, predicate: InfinitePaginationComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"adf-content-node-selector-content\">\n <mat-form-field floatPlaceholder=\"never\"\n appearance=\"fill\"\n class=\"adf-content-node-selector-content-input\"\n subscriptSizing=\"dynamic\"\n *ngIf=\"showSearch\">\n <mat-label>{{ 'NODE_SELECTOR.SEARCH' | translate }}</mat-label>\n <input matInput\n id=\"searchInput\"\n [formControl]=\"searchInput\"\n type=\"text\"\n [value]=\"searchTerm\"\n adf-auto-focus\n data-automation-id=\"content-node-selector-search-input\">\n\n <mat-icon *ngIf=\"searchTerm.length > 0\"\n matSuffix (click)=\"clear()\"\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-clear\">clear\n </mat-icon>\n\n <mat-icon *ngIf=\"searchTerm.length === 0\"\n matSuffix\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-icon\">search\n </mat-icon>\n\n </mat-form-field>\n <adf-sites-dropdown\n *ngIf=\"showDropdownSiteList\"\n class=\"full-width\"\n (change)=\"siteChanged($event)\"\n [placeholder]=\"'NODE_SELECTOR.SELECT_LIBRARY'\"\n [hideMyFiles]=\"dropdownHideMyFiles\"\n [siteList]=\"dropdownSiteList\"\n [value]=\"startSiteGuid\"\n data-automation-id=\"content-node-selector-sites-combo\" />\n <button *ngIf=\"hasCustomModels()\"\n data-automation-id=\"adf-toggle-search-panel-button\"\n mat-icon-button\n (click)=\"toggleSearchPanel()\">\n <mat-icon>filter_list</mat-icon>\n {{ 'SEARCH.SEARCH_HEADER.TITLE' | translate }}\n </button>\n <div class=\"adf-content-node-selector-search-panel-container\">\n <adf-search-panel *ngIf=\"searchPanelExpanded\" />\n <div class=\"adf-content-node-selector-document-list-container\">\n <adf-toolbar>\n <adf-toolbar-title>\n <ng-container *ngIf=\"!showBreadcrumbs()\">\n <h2 class=\"adf-search-results-label\">{{ 'NODE_SELECTOR.SEARCH_RESULTS' | translate }}</h2>\n </ng-container>\n <adf-dropdown-breadcrumb *ngIf=\"showBreadcrumbs()\"\n class=\"adf-content-node-selector-content-breadcrumb\"\n (navigate)=\"clearSearch()\"\n [target]=\"documentList\"\n [rootId]=\"breadcrumbRootId\"\n [transform]=\"breadcrumbTransform\"\n [folderNode]=\"breadcrumbFolderNode\"\n [root]=\"breadcrumbFolderTitle\"\n data-automation-id=\"content-node-selector-content-breadcrumb\" />\n <ng-container *ngIf=\"showNodeCounter\" [adf-node-counter]=\"getSelectedCount()\" />\n </adf-toolbar-title>\n </adf-toolbar>\n\n <div\n class=\"adf-content-node-selector-content-list\"\n [class.adf-content-node-selector-content-list-searchLayout]=\"showingSearchResults\"\n data-automation-id=\"content-node-selector-content-list\">\n <adf-document-list\n #documentList\n [adf-highlight]=\"searchTerm\"\n adf-highlight-selector=\".adf-name-location-cell-name\"\n [showHeader]=\"showHeader\"\n [node]=\"nodePaging\"\n [preselectNodes]=\"preselectedNodes\"\n [maxItems]=\"pageSize\"\n [rowFilter]=\"_rowFilter\"\n [imageResolver]=\"imageResolver\"\n [currentFolderId]=\"folderIdToShow\"\n [selectionMode]=\"selectionMode\"\n [contextMenuActions]=\"false\"\n [contentActions]=\"false\"\n [allowDropFiles]=\"false\"\n [sorting]=\"sorting\"\n sortingMode=\"server\"\n [where]=\"where\"\n (folderChange)=\"onFolderChange($event)\"\n (ready)=\"onFolderLoaded($event)\"\n (nodeSelected)=\"onCurrentSelection($event)\"\n [class.adf-content-node-selector-content-list-empty]=\"emptyList\"\n data-automation-id=\"content-node-selector-document-list\">\n\n <adf-custom-empty-content-template>\n <div aria-live=\"polite\">{{ 'NODE_SELECTOR.NO_RESULTS' | translate }}</div>\n </adf-custom-empty-content-template>\n\n <data-columns>\n <data-column key=\"$thumbnail\" type=\"image\" />\n <data-column key=\"name\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.NAME\" class=\"adf-full-width adf-ellipsis-cell\">\n <ng-template let-context>\n <adf-name-location-cell [row]=\"context.row\" />\n </ng-template>\n </data-column>\n <data-column key=\"modifiedAt\" type=\"date\" title=\"ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON\" format=\"timeAgo\" class=\"adf-content-selector-modified-cell\" />\n <data-column key=\"createdByUser.displayName\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.CREATED_BY\" class=\"adf-content-selector-modifier-cell\" />\n <data-column key=\"visibility\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.STATUS\" class=\"adf-content-selector-visibility-cell\" />\n </data-columns>\n\n </adf-document-list>\n\n <adf-infinite-pagination\n [target]=\"target\"\n [loading]=\"loadingSearchResults\"\n (loadMore)=\"getNextPageOfSearch($event)\"\n data-automation-id=\"content-node-selector-search-pagination\">\n {{ 'ADF-DOCUMENT-LIST.LAYOUT.LOAD_MORE' | translate }}\n </adf-infinite-pagination>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h2.adf-search-results-label{flex:1;font-weight:600;font-size:var(--theme-body-1-font-size);font-style:normal;font-stretch:normal;line-height:1.43;letter-spacing:-.2px;color:var(--adf-theme-foreground-text-color-087)}.mdc-dialog .mat-mdc-dialog-surface:is(div){padding-bottom:0}.adf-content-node-selector-panel .adf-toolbar .adf-toolbar-container.adf-toolbar-container-row{max-height:48px;border-bottom-width:0;font-size:var(--theme-body-1-font-size);height:auto}.adf-content-node-selector-search-panel-container{display:flex}.adf-content-node-selector-document-list-container{margin-top:16px;width:100%}.adf-content-node-selector-content{padding-top:0}.adf-content-node-selector-content .mat-mdc-input-element:focus::placeholder{color:var(--theme-primary-color)}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex{align-items:center}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix{padding-bottom:0}.adf-content-node-selector-content .adf-sites-dropdown-form-field label.mat-mdc-floating-label{top:32px}.adf-content-node-selector-content .mat-mdc-form-field-subscript-wrapper{height:16px}.adf-content-node-selector-content-input{width:100%;margin-bottom:8px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon{color:var(--adf-theme-foreground-icon-color-054);cursor:pointer;padding:0 0 8px;width:1em;height:1em;font-size:20px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon:hover{color:var(--adf-theme-foreground-base-color)}.adf-content-node-selector-content-input .mat-mdc-form-field-subscript-wrapper{display:none}.adf-content-node-selector-content .adf-site-dropdown-container{display:block}.adf-content-node-selector-content .adf-site-dropdown-container .adf-sites-dropdown-form-field{width:100%}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger{outline:none}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon:hover{color:var(--adf-theme-foreground-base-color-065)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger:focus .adf-dropdown-breadcrumb-icon{color:var(--theme-primary-color)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-item-chevron{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-content-list,.adf-content-node-selector-list{height:40vh;overflow:auto;border:1px solid var(--adf-theme-foreground-text-color-007);border-top:0;position:relative}.adf-content-node-selector-content-list-empty+adf-infinite-pagination,.adf-content-node-selector-list-empty+adf-infinite-pagination{position:absolute;bottom:0;width:100%}.adf-content-node-selector-content-list .adf-highlight,.adf-content-node-selector-list .adf-highlight{color:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list,.adf-content-node-selector-list .adf-datatable-list{border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-name-location-cell-location,.adf-content-node-selector-list .adf-datatable-list .adf-name-location-cell-location{display:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected{height:100%;width:100%}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected>svg,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell--image,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell--image{min-width:35px;width:35px;max-width:40px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell:nth-child(2),.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell:nth-child(2){flex:1 0 95px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell{flex:0 1 auto;min-width:1px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value{padding:0}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:40px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell{border-top:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell{border-bottom:none}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name{padding:5px 10px 2px}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DropdownSitesComponent, selector: "adf-sites-dropdown", inputs: ["hideMyFiles", "siteList", "value", "placeholder", "relations"], outputs: ["change", "error"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: ToolbarTitleComponent, selector: "adf-toolbar-title" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: DropdownBreadcrumbComponent, selector: "adf-dropdown-breadcrumb" }, { kind: "directive", type: NodeCounterDirective, selector: "[adf-node-counter]", inputs: ["adf-node-counter"] }, { kind: "component", type: DocumentListComponent, selector: "adf-document-list", inputs: ["includeFields", "where", "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", "columnsPresetKey", "setColumnsVisibility", "setColumnsWidths", "setColumnsOrder", "maxColumnsVisible", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "displayDragAndDropHint"], outputs: ["nodeClick", "nodeDblClick", "folderChange", "preview", "ready", "error", "nodeSelected", "filterSelection", "columnsWidthChanged", "columnsVisibilityChanged", "columnsOrderChanged", "selectedItemsCountChanged"] }, { kind: "directive", type: HighlightDirective, selector: "[adf-highlight]", inputs: ["adf-highlight-selector", "adf-highlight", "adf-highlight-class"] }, { kind: "component", type: DataColumnListComponent, selector: "data-columns" }, { kind: "component", type: DataColumnComponent, selector: "data-column", inputs: ["id", "key", "customData", "type", "format", "sortable", "draggable", "resizable", "isHidden", "title", "subtitle", "formatTooltip", "sr-title", "class", "copyContent", "editable", "focus", "sortingKey", "order", "currencyConfig", "decimalConfig", "dateConfig"] }, { kind: "component", type: NameLocationCellComponent, selector: "adf-name-location-cell", inputs: ["row"] }, { kind: "component", type: InfinitePaginationComponent, selector: "adf-infinite-pagination", inputs: ["target", "pageSize", "loading"], outputs: ["loadMore"] }, { kind: "directive", type: CustomEmptyContentTemplateDirective, selector: "adf-custom-empty-content-template, empty-folder-content" }, { kind: "component", type: SearchPanelComponent, selector: "adf-search-panel" }], encapsulation: i0.ViewEncapsulation.None }); }
536
- }
537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeSelectorPanelComponent, decorators: [{
538
- type: Component,
539
- args: [{ selector: 'adf-content-node-selector-panel', standalone: true, imports: [
540
- CommonModule,
541
- MatFormFieldModule,
542
- TranslatePipe,
543
- MatInputModule,
544
- ReactiveFormsModule,
545
- AutoFocusDirective,
546
- MatIconModule,
547
- DropdownSitesComponent,
548
- MatButtonModule,
549
- ToolbarTitleComponent,
550
- ToolbarComponent,
551
- DropdownBreadcrumbComponent,
552
- NodeCounterDirective,
553
- DocumentListComponent,
554
- HighlightDirective,
555
- DataColumnListComponent,
556
- DataColumnComponent,
557
- NameLocationCellComponent,
558
- InfinitePaginationComponent,
559
- CustomEmptyContentTemplateDirective,
560
- SearchPanelComponent
561
- ], encapsulation: ViewEncapsulation.None, host: { class: 'adf-content-node-selector-panel' }, providers: [SearchQueryBuilderService], template: "<div class=\"adf-content-node-selector-content\">\n <mat-form-field floatPlaceholder=\"never\"\n appearance=\"fill\"\n class=\"adf-content-node-selector-content-input\"\n subscriptSizing=\"dynamic\"\n *ngIf=\"showSearch\">\n <mat-label>{{ 'NODE_SELECTOR.SEARCH' | translate }}</mat-label>\n <input matInput\n id=\"searchInput\"\n [formControl]=\"searchInput\"\n type=\"text\"\n [value]=\"searchTerm\"\n adf-auto-focus\n data-automation-id=\"content-node-selector-search-input\">\n\n <mat-icon *ngIf=\"searchTerm.length > 0\"\n matSuffix (click)=\"clear()\"\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-clear\">clear\n </mat-icon>\n\n <mat-icon *ngIf=\"searchTerm.length === 0\"\n matSuffix\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-icon\">search\n </mat-icon>\n\n </mat-form-field>\n <adf-sites-dropdown\n *ngIf=\"showDropdownSiteList\"\n class=\"full-width\"\n (change)=\"siteChanged($event)\"\n [placeholder]=\"'NODE_SELECTOR.SELECT_LIBRARY'\"\n [hideMyFiles]=\"dropdownHideMyFiles\"\n [siteList]=\"dropdownSiteList\"\n [value]=\"startSiteGuid\"\n data-automation-id=\"content-node-selector-sites-combo\" />\n <button *ngIf=\"hasCustomModels()\"\n data-automation-id=\"adf-toggle-search-panel-button\"\n mat-icon-button\n (click)=\"toggleSearchPanel()\">\n <mat-icon>filter_list</mat-icon>\n {{ 'SEARCH.SEARCH_HEADER.TITLE' | translate }}\n </button>\n <div class=\"adf-content-node-selector-search-panel-container\">\n <adf-search-panel *ngIf=\"searchPanelExpanded\" />\n <div class=\"adf-content-node-selector-document-list-container\">\n <adf-toolbar>\n <adf-toolbar-title>\n <ng-container *ngIf=\"!showBreadcrumbs()\">\n <h2 class=\"adf-search-results-label\">{{ 'NODE_SELECTOR.SEARCH_RESULTS' | translate }}</h2>\n </ng-container>\n <adf-dropdown-breadcrumb *ngIf=\"showBreadcrumbs()\"\n class=\"adf-content-node-selector-content-breadcrumb\"\n (navigate)=\"clearSearch()\"\n [target]=\"documentList\"\n [rootId]=\"breadcrumbRootId\"\n [transform]=\"breadcrumbTransform\"\n [folderNode]=\"breadcrumbFolderNode\"\n [root]=\"breadcrumbFolderTitle\"\n data-automation-id=\"content-node-selector-content-breadcrumb\" />\n <ng-container *ngIf=\"showNodeCounter\" [adf-node-counter]=\"getSelectedCount()\" />\n </adf-toolbar-title>\n </adf-toolbar>\n\n <div\n class=\"adf-content-node-selector-content-list\"\n [class.adf-content-node-selector-content-list-searchLayout]=\"showingSearchResults\"\n data-automation-id=\"content-node-selector-content-list\">\n <adf-document-list\n #documentList\n [adf-highlight]=\"searchTerm\"\n adf-highlight-selector=\".adf-name-location-cell-name\"\n [showHeader]=\"showHeader\"\n [node]=\"nodePaging\"\n [preselectNodes]=\"preselectedNodes\"\n [maxItems]=\"pageSize\"\n [rowFilter]=\"_rowFilter\"\n [imageResolver]=\"imageResolver\"\n [currentFolderId]=\"folderIdToShow\"\n [selectionMode]=\"selectionMode\"\n [contextMenuActions]=\"false\"\n [contentActions]=\"false\"\n [allowDropFiles]=\"false\"\n [sorting]=\"sorting\"\n sortingMode=\"server\"\n [where]=\"where\"\n (folderChange)=\"onFolderChange($event)\"\n (ready)=\"onFolderLoaded($event)\"\n (nodeSelected)=\"onCurrentSelection($event)\"\n [class.adf-content-node-selector-content-list-empty]=\"emptyList\"\n data-automation-id=\"content-node-selector-document-list\">\n\n <adf-custom-empty-content-template>\n <div aria-live=\"polite\">{{ 'NODE_SELECTOR.NO_RESULTS' | translate }}</div>\n </adf-custom-empty-content-template>\n\n <data-columns>\n <data-column key=\"$thumbnail\" type=\"image\" />\n <data-column key=\"name\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.NAME\" class=\"adf-full-width adf-ellipsis-cell\">\n <ng-template let-context>\n <adf-name-location-cell [row]=\"context.row\" />\n </ng-template>\n </data-column>\n <data-column key=\"modifiedAt\" type=\"date\" title=\"ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON\" format=\"timeAgo\" class=\"adf-content-selector-modified-cell\" />\n <data-column key=\"createdByUser.displayName\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.CREATED_BY\" class=\"adf-content-selector-modifier-cell\" />\n <data-column key=\"visibility\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.STATUS\" class=\"adf-content-selector-visibility-cell\" />\n </data-columns>\n\n </adf-document-list>\n\n <adf-infinite-pagination\n [target]=\"target\"\n [loading]=\"loadingSearchResults\"\n (loadMore)=\"getNextPageOfSearch($event)\"\n data-automation-id=\"content-node-selector-search-pagination\">\n {{ 'ADF-DOCUMENT-LIST.LAYOUT.LOAD_MORE' | translate }}\n </adf-infinite-pagination>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h2.adf-search-results-label{flex:1;font-weight:600;font-size:var(--theme-body-1-font-size);font-style:normal;font-stretch:normal;line-height:1.43;letter-spacing:-.2px;color:var(--adf-theme-foreground-text-color-087)}.mdc-dialog .mat-mdc-dialog-surface:is(div){padding-bottom:0}.adf-content-node-selector-panel .adf-toolbar .adf-toolbar-container.adf-toolbar-container-row{max-height:48px;border-bottom-width:0;font-size:var(--theme-body-1-font-size);height:auto}.adf-content-node-selector-search-panel-container{display:flex}.adf-content-node-selector-document-list-container{margin-top:16px;width:100%}.adf-content-node-selector-content{padding-top:0}.adf-content-node-selector-content .mat-mdc-input-element:focus::placeholder{color:var(--theme-primary-color)}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex{align-items:center}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix{padding-bottom:0}.adf-content-node-selector-content .adf-sites-dropdown-form-field label.mat-mdc-floating-label{top:32px}.adf-content-node-selector-content .mat-mdc-form-field-subscript-wrapper{height:16px}.adf-content-node-selector-content-input{width:100%;margin-bottom:8px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon{color:var(--adf-theme-foreground-icon-color-054);cursor:pointer;padding:0 0 8px;width:1em;height:1em;font-size:20px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon:hover{color:var(--adf-theme-foreground-base-color)}.adf-content-node-selector-content-input .mat-mdc-form-field-subscript-wrapper{display:none}.adf-content-node-selector-content .adf-site-dropdown-container{display:block}.adf-content-node-selector-content .adf-site-dropdown-container .adf-sites-dropdown-form-field{width:100%}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger{outline:none}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon:hover{color:var(--adf-theme-foreground-base-color-065)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger:focus .adf-dropdown-breadcrumb-icon{color:var(--theme-primary-color)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-item-chevron{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-content-list,.adf-content-node-selector-list{height:40vh;overflow:auto;border:1px solid var(--adf-theme-foreground-text-color-007);border-top:0;position:relative}.adf-content-node-selector-content-list-empty+adf-infinite-pagination,.adf-content-node-selector-list-empty+adf-infinite-pagination{position:absolute;bottom:0;width:100%}.adf-content-node-selector-content-list .adf-highlight,.adf-content-node-selector-list .adf-highlight{color:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list,.adf-content-node-selector-list .adf-datatable-list{border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-name-location-cell-location,.adf-content-node-selector-list .adf-datatable-list .adf-name-location-cell-location{display:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected{height:100%;width:100%}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected>svg,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell--image,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell--image{min-width:35px;width:35px;max-width:40px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell:nth-child(2),.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell:nth-child(2){flex:1 0 95px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell{flex:0 1 auto;min-width:1px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value{padding:0}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:40px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell{border-top:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell{border-bottom:none}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name{padding:5px 10px 2px}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell{display:none}\n"] }]
562
- }], ctorParameters: () => [{ type: i1.CustomResourcesService }, { type: i2.SearchQueryBuilderService }, { type: i3.UserPreferencesService }, { type: i4.NodesApiService }, { type: i4.UploadService }, { type: i4.SitesService }, { type: i5.ContentNodeSelectorPanelService }], propDecorators: { restrictRootToCurrentFolderId: [{
563
- type: Input
564
- }], currentFolderId: [{
565
- type: Input,
566
- args: [{ required: true }]
567
- }], dropdownHideMyFiles: [{
568
- type: Input
569
- }], dropdownSiteList: [{
570
- type: Input
571
- }], where: [{
572
- type: Input
573
- }], rowFilter: [{
574
- type: Input
575
- }], excludeSiteContent: [{
576
- type: Input
577
- }], imageResolver: [{
578
- type: Input
579
- }], pageSize: [{
580
- type: Input
581
- }], selectionMode: [{
582
- type: Input
583
- }], isSelectionValid: [{
584
- type: Input
585
- }], breadcrumbTransform: [{
586
- type: Input
587
- }], showSearch: [{
588
- type: Input
589
- }], showDropdownSiteList: [{
590
- type: Input
591
- }], showFilesInResult: [{
592
- type: Input
593
- }], showNodeCounter: [{
594
- type: Input
595
- }], select: [{
596
- type: Output
597
- }], navigationChange: [{
598
- type: Output
599
- }], siteChange: [{
600
- type: Output
601
- }], showingSearch: [{
602
- type: Output
603
- }], currentFolder: [{
604
- type: Output
605
- }], folderLoaded: [{
606
- type: Output
607
- }], documentList: [{
608
- type: ViewChild,
609
- args: ['documentList', { static: true }]
610
- }], highlighter: [{
611
- type: ViewChild,
612
- args: [HighlightDirective, { static: true }]
613
- }], infinitePaginationComponent: [{
614
- type: ViewChild,
615
- args: [InfinitePaginationComponent, { static: true }]
616
- }] } });
617
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1ub2RlLXNlbGVjdG9yL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW5vZGUtc2VsZWN0b3IvY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUV2QixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQWtELGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBK0IsVUFBVSxFQUErQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0gsT0FBTyxFQUFFLHFC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QURaLEtBQUs7Z0JBUU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBVU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBYUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBV04sTUFBTTtzQkFETCxNQUFNO2dCQUtQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUtQLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxhQUFhO3NCQURaLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJM0MsV0FBVztzQkFEVixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFtQi9DLDJCQUEyQjtzQkFEMUIsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEYXRhQ29sdW1uQ29tcG9uZW50LFxuICAgIERhdGFDb2x1bW5MaXN0Q29tcG9uZW50LFxuICAgIERhdGFTb3J0aW5nLFxuICAgIEhpZ2hsaWdodERpcmVjdGl2ZSxcbiAgICBJbmZpbml0ZVBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgUGFnaW5hdGVkQ29tcG9uZW50LFxuICAgIFNob3dIZWFkZXJNb2RlLFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgVG9vbGJhclRpdGxlQ29tcG9uZW50LFxuICAgIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgVXNlclByZWZlcmVuY2VWYWx1ZXNcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wbGV0ZUV2ZW50LCBGaWxlVXBsb2FkRGVsZXRlRXZlbnQsIE5vZGVzQXBpU2VydmljZSwgU2l0ZXNTZXJ2aWNlLCBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5vZGUsIE5vZGVFbnRyeSwgTm9kZVBhZ2luZywgUGFnaW5hdGlvbiwgUmVxdWVzdFNjb3BlLCBTZWFyY2hSZXF1ZXN0LCBTaXRlRW50cnksIFNpdGVQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IERvY3VtZW50TGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3dGaWx0ZXIgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2RhdGEvcm93LWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBJbWFnZVJlc29sdmVyIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9kYXRhL2ltYWdlLXJlc29sdmVyLm1vZGVsJztcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L3NlcnZpY2VzL2N1c3RvbS1yZXNvdXJjZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZURhdGFSb3cgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2RhdGEvc2hhcmUtZGF0YS1yb3cubW9kZWwnO1xuaW1wb3J0IHsgTm9kZUVudHJ5RXZlbnQgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2NvbXBvbmVudHMvbm9kZS5ldmVudCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEF1dG9Gb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYXV0by1mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZUNvdW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vZGUtY291bnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRHJvcGRvd25TaXRlc0NvbXBvbmVudCB9IGZyb20gJy4uL3NpdGUtZHJvcGRvd24vc2l0ZXMtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBOYW1lTG9jYXRpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmFtZS1sb2NhdGlvbi1jZWxsL25hbWUtbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25CcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnJlYWRjcnVtYi9kcm9wZG93bi1icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlcnZpY2VzL3NlYXJjaC1xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtcGFuZWwvc2VhcmNoLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GdW5jdGlvbiA9IChlbnRyeTogTm9kZSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRWYWxpZGF0aW9uID0gKCkgPT4gdHJ1ZTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvRm9jdXNEaXJlY3RpdmUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIERyb3Bkb3duU2l0ZXNDb21wb25lbnQsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVG9vbGJhclRpdGxlQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgICAgICBEcm9wZG93bkJyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgICAgIE5vZGVDb3VudGVyRGlyZWN0aXZlLFxuICAgICAgICBEb2N1bWVudExpc3RDb21wb25lbnQsXG4gICAgICAgIEhpZ2hsaWdodERpcmVjdGl2ZSxcbiAgICAgICAgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQsXG4gICAgICAgIERhdGFDb2x1bW5Db21wb25lbnQsXG4gICAgICAgIE5hbWVMb2NhdGlvbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIFNlYXJjaFBhbmVsQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsJyB9LFxuICAgIHByb3ZpZGVyczogW1NlYXJjaFF1ZXJ5QnVpbGRlclNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIERFRkFVTFRfUEFHSU5BVElPTjogUGFnaW5hdGlvbiA9IG5ldyBQYWdpbmF0aW9uKHtcbiAgICAgICAgbWF4SXRlbXM6IDI1LFxuICAgICAgICBza2lwQ291bnQ6IDBcbiAgICB9KTtcblxuICAgIHJlYWRvbmx5IGRpc2FibGVBY3Rpb25Gb2xkZXJMaXN0ID0gWyctbXlzaXRlcy0nXTtcblxuICAgIHByaXZhdGUgc2hvd1NpdGVMaXN0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNob3dTZWFyY2hGaWVsZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzaG93Q291bnRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2VtcHR5TGlzdCA9IHRydWU7XG5cbiAgICAvKiogSWYgdHJ1ZSB3aWxsIHJlc3RyaWN0IHRoZSBzZWFyY2ggYW5kIGJyZWFkY3J1bWJzIHRvIHRoZSBjdXJyZW50Rm9sZGVySWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlc3RyaWN0Um9vdFRvQ3VycmVudEZvbGRlcklkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogTm9kZSBJRCBvZiB0aGUgZm9sZGVyIGN1cnJlbnRseSBsaXN0ZWQuICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBjdXJyZW50Rm9sZGVySWQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBcIk15IEZpbGVzXCIgb3B0aW9uIGFkZGVkIHRvIHRoZSBzaXRlIGxpc3QgYnkgZGVmYXVsdC5cbiAgICAgKiBTZWUgdGhlIFtTaXRlcyBEcm9wZG93biBjb21wb25lbnRdKHNpdGVzLWRyb3Bkb3duLmNvbXBvbmVudC5tZClcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duSGlkZU15RmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBzaXRlIGZvciBzaXRlIGRyb3Bkb3duLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBgc2l0ZUxpc3RgLlxuICAgICAqIHByb3BlcnR5IG9mIHRoZSBTaXRlcyBEcm9wZG93biBjb21wb25lbnQgKHNlZSBpdHMgZG9jIHBhZ2VcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkcm9wZG93blNpdGVMaXN0OiBTaXRlUGFnaW5nID0gbnVsbDtcblxuICAgIF9yb3dGaWx0ZXI6IFJvd0ZpbHRlciA9IGRlZmF1bHRWYWxpZGF0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tICp3aGVyZSogZmlsdGVyIGZ1bmN0aW9uLiBTZWUgdGhlXG4gICAgICogRG9jdW1lbnQgTGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHdoZXJlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gcm93IGZpbHRlciBmdW5jdGlvbi4gU2VlIHRoZVxuICAgICAqIFtSb3cgRmlsdGVyIE1vZGVsXShyb3ctZmlsdGVyLm1vZGVsLm1kKSBwYWdlXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93RmlsdGVyKHJvd0ZpbHRlcjogUm93RmlsdGVyKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlUm93RmlsdGVyKHJvd0ZpbHRlcik7XG4gICAgfVxuXG4gICAgZ2V0IHJvd0ZpbHRlcigpOiBSb3dGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RmlsdGVyO1xuICAgIH1cblxuICAgIF9leGNsdWRlU2l0ZUNvbnRlbnQ6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gbGlzdCBvZiBzaXRlIGNvbnRlbnQgY29tcG9uZW50SWRzLlxuICAgICAqIFVzZWQgdG8gZmlsdGVyIG91dCB0aGUgY29ycmVzcG9uZGluZyBpdGVtcyBmcm9tIHRoZSBkaXNwbGF5ZWQgbm9kZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBleGNsdWRlU2l0ZUNvbnRlbnQoZXhjbHVkZVNpdGVDb250ZW50OiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQgPSBleGNsdWRlU2l0ZUNvbnRlbnQ7XG4gICAgICAgIHRoaXMuY3JlYXRlUm93RmlsdGVyKHRoaXMuX3Jvd0ZpbHRlcik7XG4gICAgfVxuXG4gICAgZ2V0IGV4Y2x1ZGVTaXRlQ29udGVudCgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGltYWdlIHJlc29sdmVyIGZ1bmN0aW9uLiBTZWUgdGhlXG4gICAgICogW0ltYWdlIFJlc29sdmVyIE1vZGVsXShpbWFnZS1yZXNvbHZlci5tb2RlbC5tZCkgcGFnZVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW1hZ2VSZXNvbHZlcjogSW1hZ2VSZXNvbHZlciA9IG51bGw7XG5cbiAgICAvKiogTnVtYmVyIG9mIGl0ZW1zIHNob3duIHBlciBwYWdlIGluIHRoZSBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNpemU6IG51bWJlciA9IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLm1heEl0ZW1zO1xuXG4gICAgLyoqIERlZmluZSB0aGUgc2VsZWN0aW9uIG1vZGUgZm9yIGRvY3VtZW50IGxpc3QuIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmUgc2luZ2xlIG9yIG11bHRpcGxlICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGVjaWRlIGlmIHRoZSBzZWxlY3RlZCBub2RlIGhhcyBwZXJtaXNzaW9uIHRvIGJlIHNlbGVjdGVkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRydWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1NlbGVjdGlvblZhbGlkOiBWYWxpZGF0aW9uRnVuY3Rpb24gPSBkZWZhdWx0VmFsaWRhdGlvbjtcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybWF0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGUgY2hvc2VuL2ZvbGRlciBub2RlIGJlZm9yZSBidWlsZGluZyB0aGVcbiAgICAgKiBicmVhZGNydW1iIFVJLiBDYW4gYmUgdXNlZnVsIHdoZW4gY3VzdG9tIGZvcm1hdHRpbmcgaXMgbmVlZGVkIGZvciB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKiBZb3UgY2FuIGNoYW5nZSB0aGUgcGF0aCBlbGVtZW50cyBmcm9tIHRoZSBub2RlIHRoYXQgYXJlIHVzZWQgdG8gYnVpbGQgdGhlXG4gICAgICogYnJlYWRjcnVtYiB1c2luZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnJlYWRjcnVtYlRyYW5zZm9ybTogKG5vZGUpID0+IGFueTtcblxuICAgIC8qKiBUb2dnbGUgc2VhcmNoIGlucHV0IHJlbmRlcmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dTZWFyY2godmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2hvd1NlYXJjaCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1NlYXJjaEZpZWxkO1xuICAgIH1cblxuICAgIC8qKiBUb2dnbGUgc2l0ZXMgbGlzdCBkcm9wZG93biByZW5kZXJpbmcgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93RHJvcGRvd25TaXRlTGlzdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zaG93U2l0ZUxpc3QgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzaG93RHJvcGRvd25TaXRlTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1NpdGVMaXN0O1xuICAgIH1cblxuICAgIC8qKiBTaG93cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgaW4gdGhlIHNlYXJjaCByZXN1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93RmlsZXNJblJlc3VsdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2hvd0ZpbGVzUXVlcnkgPSBgVFlQRTonY206Zm9sZGVyJyR7dmFsdWUgPyBgIE9SIFRZUEU6J2NtOmNvbnRlbnQnYCA6ICcnfWA7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuYWRkRmlsdGVyUXVlcnkoc2hvd0ZpbGVzUXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNob3dzIHRoZSBub2RlIGNvdW50ZXIgaW4gdGhlIGJyZWFkY3J1bWIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93Tm9kZUNvdW50ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zaG93Q291bnRlciA9IHZhbHVlID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBzaG93Tm9kZUNvdW50ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dDb3VudGVyO1xuICAgIH1cblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgaGFzIGNob3NlbiBhbiBpdGVtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZVtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5hdmlnYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRyeUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0IHNpdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHNlYXJjaCBpcyBydW5uaW5nLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dpbmdTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGN1cnJlbnQgZm9sZGVyIGxvYWRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjdXJyZW50Rm9sZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBmb2xkZXIgbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvbGRlckxvYWRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RvY3VtZW50TGlzdCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgZG9jdW1lbnRMaXN0OiBEb2N1bWVudExpc3RDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKEhpZ2hsaWdodERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBoaWdobGlnaHRlcjogSGlnaGxpZ2h0RGlyZWN0aXZlO1xuXG4gICAgbm9kZVBhZ2luZzogTm9kZVBhZ2luZyB8IG51bGwgPSBudWxsO1xuICAgIHNpdGVJZDogbnVsbCB8IHN0cmluZztcbiAgICBicmVhZGNydW1iUm9vdElkOiBudWxsIHwgc3RyaW5nO1xuICAgIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICAgIHNob3dpbmdTZWFyY2hSZXN1bHRzOiBib29sZWFuID0gZmFsc2U7XG4gICAgbG9hZGluZ1NlYXJjaFJlc3VsdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpbkRpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIF9jaG9zZW5Ob2RlOiBOb2RlW10gPSBudWxsO1xuICAgIHNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uOiBOb2RlW10gPSBudWxsO1xuICAgIGZvbGRlcklkVG9TaG93OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBicmVhZGNydW1iRm9sZGVyVGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHN0YXJ0U2l0ZUd1aWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGhhc1ZhbGlkUXVlcnk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuTmV2ZXI7XG5cbiAgICBAVmlld0NoaWxkKEluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBpbmZpbml0ZVBhZ2luYXRpb25Db21wb25lbnQ6IEluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudDtcblxuICAgIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG4gICAgZGVib3VuY2VTZWFyY2g6IG51bWJlciA9IDIwMDtcbiAgICBzZWFyY2hJbnB1dDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gICAgdGFyZ2V0OiBQYWdpbmF0ZWRDb21wb25lbnQ7XG4gICAgcHJlc2VsZWN0ZWROb2RlczogTm9kZUVudHJ5W10gPSBbXTtcbiAgICBjdXJyZW50VXBsb2FkQmF0Y2g6IE5vZGVFbnRyeVtdID0gW107XG5cbiAgICBzb3J0aW5nOiBzdHJpbmdbXSB8IERhdGFTb3J0aW5nID0gWydjcmVhdGVkQXQnLCAnZGVzYyddO1xuXG4gICAgc2VhcmNoUGFuZWxFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY3VzdG9tUmVzb3VyY2VzU2VydmljZTogQ3VzdG9tUmVzb3VyY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBxdWVyeUJ1aWxkZXJTZXJ2aWNlOiBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZXNBcGlTZXJ2aWNlOiBOb2Rlc0FwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzaXRlc1NlcnZpY2U6IFNpdGVzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlOiBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgc2V0IGNob3Nlbk5vZGUodmFsdWU6IE5vZGVbXSkge1xuICAgICAgICB0aGlzLl9jaG9zZW5Ob2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBjaG9zZW5Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hvc2VuTm9kZTtcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlMaXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW1wdHlMaXN0O1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hvc2VuTm9kZT8ubGVuZ3RoIHx8IDA7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVNlYXJjaCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHNlYXJjaFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51c2VyUXVlcnkgPSBzZWFyY2hWYWx1ZS5sZW5ndGggPiAwID8gYCR7c2VhcmNoVmFsdWV9KmAgOiBzZWFyY2hWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXBkYXRlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXBkYXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNlYXJjaFJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWxpZFF1ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVEaWFsb2dGb3JOZXdTZWFyY2goc2VhcmNoUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmV4ZWN1dGUoZmFsc2UsIHNlYXJjaFJlcXVlc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbGlkUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9sZGVyVG9TaG93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuZXhlY3V0ZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChyZXN1bHRzOiBOb2RlUGFnaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWYWxpZFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoUmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlBhZ2luYXRpb25TaXplKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwYWdTaXplKSA9PiAodGhpcy5wYWdlU2l6ZSA9IHBhZ1NpemUpKTtcblxuICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuZG9jdW1lbnRMaXN0O1xuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gdGhpcy5jdXJyZW50Rm9sZGVySWQ7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdHJpY3RSb290VG9DdXJyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJSb290SWQgPSB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpdGVJZCA9IHRoaXMuY3VycmVudEZvbGRlcklkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YXJ0U2l0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icmVhZGNydW1iVHJhbnNmb3JtID0gdGhpcy5icmVhZGNydW1iVHJhbnNmb3JtID8gdGhpcy5icmVhZGNydW1iVHJhbnNmb3JtIDogbnVsbDtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGlvblZhbGlkID0gdGhpcy5pc1NlbGVjdGlvblZhbGlkID8gdGhpcy5pc1NlbGVjdGlvblZhbGlkIDogZGVmYXVsdFZhbGlkYXRpb247XG4gICAgICAgIHRoaXMub25GaWxlVXBsb2FkRXZlbnQoKTtcbiAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWREZWxldGVkRXZlbnQoKTtcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hTY29wZVRvTm9kZXMoKTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC4kZm9sZGVyTm9kZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGN1cnJlbnROb2RlOiBOb2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXIuZW1pdChjdXJyZW50Tm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlYXJjaFBhbmVsKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsRXhwYW5kZWQgPSAhdGhpcy5zZWFyY2hQYW5lbEV4cGFuZGVkO1xuICAgIH1cblxuICAgIGhhc0N1c3RvbU1vZGVscygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZT8uY3VzdG9tTW9kZWxzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25GaWxlVXBsb2FkRXZlbnQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkQ29tcGxldGVcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbGVVcGxvYWRFdmVudDogRmlsZVVwbG9hZENvbXBsZXRlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaC5wdXNoKGZpbGVVcGxvYWRFdmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkU2VydmljZS5pc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0ZWROb2RlcyA9IHRoaXMuZ2V0UHJlc2VsZWN0Tm9kZXNCYXNlZE9uU2VsZWN0aW9uTW9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC5yZWxvYWRXaXRob3V0UmVzZXR0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZpbGVVcGxvYWREZWxldGVkRXZlbnQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRGVsZXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGRlbGV0ZWRGaWxlRXZlbnQ6IEZpbGVVcGxvYWREZWxldGVFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3QudW5zZWxlY3RSb3dGcm9tTm9kZUlkKGRlbGV0ZWRGaWxlRXZlbnQuZmlsZS5kYXRhLmVudHJ5LmlkKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdGFydFNpdGUoKSB7XG4gICAgICAgIHRoaXMubm9kZXNBcGlTZXJ2aWNlLmdldE5vZGUodGhpcy5jdXJyZW50Rm9sZGVySWQpLnN1YnNjcmliZSgoc3RhcnROb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaXRlR3VpZCA9IHRoaXMuc2l0ZXNTZXJ2aWNlLmdldFNpdGVOYW1lRnJvbU5vZGVQYXRoKHN0YXJ0Tm9kZUVudHJ5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0U2l0ZUd1aWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpdGVzU2VydmljZS5nZXRTaXRlKHRoaXMuc3RhcnRTaXRlR3VpZCkuc3Vic2NyaWJlKChzdGFydFNpdGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRTaXRlRW50cnkgaW5zdGFuY2VvZiBTaXRlRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2l0ZUNoYW5nZS5lbWl0KHN0YXJ0U2l0ZUVudHJ5LmVudHJ5LnRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJvd0ZpbHRlcihmaWx0ZXI/OiBSb3dGaWx0ZXIpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlciA9ICgpID0+IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcm93RmlsdGVyID0gKHZhbHVlOiBTaGFyZURhdGFSb3csIGluZGV4OiBudW1iZXIsIGFycmF5OiBTaGFyZURhdGFSb3dbXSkgPT5cbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgaW5kZXgsIGFycmF5KSAmJiAhdGhpcy5pc0V4Y2x1ZGVkU2l0ZUNvbnRlbnQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNFeGNsdWRlZFNpdGVDb250ZW50KHJvdzogU2hhcmVEYXRhUm93KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcm93Lm5vZGUuZW50cnk7XG4gICAgICAgIGlmICh0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQ/Lmxlbmd0aCAmJiBlbnRyeT8ucHJvcGVydGllcz8uWydzdDpjb21wb25lbnRJZCddKSB7XG4gICAgICAgICAgICBjb25zdCBleGNsdWRlZEl0ZW0gPSB0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQuZmluZCgoaWQ6IHN0cmluZykgPT4gZW50cnkucHJvcGVydGllc1snc3Q6Y29tcG9uZW50SWQnXSA9PT0gaWQpO1xuICAgICAgICAgICAgcmV0dXJuICEhZXhjbHVkZWRJdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzaXRlIGF0dHJpYnV0ZSBhbmQgc3RhcnRzIGEgbmV3IHNlYXJjaFxuICAgICAqXG4gICAgICogQHBhcmFtIGNob3NlblNpdGUgU2l0ZUVudHJ5IHRvIHNlYXJjaCB3aXRoaW5cbiAgICAgKi9cbiAgICBzaXRlQ2hhbmdlZChjaG9zZW5TaXRlOiBTaXRlRW50cnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaXRlSWQgPSBjaG9zZW5TaXRlLmVudHJ5Lmd1aWQ7XG4gICAgICAgIHRoaXMuc2V0VGl0bGVJZkN1c3RvbVNpdGUoY2hvc2VuU2l0ZSk7XG4gICAgICAgIHRoaXMuc2l0ZUNoYW5nZS5lbWl0KGNob3NlblNpdGUuZW50cnkudGl0bGUpO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGN1cnJlbnQgYnJlYWRjcnVtYiBmb2xkZXIgbm9kZVxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIGFjdHVhbGx5IHNlbGVjdGVkfGVudGVyZWQgZm9sZGVyIG5vZGUgb3IgbnVsbCBpbiBjYXNlIG9mIHNlYXJjaGluZyBmb3IgdGhlIGJyZWFkY3J1bWJcbiAgICAgKi9cbiAgICBnZXQgYnJlYWRjcnVtYkZvbGRlck5vZGUoKTogTm9kZSB8IG51bGwge1xuICAgICAgICBsZXQgZm9sZGVyTm9kZTogTm9kZTtcblxuICAgICAgICBpZiAodGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyAmJiB0aGlzLnNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvbGRlck5vZGUgPSB0aGlzLnNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9sZGVyTm9kZSA9IHRoaXMuZG9jdW1lbnRMaXN0LmZvbGRlck5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9sZGVyTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyB0aGUgZGlhbG9nIGZvciBhIG5ldyBzZWFyY2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWFyY2hSZXF1ZXN0IHJlcXVlc3Qgb3B0aW9uc1xuICAgICAqL1xuICAgIHByZXBhcmVEaWFsb2dGb3JOZXdTZWFyY2goc2VhcmNoUmVxdWVzdDogU2VhcmNoUmVxdWVzdCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHNlYXJjaFJlcXVlc3QgPyBudWxsIDogdGhpcy5kb2N1bWVudExpc3Q7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZVBhZ2luYXRpb25Db21wb25lbnQucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmVzZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkZENvcnJlc3BvbmRpbmdOb2RlSWRzUXVlcnkoKTtcbiAgICAgICAgdGhpcy5yZXNldENob3Nlbk5vZGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgc2VhcmNoIGlucHV0IGFuZCByZXNldCB0byBsYXN0IGZvbGRlciBub2RlIGluIHdoaWNoIHNlYXJjaCB3YXMgcGVyZm9ybWVkXG4gICAgICovXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXNlclF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGZvbGRlciB0byBiZSBzaG93biB3aXRoIHRoZSBzaXRlIHNlbGVjdGlvbiBvciB0aGUgaW5pdGlhbCBsYW5kaW5nIGZvbGRlclxuICAgICAqL1xuICAgIHJlc2V0Rm9sZGVyVG9TaG93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gdGhpcy5zaXRlSWQgfHwgdGhpcy5jdXJyZW50Rm9sZGVySWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgdGhlIHNlYXJjaCBpbnB1dCBhbmQgc2VhcmNoIHJlbGF0ZWQgZGF0YVxuICAgICAqL1xuICAgIGNsZWFyU2VhcmNoKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICAgICAgdGhpcy5ub2RlUGFnaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5yZXNldENob3Nlbk5vZGUoKTtcbiAgICAgICAgdGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2guZW1pdCh0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvcnJlc3BvbmRpbmdOb2RlSWRzUXVlcnkoKSB7XG4gICAgICAgIGxldCBleHRyYVBhcmVudEZpbHRlcmluZyA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJlc291cmNlc1NlcnZpY2UuaGFzQ29ycmVzcG9uZGluZ05vZGVJZHModGhpcy5zaXRlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbVJlc291cmNlc1NlcnZpY2UuZ2V0Q29ycmVzcG9uZGluZ05vZGVJZHModGhpcy5zaXRlSWQpLnN1YnNjcmliZSgobm9kZUlkcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUlkc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaWQpID0+IGlkICE9PSB0aGlzLnNpdGVJZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChleHRyYUlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFQYXJlbnRGaWx0ZXJpbmcgKz0gYCBPUiBBTkNFU1RPUjond29ya3NwYWNlOi8vU3BhY2VzU3RvcmUvJHtleHRyYUlkfSdgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEZpbHRlcmluZyA9IHRoaXMuc2l0ZUlkID8gYEFOQ0VTVE9SOid3b3Jrc3BhY2U6Ly9TcGFjZXNTdG9yZS8ke3RoaXMuc2l0ZUlkfScke2V4dHJhUGFyZW50RmlsdGVyaW5nfWAgOiAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuYWRkRmlsdGVyUXVlcnkocGFyZW50RmlsdGVyaW5nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RmlsdGVyaW5nID0gdGhpcy5zaXRlSWQgPyBgQU5DRVNUT1I6J3dvcmtzcGFjZTovL1NwYWNlc1N0b3JlLyR7dGhpcy5zaXRlSWR9J2AgOiAnJztcbiAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5hZGRGaWx0ZXJRdWVyeShwYXJlbnRGaWx0ZXJpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWFyY2hTY29wZVRvTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlOiBSZXF1ZXN0U2NvcGUgPSB7XG4gICAgICAgICAgICBsb2NhdGlvbnM6ICdub2RlcydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnNldFNjb3BlKHNjb3BlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHRzIFNlYXJjaCByZXN1bHRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG93U2VhcmNoUmVzdWx0cyhyZXN1bHRzOiBOb2RlUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaC5lbWl0KHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMpO1xuXG4gICAgICAgIHRoaXMubm9kZVBhZ2luZyA9IHJlc3VsdHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBzaG93aW5nU2VhcmNoUmVzdWx0cyBzdGF0ZSB0byBiZSBhYmxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzZWFyY2ggcmVzdWx0cyBvciBmb2xkZXIgcmVzdWx0c1xuICAgICAqXG4gICAgICogQHBhcmFtICRldmVudCBub2RlIGV2ZW50XG4gICAgICovXG4gICAgb25Gb2xkZXJDaGFuZ2UoJGV2ZW50OiBOb2RlRW50cnlFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gJGV2ZW50LnZhbHVlLmlkO1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyVGl0bGUgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25DaGFuZ2UuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIHNldCB0aGUgY3VycmVudGx5IGxvYWRlZCBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVBhZ2luZyBwYWdpbmF0aW9uIG1vZGVsXG4gICAgICovXG4gICAgb25Gb2xkZXJMb2FkZWQobm9kZVBhZ2luZzogTm9kZVBhZ2luZyk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2VtcHR5TGlzdCA9ICF0aGlzLmRvY3VtZW50TGlzdC5kYXRhLmdldFJvd3MoKS5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25BZnRlclJvd0ZpbHRlcihub2RlUGFnaW5nKTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGVtcHROb2RlU2VsZWN0aW9uKHRoaXMuZG9jdW1lbnRMaXN0LmZvbGRlck5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9sZGVyTG9hZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHBhZ2luYXRpb24uaGFzTW9yZUl0ZW1zIHRvIGZhbHNlIGFmdGVyIGZpbHRlcmluZyBvbmx5IGZvbGRlcnMgZHVyaW5nICdDT1BZJyBhbmQgJ01PVkUnIGFjdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVQYWdpbmcgcGFnaW5hdGlvbiBtb2RlbFxuICAgICAqL1xuICAgIHVwZGF0ZVBhZ2luYXRpb25BZnRlclJvd0ZpbHRlcihub2RlUGFnaW5nOiBOb2RlUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGlzdC5kYXRhLmdldFJvd3MoKS5sZW5ndGggPCBub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbi5tYXhJdGVtcykge1xuICAgICAgICAgICAgbm9kZVBhZ2luZy5saXN0LnBhZ2luYXRpb24uaGFzTW9yZUl0ZW1zID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYnJlYWRjcnVtYiBoYXMgdG8gYmUgc2hvd24gb3Igbm90XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmVlZHMgdG8gc2hvdyB0aGUgYnJlYWRjcnVtYiwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBzaG93QnJlYWRjcnVtYnMoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyB8fCB0aGlzLmNob3Nlbk5vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIG5leHQgYmF0Y2ggb2Ygc2VhcmNoIHJlc3VsdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYWdpbmF0aW9uIFBhZ2luYXRpb24gb2JqZWN0XG4gICAgICovXG4gICAgZ2V0TmV4dFBhZ2VPZlNlYXJjaChwYWdpbmF0aW9uOiBQYWdpbmF0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UucGFnaW5nLm1heEl0ZW1zID0gcGFnaW5hdGlvbi5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnBhZ2luZy5za2lwQ291bnQgPSBwYWdpbmF0aW9uLnNraXBDb3VudDtcblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXJtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgbm9kZSBhcyBjaG9zZW4gaWYgaXQgaGFzIHRoZSByaWdodCBwZXJtaXNzaW9uLCBjbGVhcnMgdGhlIHNlbGVjdGlvbiBvdGhlcndpc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyeSBub2RlIGVudHJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSBhdHRlbXB0Tm9kZVNlbGVjdGlvbihlbnRyeTogTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAoZW50cnkgJiYgdGhpcy5pc1NlbGVjdGlvblZhbGlkKGVudHJ5KSAmJiAhdGhpcy5pc0FjdGlvbkRpc2FibGVkRm9yRm9sZGVyKHRoaXMuZG9jdW1lbnRMaXN0LmN1cnJlbnRGb2xkZXJJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuTm9kZSA9IFtlbnRyeV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uRGlzYWJsZWRGb3JGb2xkZXIoZm9sZGVySWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlQWN0aW9uRm9sZGVyTGlzdC5pbmNsdWRlcyhmb2xkZXJJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBjaG9zZW4gbm9kZVxuICAgICAqL1xuICAgIHJlc2V0Q2hvc2VuTm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaG9zZW5Ob2RlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBmaWx0ZXJzIGFuZCBlbWl0IHRoZSBzZWxlY3Rpb24gY29taW5nIGZyb20gdGhlIGRvY3VtZW50IGxpc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2Rlc0VudHJpZXMgc2VsZWN0ZWQgbm9kZXNcbiAgICAgKi9cbiAgICBvbkN1cnJlbnRTZWxlY3Rpb24obm9kZXNFbnRyaWVzOiBOb2RlRW50cnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZE5vZGVzRW50aXR5ID0gbm9kZXNFbnRyaWVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5pc1NlbGVjdGlvblZhbGlkKG5vZGUuZW50cnkpKTtcbiAgICAgICAgdGhpcy5jaG9zZW5Ob2RlID0gdmFsaWROb2Rlc0VudGl0eS5tYXAoKG5vZGUpID0+IG5vZGUuZW50cnkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uID0gbm9kZXNFbnRyaWVzLm1hcCgobm9kZSkgPT4gbm9kZS5lbnRyeSk7XG4gICAgfVxuXG4gICAgc2V0VGl0bGVJZkN1c3RvbVNpdGUoc2l0ZTogU2l0ZUVudHJ5KSB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJlc291cmNlc1NlcnZpY2UuaXNDdXN0b21Tb3VyY2Uoc2l0ZS5lbnRyeS5ndWlkKSkge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyVGl0bGUgPSBzaXRlLmVudHJ5LnRpdGxlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRMaXN0LmZvbGRlck5vZGUucGF0aC5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkZvbGRlck5vZGUubmFtZSA9IHNpdGUuZW50cnkudGl0bGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZS5wYXRoLmVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkZvbGRlclRpdGxlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1ByZXNlbGVjdE5vZGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3RlZE5vZGVzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0Tm9kZXNCYXNlZE9uU2VsZWN0aW9uTW9kZSgpOiBOb2RlRW50cnlbXSB7XG4gICAgICAgIGxldCBzZWxlY3RlZE5vZGVzOiBOb2RlRW50cnlbXSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSBbdGhpcy5jdXJyZW50VXBsb2FkQmF0Y2hbdGhpcy5jdXJyZW50VXBsb2FkQmF0Y2gubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE5vZGVzID0gdGhpcy5jdXJyZW50VXBsb2FkQmF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWROb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnBhZ2luZyA9IHtcbiAgICAgICAgICAgIG1heEl0ZW1zOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICAgICAgc2tpcENvdW50OiB0aGlzLkRFRkFVTFRfUEFHSU5BVElPTi5za2lwQ291bnRcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0UGxhY2Vob2xkZXI9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgJ05PREVfU0VMRUNUT1IuU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgIGlkPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgIGFkZi1hdXRvLWZvY3VzXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3Itc2VhcmNoLWlucHV0XCI+XG5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGVybS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeCAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1pbnB1dC1pY29uXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtY2xlYXJcIj5jbGVhclxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNlYXJjaFRlcm0ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtaW5wdXQtaWNvblwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3Itc2VhcmNoLWljb25cIj5zZWFyY2hcbiAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGFkZi1zaXRlcy1kcm9wZG93blxuICAgICAgICAqbmdJZj1cInNob3dEcm9wZG93blNpdGVMaXN0XCJcbiAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoXCJcbiAgICAgICAgKGNoYW5nZSk9XCJzaXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidOT0RFX1NFTEVDVE9SLlNFTEVDVF9MSUJSQVJZJ1wiXG4gICAgICAgIFtoaWRlTXlGaWxlc109XCJkcm9wZG93bkhpZGVNeUZpbGVzXCJcbiAgICAgICAgW3NpdGVMaXN0XT1cImRyb3Bkb3duU2l0ZUxpc3RcIlxuICAgICAgICBbdmFsdWVdPVwic3RhcnRTaXRlR3VpZFwiXG4gICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zaXRlcy1jb21ib1wiIC8+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImhhc0N1c3RvbU1vZGVscygpXCJcbiAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRvZ2dsZS1zZWFyY2gtcGFuZWwtYnV0dG9uXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hQYW5lbCgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5maWx0ZXJfbGlzdDwvbWF0LWljb24+XG4gICAgICAgIHt7ICdTRUFSQ0guU0VBUkNIX0hFQURFUi5USVRMRScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtcGFuZWwtY29udGFpbmVyXCI+XG4gICAgICAgIDxhZGYtc2VhcmNoLXBhbmVsICpuZ0lmPVwic2VhcmNoUGFuZWxFeHBhbmRlZFwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWRvY3VtZW50LWxpc3QtY29udGFpbmVyXCI+XG4gICAgPGFkZi10b29sYmFyPlxuICAgICAgICA8YWRmLXRvb2xiYXItdGl0bGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dCcmVhZGNydW1icygpXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiYWRmLXNlYXJjaC1yZXN1bHRzLWxhYmVsXCI+e3sgJ05PREVfU0VMRUNUT1IuU0VBUkNIX1JFU1VMVFMnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGFkZi1kcm9wZG93bi1icmVhZGNydW1iICpuZ0lmPVwic2hvd0JyZWFkY3J1bWJzKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWJyZWFkY3J1bWJcIlxuICAgICAgICAgICAgICAgIChuYXZpZ2F0ZSk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImRvY3VtZW50TGlzdFwiXG4gICAgICAgICAgICAgICAgW3Jvb3RJZF09XCJicmVhZGNydW1iUm9vdElkXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNmb3JtXT1cImJyZWFkY3J1bWJUcmFuc2Zvcm1cIlxuICAgICAgICAgICAgICAgIFtmb2xkZXJOb2RlXT1cImJyZWFkY3J1bWJGb2xkZXJOb2RlXCJcbiAgICAgICAgICAgICAgICBbcm9vdF09XCJicmVhZGNydW1iRm9sZGVyVGl0bGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWJyZWFkY3J1bWJcIiAvPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dOb2RlQ291bnRlclwiIFthZGYtbm9kZS1jb3VudGVyXT1cImdldFNlbGVjdGVkQ291bnQoKVwiIC8+XG4gICAgICAgIDwvYWRmLXRvb2xiYXItdGl0bGU+XG4gICAgPC9hZGYtdG9vbGJhcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtbGlzdFwiXG4gICAgICAgIFtjbGFzcy5hZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtbGlzdC1zZWFyY2hMYXlvdXRdPVwic2hvd2luZ1NlYXJjaFJlc3VsdHNcIlxuICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0XCI+XG4gICAgICAgIDxhZGYtZG9jdW1lbnQtbGlzdFxuICAgICAgICAgICAgI2RvY3VtZW50TGlzdFxuICAgICAgICAgICAgW2FkZi1oaWdobGlnaHRdPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICBhZGYtaGlnaGxpZ2h0LXNlbGVjdG9yPVwiLmFkZi1uYW1lLWxvY2F0aW9uLWNlbGwtbmFtZVwiXG4gICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJzaG93SGVhZGVyXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVQYWdpbmdcIlxuICAgICAgICAgICAgW3ByZXNlbGVjdE5vZGVzXT1cInByZXNlbGVjdGVkTm9kZXNcIlxuICAgICAgICAgICAgW21heEl0ZW1zXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgIFtyb3dGaWx0ZXJdPVwiX3Jvd0ZpbHRlclwiXG4gICAgICAgICAgICBbaW1hZ2VSZXNvbHZlcl09XCJpbWFnZVJlc29sdmVyXCJcbiAgICAgICAgICAgIFtjdXJyZW50Rm9sZGVySWRdPVwiZm9sZGVySWRUb1Nob3dcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICBbY29udGV4dE1lbnVBY3Rpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtjb250ZW50QWN0aW9uc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbYWxsb3dEcm9wRmlsZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3NvcnRpbmddPVwic29ydGluZ1wiXG4gICAgICAgICAgICBzb3J0aW5nTW9kZT1cInNlcnZlclwiXG4gICAgICAgICAgICBbd2hlcmVdPVwid2hlcmVcIlxuICAgICAgICAgICAgKGZvbGRlckNoYW5nZSk9XCJvbkZvbGRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChyZWFkeSk9XCJvbkZvbGRlckxvYWRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChub2RlU2VsZWN0ZWQpPVwib25DdXJyZW50U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzLmFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0LWVtcHR5XT1cImVtcHR5TGlzdFwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3ItZG9jdW1lbnQtbGlzdFwiPlxuXG4gICAgICAgICAgICA8YWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgYXJpYS1saXZlPVwicG9saXRlXCI+e3sgJ05PREVfU0VMRUNUT1IuTk9fUkVTVUxUUycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8ZGF0YS1jb2x1bW5zPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCIkdGh1bWJuYWlsXCIgdHlwZT1cImltYWdlXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwibmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuTkFNRVwiIGNsYXNzPVwiYWRmLWZ1bGwtd2lkdGggYWRmLWVsbGlwc2lzLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1uYW1lLWxvY2F0aW9uLWNlbGwgW3Jvd109XCJjb250ZXh0LnJvd1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kYXRhLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwibW9kaWZpZWRBdFwiIHR5cGU9XCJkYXRlXCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuTU9ESUZJRURfT05cIiBmb3JtYXQ9XCJ0aW1lQWdvXCIgY2xhc3M9XCJhZGYtY29udGVudC1zZWxlY3Rvci1tb2RpZmllZC1jZWxsXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwiY3JlYXRlZEJ5VXNlci5kaXNwbGF5TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuQ1JFQVRFRF9CWVwiIGNsYXNzPVwiYWRmLWNvbnRlbnQtc2VsZWN0b3ItbW9kaWZpZXItY2VsbFwiIC8+XG4gICAgICAgICAgICAgICAgPGRhdGEtY29sdW1uIGtleT1cInZpc2liaWxpdHlcIiB0eXBlPVwidGV4dFwiIHRpdGxlPVwiQURGLURPQ1VNRU5ULUxJU1QuTEFZT1VULlNUQVRVU1wiIGNsYXNzPVwiYWRmLWNvbnRlbnQtc2VsZWN0b3ItdmlzaWJpbGl0eS1jZWxsXCIgLz5cbiAgICAgICAgICAgIDwvZGF0YS1jb2x1bW5zPlxuXG4gICAgICAgIDwvYWRmLWRvY3VtZW50LWxpc3Q+XG5cbiAgICAgICAgPGFkZi1pbmZpbml0ZS1wYWdpbmF0aW9uXG4gICAgICAgICAgICBbdGFyZ2V0XT1cInRhcmdldFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU2VhcmNoUmVzdWx0c1wiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwiZ2V0TmV4dFBhZ2VPZlNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtcGFnaW5hdGlvblwiPlxuICAgICAgICAgICAge3sgJ0FERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5MT0FEX01PUkUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYWRmLWluZmluaXRlLXBhZ2luYXRpb24+XG4gICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=