@alfresco/adf-content-services 8.1.0-15902121227 → 8.1.0-15972188736

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 (408) hide show
  1. package/fesm2022/adf-content-services.mjs +808 -829
  2. package/fesm2022/adf-content-services.mjs.map +1 -1
  3. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  4. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  5. package/package.json +4 -6
  6. package/esm2022/adf-content-services.mjs +0 -5
  7. package/esm2022/lib/agent/index.mjs +0 -18
  8. package/esm2022/lib/agent/public-api.mjs +0 -18
  9. package/esm2022/lib/agent/services/agent.service.mjs +0 -60
  10. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +0 -27
  11. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +0 -42
  12. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +0 -77
  13. package/esm2022/lib/api-factories/index.mjs +0 -18
  14. package/esm2022/lib/api-factories/public-api.mjs +0 -19
  15. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +0 -18
  16. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +0 -78
  17. package/esm2022/lib/aspect-list/aspect-list.component.mjs +0 -140
  18. package/esm2022/lib/aspect-list/aspect-list.module.mjs +0 -35
  19. package/esm2022/lib/aspect-list/index.mjs +0 -18
  20. package/esm2022/lib/aspect-list/public-api.mjs +0 -24
  21. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +0 -83
  22. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +0 -86
  23. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +0 -52
  24. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +0 -26
  25. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +0 -42
  26. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -167
  27. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +0 -35
  28. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +0 -66
  29. package/esm2022/lib/breadcrumb/index.mjs +0 -18
  30. package/esm2022/lib/breadcrumb/public-api.mjs +0 -20
  31. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +0 -22
  32. package/esm2022/lib/category/categories-management/categories-management.component.mjs +0 -309
  33. package/esm2022/lib/category/category.module.mjs +0 -33
  34. package/esm2022/lib/category/index.mjs +0 -18
  35. package/esm2022/lib/category/models/category-node.interface.mjs +0 -18
  36. package/esm2022/lib/category/public-api.mjs +0 -23
  37. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +0 -80
  38. package/esm2022/lib/category/services/category.service.mjs +0 -159
  39. package/esm2022/lib/common/events/file.event.mjs +0 -46
  40. package/esm2022/lib/common/index.mjs +0 -18
  41. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +0 -18
  42. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +0 -18
  43. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +0 -37
  44. package/esm2022/lib/common/models/allowable-operations.enum.mjs +0 -30
  45. package/esm2022/lib/common/models/ecm-company.model.mjs +0 -19
  46. package/esm2022/lib/common/models/ecm-user.model.mjs +0 -45
  47. package/esm2022/lib/common/models/file.model.mjs +0 -53
  48. package/esm2022/lib/common/models/node-metadata.model.mjs +0 -23
  49. package/esm2022/lib/common/models/permissions.enum.mjs +0 -32
  50. package/esm2022/lib/common/public-api.mjs +0 -37
  51. package/esm2022/lib/common/services/card-view-content-update.service.mjs +0 -55
  52. package/esm2022/lib/common/services/content.service.mjs +0 -180
  53. package/esm2022/lib/common/services/discovery-api.service.mjs +0 -79
  54. package/esm2022/lib/common/services/favorites-api.service.mjs +0 -84
  55. package/esm2022/lib/common/services/nodes-api.service.mjs +0 -251
  56. package/esm2022/lib/common/services/people-content.service.mjs +0 -138
  57. package/esm2022/lib/common/services/rendition.service.mjs +0 -270
  58. package/esm2022/lib/common/services/saved-searches.service.mjs +0 -206
  59. package/esm2022/lib/common/services/sites.service.mjs +0 -243
  60. package/esm2022/lib/common/services/upload.service.mjs +0 -391
  61. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +0 -55
  62. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +0 -491
  63. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +0 -129
  64. package/esm2022/lib/content-metadata/content-metadata.module.mjs +0 -36
  65. package/esm2022/lib/content-metadata/index.mjs +0 -18
  66. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +0 -18
  67. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +0 -18
  68. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +0 -18
  69. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +0 -18
  70. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +0 -18
  71. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +0 -28
  72. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +0 -18
  73. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +0 -18
  74. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +0 -18
  75. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +0 -18
  76. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +0 -18
  77. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +0 -18
  78. package/esm2022/lib/content-metadata/public-api.mjs +0 -31
  79. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +0 -107
  80. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +0 -106
  81. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +0 -76
  82. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +0 -40
  83. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +0 -108
  84. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +0 -33
  85. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +0 -99
  86. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +0 -134
  87. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +0 -52
  88. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +0 -169
  89. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +0 -256
  90. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +0 -618
  91. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +0 -66
  92. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +0 -18
  93. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +0 -206
  94. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +0 -50
  95. package/esm2022/lib/content-node-selector/index.mjs +0 -18
  96. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +0 -48
  97. package/esm2022/lib/content-node-selector/public-api.mjs +0 -25
  98. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +0 -168
  99. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +0 -288
  100. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +0 -102
  101. package/esm2022/lib/content-node-share/content-node-share.module.mjs +0 -35
  102. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +0 -18
  103. package/esm2022/lib/content-node-share/index.mjs +0 -18
  104. package/esm2022/lib/content-node-share/public-api.mjs +0 -22
  105. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +0 -83
  106. package/esm2022/lib/content-type/content-type-dialog.component.mjs +0 -58
  107. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +0 -18
  108. package/esm2022/lib/content-type/content-type.service.mjs +0 -52
  109. package/esm2022/lib/content-type/index.mjs +0 -20
  110. package/esm2022/lib/content.module.mjs +0 -277
  111. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +0 -52
  112. package/esm2022/lib/dialogs/dialog.module.mjs +0 -52
  113. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +0 -111
  114. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +0 -38
  115. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +0 -66
  116. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +0 -44
  117. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +0 -147
  118. package/esm2022/lib/dialogs/index.mjs +0 -18
  119. package/esm2022/lib/dialogs/library/library.dialog.mjs +0 -225
  120. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +0 -116
  121. package/esm2022/lib/dialogs/public-api.mjs +0 -25
  122. package/esm2022/lib/directives/auto-focus.directive.mjs +0 -38
  123. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +0 -126
  124. package/esm2022/lib/directives/content-directive.module.mjs +0 -75
  125. package/esm2022/lib/directives/index.mjs +0 -18
  126. package/esm2022/lib/directives/library-favorite.directive.mjs +0 -119
  127. package/esm2022/lib/directives/library-membership.directive.mjs +0 -202
  128. package/esm2022/lib/directives/node-counter.directive.mjs +0 -60
  129. package/esm2022/lib/directives/node-delete.directive.mjs +0 -177
  130. package/esm2022/lib/directives/node-download.directive.mjs +0 -138
  131. package/esm2022/lib/directives/node-favorite.directive.mjs +0 -193
  132. package/esm2022/lib/directives/node-lock.directive.mjs +0 -57
  133. package/esm2022/lib/directives/node-restore.directive.mjs +0 -218
  134. package/esm2022/lib/directives/public-api.mjs +0 -28
  135. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +0 -60
  136. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +0 -196
  137. package/esm2022/lib/document-list/components/document-list.component.mjs +0 -964
  138. package/esm2022/lib/document-list/components/document-list.token.mjs +0 -21
  139. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +0 -43
  140. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +0 -107
  141. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +0 -133
  142. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +0 -93
  143. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +0 -88
  144. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +0 -120
  145. package/esm2022/lib/document-list/components/node.event.mjs +0 -30
  146. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +0 -83
  147. package/esm2022/lib/document-list/data/image-resolver.model.mjs +0 -18
  148. package/esm2022/lib/document-list/data/row-filter.model.mjs +0 -18
  149. package/esm2022/lib/document-list/data/share-data-row.model.mjs +0 -102
  150. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +0 -258
  151. package/esm2022/lib/document-list/document-list.module.mjs +0 -79
  152. package/esm2022/lib/document-list/index.mjs +0 -18
  153. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +0 -18
  154. package/esm2022/lib/document-list/models/content-action.model.mjs +0 -59
  155. package/esm2022/lib/document-list/models/document-folder.model.mjs +0 -23
  156. package/esm2022/lib/document-list/models/node-action.enum.mjs +0 -27
  157. package/esm2022/lib/document-list/models/permissions-style.model.mjs +0 -27
  158. package/esm2022/lib/document-list/models/permissions.model.mjs +0 -26
  159. package/esm2022/lib/document-list/models/preset.model.mjs +0 -257
  160. package/esm2022/lib/document-list/public-api.mjs +0 -47
  161. package/esm2022/lib/document-list/services/custom-resources.service.mjs +0 -378
  162. package/esm2022/lib/document-list/services/document-actions.service.mjs +0 -142
  163. package/esm2022/lib/document-list/services/document-list.service.mjs +0 -175
  164. package/esm2022/lib/document-list/services/folder-actions.service.mjs +0 -137
  165. package/esm2022/lib/document-list/services/lock.service.mjs +0 -72
  166. package/esm2022/lib/document-list/services/node-actions.service.mjs +0 -122
  167. package/esm2022/lib/group/index.mjs +0 -18
  168. package/esm2022/lib/group/public-api.mjs +0 -18
  169. package/esm2022/lib/group/services/group.service.mjs +0 -84
  170. package/esm2022/lib/infinite-scroll-datasource/index.mjs +0 -18
  171. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +0 -69
  172. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +0 -18
  173. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +0 -18
  174. package/esm2022/lib/interfaces/index.mjs +0 -18
  175. package/esm2022/lib/interfaces/library-entity.interface.mjs +0 -18
  176. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +0 -18
  177. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +0 -18
  178. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +0 -18
  179. package/esm2022/lib/interfaces/public-api.mjs +0 -23
  180. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +0 -19
  181. package/esm2022/lib/legal-hold/index.mjs +0 -18
  182. package/esm2022/lib/legal-hold/public-api.mjs +0 -18
  183. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +0 -136
  184. package/esm2022/lib/material.module.mjs +0 -183
  185. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +0 -43
  186. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +0 -65
  187. package/esm2022/lib/mock/document-library.model.mock.mjs +0 -84
  188. package/esm2022/lib/mock/document-list.component.mock.mjs +0 -364
  189. package/esm2022/lib/mock/index.mjs +0 -18
  190. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +0 -161
  191. package/esm2022/lib/mock/public-api.mjs +0 -27
  192. package/esm2022/lib/mock/search-filter-mock.mjs +0 -637
  193. package/esm2022/lib/mock/search-query.mock.mjs +0 -40
  194. package/esm2022/lib/mock/search.component.mock.mjs +0 -165
  195. package/esm2022/lib/mock/search.service.mock.mjs +0 -61
  196. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +0 -281
  197. package/esm2022/lib/new-version-uploader/index.mjs +0 -18
  198. package/esm2022/lib/new-version-uploader/models/index.mjs +0 -18
  199. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +0 -24
  200. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +0 -75
  201. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +0 -33
  202. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +0 -103
  203. package/esm2022/lib/new-version-uploader/public-api.mjs +0 -21
  204. package/esm2022/lib/node-comments/index.mjs +0 -18
  205. package/esm2022/lib/node-comments/node-comments.component.mjs +0 -44
  206. package/esm2022/lib/node-comments/node-comments.module.mjs +0 -33
  207. package/esm2022/lib/node-comments/public-api.mjs +0 -20
  208. package/esm2022/lib/node-comments/services/node-comments.service.mjs +0 -85
  209. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +0 -18
  210. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +0 -124
  211. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +0 -103
  212. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +0 -70
  213. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +0 -45
  214. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +0 -67
  215. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +0 -56
  216. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +0 -103
  217. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +0 -88
  218. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +0 -219
  219. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +0 -134
  220. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +0 -88
  221. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +0 -82
  222. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +0 -112
  223. package/esm2022/lib/permission-manager/index.mjs +0 -18
  224. package/esm2022/lib/permission-manager/models/member.model.mjs +0 -59
  225. package/esm2022/lib/permission-manager/models/permission.model.mjs +0 -29
  226. package/esm2022/lib/permission-manager/models/role.model.mjs +0 -18
  227. package/esm2022/lib/permission-manager/permission-manager.module.mjs +0 -84
  228. package/esm2022/lib/permission-manager/public-api.mjs +0 -36
  229. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +0 -78
  230. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +0 -299
  231. package/esm2022/lib/pipes/content-pipe.module.mjs +0 -37
  232. package/esm2022/lib/pipes/index.mjs +0 -18
  233. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +0 -69
  234. package/esm2022/lib/pipes/public-api.mjs +0 -19
  235. package/esm2022/lib/prediction/index.mjs +0 -18
  236. package/esm2022/lib/prediction/public-api.mjs +0 -18
  237. package/esm2022/lib/prediction/services/index.mjs +0 -18
  238. package/esm2022/lib/prediction/services/prediction.service.mjs +0 -57
  239. package/esm2022/lib/search/components/empty-search-result.component.mjs +0 -27
  240. package/esm2022/lib/search/components/index.mjs +0 -43
  241. package/esm2022/lib/search/components/reset-search.directive.mjs +0 -41
  242. package/esm2022/lib/search/components/search-check-list/index.mjs +0 -18
  243. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +0 -159
  244. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +0 -18
  245. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +0 -170
  246. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +0 -47
  247. package/esm2022/lib/search/components/search-control.component.mjs +0 -181
  248. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +0 -22
  249. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +0 -23
  250. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +0 -23
  251. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +0 -197
  252. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +0 -18
  253. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +0 -201
  254. package/esm2022/lib/search/components/search-datetime-range/index.mjs +0 -18
  255. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +0 -224
  256. package/esm2022/lib/search/components/search-facet-field/index.mjs +0 -18
  257. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +0 -133
  258. package/esm2022/lib/search/components/search-filter/index.mjs +0 -19
  259. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +0 -46
  260. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +0 -81
  261. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +0 -18
  262. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +0 -155
  263. package/esm2022/lib/search/components/search-filter-chips/index.mjs +0 -23
  264. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +0 -105
  265. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +0 -110
  266. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +0 -129
  267. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +0 -64
  268. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +0 -44
  269. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +0 -110
  270. package/esm2022/lib/search/components/search-filter-container/index.mjs +0 -18
  271. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +0 -123
  272. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +0 -19
  273. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +0 -36
  274. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +0 -64
  275. package/esm2022/lib/search/components/search-form/index.mjs +0 -18
  276. package/esm2022/lib/search/components/search-form/search-form.component.mjs +0 -53
  277. package/esm2022/lib/search/components/search-input/index.mjs +0 -18
  278. package/esm2022/lib/search/components/search-input/search-input.component.mjs +0 -109
  279. package/esm2022/lib/search/components/search-logical-filter/index.mjs +0 -18
  280. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +0 -164
  281. package/esm2022/lib/search/components/search-number-range/index.mjs +0 -18
  282. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +0 -155
  283. package/esm2022/lib/search/components/search-panel/index.mjs +0 -18
  284. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +0 -44
  285. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +0 -18
  286. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +0 -23
  287. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +0 -26
  288. package/esm2022/lib/search/components/search-properties/index.mjs +0 -22
  289. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +0 -244
  290. package/esm2022/lib/search/components/search-properties/search-properties.mjs +0 -18
  291. package/esm2022/lib/search/components/search-radio/index.mjs +0 -18
  292. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +0 -146
  293. package/esm2022/lib/search/components/search-slider/index.mjs +0 -18
  294. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +0 -120
  295. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +0 -18
  296. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +0 -77
  297. package/esm2022/lib/search/components/search-text/index.mjs +0 -18
  298. package/esm2022/lib/search/components/search-text/search-text.component.mjs +0 -135
  299. package/esm2022/lib/search/components/search-widget-container/index.mjs +0 -18
  300. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +0 -113
  301. package/esm2022/lib/search/components/search.component.mjs +0 -153
  302. package/esm2022/lib/search/forms/index.mjs +0 -19
  303. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +0 -23
  304. package/esm2022/lib/search/forms/search-term-validator.mjs +0 -26
  305. package/esm2022/lib/search/index.mjs +0 -18
  306. package/esm2022/lib/search/mocks/index.mjs +0 -18
  307. package/esm2022/lib/search/mocks/search.service.mock.mjs +0 -56
  308. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +0 -22
  309. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +0 -18
  310. package/esm2022/lib/search/models/facet-field.interface.mjs +0 -29
  311. package/esm2022/lib/search/models/facet-query.interface.mjs +0 -18
  312. package/esm2022/lib/search/models/facet-widget.interface.mjs +0 -18
  313. package/esm2022/lib/search/models/filter-query.interface.mjs +0 -18
  314. package/esm2022/lib/search/models/filter-search.interface.mjs +0 -18
  315. package/esm2022/lib/search/models/index.mjs +0 -34
  316. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +0 -31
  317. package/esm2022/lib/search/models/search-category.interface.mjs +0 -18
  318. package/esm2022/lib/search/models/search-configuration.interface.mjs +0 -18
  319. package/esm2022/lib/search/models/search-filter-list.model.mjs +0 -148
  320. package/esm2022/lib/search/models/search-form.interface.mjs +0 -18
  321. package/esm2022/lib/search/models/search-range.interface.mjs +0 -18
  322. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +0 -18
  323. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +0 -18
  324. package/esm2022/lib/search/models/search-widget.interface.mjs +0 -18
  325. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +0 -18
  326. package/esm2022/lib/search/public-api.mjs +0 -24
  327. package/esm2022/lib/search/search-configuration.token.mjs +0 -19
  328. package/esm2022/lib/search/search.module.mjs +0 -192
  329. package/esm2022/lib/search/services/base-query-builder.service.mjs +0 -509
  330. package/esm2022/lib/search/services/index.mjs +0 -24
  331. package/esm2022/lib/search/services/search-configuration.service.mjs +0 -50
  332. package/esm2022/lib/search/services/search-facet-filters.service.mjs +0 -374
  333. package/esm2022/lib/search/services/search-filter.service.mjs +0 -56
  334. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +0 -136
  335. package/esm2022/lib/search/services/search-query-builder.service.mjs +0 -48
  336. package/esm2022/lib/search/services/search.service.mjs +0 -89
  337. package/esm2022/lib/search-ai/index.mjs +0 -18
  338. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +0 -18
  339. package/esm2022/lib/search-ai/public-api.mjs +0 -19
  340. package/esm2022/lib/search-ai/services/search-ai.service.mjs +0 -103
  341. package/esm2022/lib/security/index.mjs +0 -18
  342. package/esm2022/lib/security/public-api.mjs +0 -18
  343. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +0 -18
  344. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +0 -18
  345. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +0 -274
  346. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +0 -43
  347. package/esm2022/lib/services/alfresco-api.interface.mjs +0 -18
  348. package/esm2022/lib/services/alfresco-api.service.mjs +0 -120
  349. package/esm2022/lib/services/index.mjs +0 -18
  350. package/esm2022/lib/services/public-api.mjs +0 -18
  351. package/esm2022/lib/tag/index.mjs +0 -18
  352. package/esm2022/lib/tag/public-api.mjs +0 -24
  353. package/esm2022/lib/tag/services/tag.service.mjs +0 -171
  354. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +0 -115
  355. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +0 -98
  356. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +0 -80
  357. package/esm2022/lib/tag/tag.module.mjs +0 -37
  358. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +0 -27
  359. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +0 -371
  360. package/esm2022/lib/testing/content.testing.module.mjs +0 -56
  361. package/esm2022/lib/tree/components/tree.component.mjs +0 -313
  362. package/esm2022/lib/tree/index.mjs +0 -18
  363. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +0 -18
  364. package/esm2022/lib/tree/models/tree-node.interface.mjs +0 -22
  365. package/esm2022/lib/tree/models/tree-response.interface.mjs +0 -18
  366. package/esm2022/lib/tree/public-api.mjs +0 -23
  367. package/esm2022/lib/tree/services/tree.service.mjs +0 -134
  368. package/esm2022/lib/tree/tree.module.mjs +0 -33
  369. package/esm2022/lib/tree-view/components/tree-view.component.mjs +0 -76
  370. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +0 -99
  371. package/esm2022/lib/tree-view/index.mjs +0 -18
  372. package/esm2022/lib/tree-view/models/tree-view.model.mjs +0 -28
  373. package/esm2022/lib/tree-view/public-api.mjs +0 -22
  374. package/esm2022/lib/tree-view/services/tree-view.service.mjs +0 -38
  375. package/esm2022/lib/tree-view/tree-view.module.mjs +0 -33
  376. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +0 -176
  377. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +0 -191
  378. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +0 -93
  379. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +0 -124
  380. package/esm2022/lib/upload/components/upload-button.component.mjs +0 -134
  381. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +0 -112
  382. package/esm2022/lib/upload/components/upload-files.event.mjs +0 -41
  383. package/esm2022/lib/upload/components/upload-version-button.component.mjs +0 -55
  384. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +0 -154
  385. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +0 -75
  386. package/esm2022/lib/upload/index.mjs +0 -18
  387. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +0 -39
  388. package/esm2022/lib/upload/public-api.mjs +0 -29
  389. package/esm2022/lib/upload/upload.module.mjs +0 -72
  390. package/esm2022/lib/version-compatibility/index.mjs +0 -18
  391. package/esm2022/lib/version-compatibility/public-api.mjs +0 -20
  392. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +0 -26
  393. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +0 -53
  394. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +0 -33
  395. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +0 -76
  396. package/esm2022/lib/version-manager/content-version.service.mjs +0 -53
  397. package/esm2022/lib/version-manager/index.mjs +0 -18
  398. package/esm2022/lib/version-manager/public-api.mjs +0 -23
  399. package/esm2022/lib/version-manager/version-comparison.component.mjs +0 -43
  400. package/esm2022/lib/version-manager/version-list.component.mjs +0 -216
  401. package/esm2022/lib/version-manager/version-manager.component.mjs +0 -146
  402. package/esm2022/lib/version-manager/version-manager.module.mjs +0 -48
  403. package/esm2022/lib/version-manager/version-upload.component.mjs +0 -155
  404. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +0 -33
  405. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +0 -409
  406. package/esm2022/lib/viewer/index.mjs +0 -18
  407. package/esm2022/lib/viewer/public-api.mjs +0 -19
  408. package/esm2022/public-api.mjs +0 -56
@@ -1,618 +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 { TranslateModule } 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 "@ngx-translate/core";
49
- import * as i9 from "@angular/material/input";
50
- import * as i10 from "@angular/forms";
51
- import * as i11 from "@angular/material/icon";
52
- import * as i12 from "@angular/material/button";
53
- export const defaultValidation = () => true;
54
- export class ContentNodeSelectorPanelComponent {
55
- /**
56
- * Custom row filter function. See the
57
- * [Row Filter Model](row-filter.model.md) page
58
- * for more information.
59
- */
60
- set rowFilter(rowFilter) {
61
- this.createRowFilter(rowFilter);
62
- }
63
- get rowFilter() {
64
- return this._rowFilter;
65
- }
66
- /**
67
- * Custom list of site content componentIds.
68
- * Used to filter out the corresponding items from the displayed nodes
69
- */
70
- set excludeSiteContent(excludeSiteContent) {
71
- this._excludeSiteContent = excludeSiteContent;
72
- this.createRowFilter(this._rowFilter);
73
- }
74
- get excludeSiteContent() {
75
- return this._excludeSiteContent;
76
- }
77
- /** Toggle search input rendering */
78
- set showSearch(value) {
79
- if (value !== undefined && value !== null) {
80
- this.showSearchField = value;
81
- }
82
- }
83
- get showSearch() {
84
- return this.showSearchField;
85
- }
86
- /** Toggle sites list dropdown rendering */
87
- set showDropdownSiteList(value) {
88
- if (value !== undefined && value !== null) {
89
- this.showSiteList = value;
90
- }
91
- }
92
- get showDropdownSiteList() {
93
- return this.showSiteList;
94
- }
95
- /** Shows the files and folders in the search result */
96
- set showFilesInResult(value) {
97
- if (value !== undefined && value !== null) {
98
- const showFilesQuery = `TYPE:'cm:folder'${value ? ` OR TYPE:'cm:content'` : ''}`;
99
- this.queryBuilderService.addFilterQuery(showFilesQuery);
100
- }
101
- }
102
- /** Shows the node counter in the breadcrumb */
103
- set showNodeCounter(value) {
104
- this.showCounter = value ?? false;
105
- }
106
- get showNodeCounter() {
107
- return this.showCounter;
108
- }
109
- constructor(customResourcesService, queryBuilderService, userPreferencesService, nodesApiService, uploadService, sitesService, contentNodeSelectorPanelService) {
110
- this.customResourcesService = customResourcesService;
111
- this.queryBuilderService = queryBuilderService;
112
- this.userPreferencesService = userPreferencesService;
113
- this.nodesApiService = nodesApiService;
114
- this.uploadService = uploadService;
115
- this.sitesService = sitesService;
116
- this.contentNodeSelectorPanelService = contentNodeSelectorPanelService;
117
- // eslint-disable-next-line @typescript-eslint/naming-convention
118
- this.DEFAULT_PAGINATION = new Pagination({
119
- maxItems: 25,
120
- skipCount: 0
121
- });
122
- this.disableActionFolderList = ['-mysites-'];
123
- this.showSiteList = true;
124
- this.showSearchField = true;
125
- this.showCounter = false;
126
- this._emptyList = true;
127
- /** If true will restrict the search and breadcrumbs to the currentFolderId */
128
- this.restrictRootToCurrentFolderId = false;
129
- /** Node ID of the folder currently listed. */
130
- this.currentFolderId = null;
131
- /**
132
- * Hide the "My Files" option added to the site list by default.
133
- * See the [Sites Dropdown component](sites-dropdown.component.md)
134
- * for more information.
135
- */
136
- this.dropdownHideMyFiles = false;
137
- /**
138
- * Custom site for site dropdown. This is the same as the `siteList`.
139
- * property of the Sites Dropdown component (see its doc page
140
- * for more information).
141
- */
142
- this.dropdownSiteList = null;
143
- this._rowFilter = defaultValidation;
144
- this._excludeSiteContent = [];
145
- /**
146
- * Custom image resolver function. See the
147
- * [Image Resolver Model](image-resolver.model.md) page
148
- * for more information.
149
- */
150
- this.imageResolver = null;
151
- /** Number of items shown per page in the list. */
152
- this.pageSize = this.DEFAULT_PAGINATION.maxItems;
153
- /** Define the selection mode for document list. The allowed values are single or multiple */
154
- this.selectionMode = 'single';
155
- /**
156
- * Function used to decide if the selected node has permission to be selected.
157
- * Default value is a function that always returns true.
158
- */
159
- this.isSelectionValid = defaultValidation;
160
- /** Emitted when the user has chosen an item. */
161
- this.select = new EventEmitter();
162
- /** Emitted when the navigation changes. */
163
- this.navigationChange = new EventEmitter();
164
- /** Emitted when the select site changes. */
165
- this.siteChange = new EventEmitter();
166
- /** Emitted when search is running. */
167
- this.showingSearch = new EventEmitter();
168
- /** Emitted when current folder loaded. */
169
- this.currentFolder = new EventEmitter();
170
- /** Emitted when folder loaded. */
171
- this.folderLoaded = new EventEmitter();
172
- this.nodePaging = null;
173
- this.searchTerm = '';
174
- this.showingSearchResults = false;
175
- this.loadingSearchResults = false;
176
- this.inDialog = false;
177
- this._chosenNode = null;
178
- this.selectionWithoutValidation = null;
179
- this.folderIdToShow = null;
180
- this.breadcrumbFolderTitle = null;
181
- this.startSiteGuid = null;
182
- this.hasValidQuery = false;
183
- this.showHeader = ShowHeaderMode.Never;
184
- this.infiniteScroll = false;
185
- this.debounceSearch = 200;
186
- this.searchInput = new UntypedFormControl();
187
- this.preselectedNodes = [];
188
- this.currentUploadBatch = [];
189
- this.sorting = ['createdAt', 'desc'];
190
- this.searchPanelExpanded = false;
191
- this.destroyRef = inject(DestroyRef);
192
- }
193
- set chosenNode(value) {
194
- this._chosenNode = value;
195
- this.select.next(value);
196
- }
197
- get chosenNode() {
198
- return this._chosenNode;
199
- }
200
- get emptyList() {
201
- return this._emptyList;
202
- }
203
- getSelectedCount() {
204
- return this.chosenNode?.length || 0;
205
- }
206
- ngOnInit() {
207
- this.searchInput.valueChanges
208
- .pipe(debounceTime(this.debounceSearch), takeUntilDestroyed(this.destroyRef))
209
- .subscribe((searchValue) => {
210
- this.searchTerm = searchValue;
211
- this.queryBuilderService.userQuery = searchValue.length > 0 ? `${searchValue}*` : searchValue;
212
- this.queryBuilderService.update();
213
- });
214
- this.queryBuilderService.updated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((searchRequest) => {
215
- if (searchRequest) {
216
- this.hasValidQuery = true;
217
- this.prepareDialogForNewSearch(searchRequest);
218
- this.queryBuilderService.execute(false, searchRequest);
219
- }
220
- else {
221
- this.hasValidQuery = false;
222
- this.resetFolderToShow();
223
- this.clearSearch();
224
- }
225
- });
226
- this.queryBuilderService.executed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((results) => {
227
- if (this.hasValidQuery) {
228
- this.showSearchResults(results);
229
- }
230
- });
231
- this.userPreferencesService
232
- .select(UserPreferenceValues.PaginationSize)
233
- .pipe(takeUntilDestroyed(this.destroyRef))
234
- .subscribe((pagSize) => (this.pageSize = pagSize));
235
- this.target = this.documentList;
236
- this.folderIdToShow = this.currentFolderId;
237
- if (this.currentFolderId) {
238
- if (this.restrictRootToCurrentFolderId) {
239
- this.breadcrumbRootId = this.currentFolderId;
240
- this.siteId = this.currentFolderId;
241
- }
242
- else {
243
- this.getStartSite();
244
- }
245
- }
246
- this.breadcrumbTransform = this.breadcrumbTransform ? this.breadcrumbTransform : null;
247
- this.isSelectionValid = this.isSelectionValid ? this.isSelectionValid : defaultValidation;
248
- this.onFileUploadEvent();
249
- this.onFileUploadDeletedEvent();
250
- this.resetPagination();
251
- this.setSearchScopeToNodes();
252
- this.documentList.$folderNode.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((currentNode) => {
253
- this.currentFolder.emit(currentNode);
254
- });
255
- }
256
- toggleSearchPanel() {
257
- this.searchPanelExpanded = !this.searchPanelExpanded;
258
- }
259
- hasCustomModels() {
260
- return this.contentNodeSelectorPanelService?.customModels?.length > 0;
261
- }
262
- onFileUploadEvent() {
263
- this.uploadService.fileUploadComplete
264
- .pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef))
265
- .subscribe((fileUploadEvent) => {
266
- this.currentUploadBatch.push(fileUploadEvent.data);
267
- if (!this.uploadService.isUploading()) {
268
- this.preselectedNodes = this.getPreselectNodesBasedOnSelectionMode();
269
- this.currentUploadBatch = [];
270
- this.documentList.reloadWithoutResettingSelection();
271
- }
272
- });
273
- }
274
- onFileUploadDeletedEvent() {
275
- this.uploadService.fileUploadDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((deletedFileEvent) => {
276
- this.documentList.unselectRowFromNodeId(deletedFileEvent.file.data.entry.id);
277
- this.documentList.reloadWithoutResettingSelection();
278
- });
279
- }
280
- getStartSite() {
281
- this.nodesApiService.getNode(this.currentFolderId).subscribe((startNodeEntry) => {
282
- this.startSiteGuid = this.sitesService.getSiteNameFromNodePath(startNodeEntry);
283
- if (this.startSiteGuid) {
284
- this.sitesService.getSite(this.startSiteGuid).subscribe((startSiteEntry) => {
285
- if (startSiteEntry instanceof SiteEntry) {
286
- this.siteChange.emit(startSiteEntry.entry.title);
287
- }
288
- });
289
- }
290
- });
291
- }
292
- createRowFilter(filter) {
293
- if (!filter) {
294
- filter = () => true;
295
- }
296
- this._rowFilter = (value, index, array) => filter(value, index, array) && !this.isExcludedSiteContent(value);
297
- }
298
- isExcludedSiteContent(row) {
299
- const entry = row.node.entry;
300
- if (this._excludeSiteContent?.length && entry?.properties?.['st:componentId']) {
301
- const excludedItem = this._excludeSiteContent.find((id) => entry.properties['st:componentId'] === id);
302
- return !!excludedItem;
303
- }
304
- return false;
305
- }
306
- /**
307
- * Updates the site attribute and starts a new search
308
- *
309
- * @param chosenSite SiteEntry to search within
310
- */
311
- siteChanged(chosenSite) {
312
- this.siteId = chosenSite.entry.guid;
313
- this.setTitleIfCustomSite(chosenSite);
314
- this.siteChange.emit(chosenSite.entry.title);
315
- this.queryBuilderService.update();
316
- }
317
- /**
318
- * Get current breadcrumb folder node
319
- *
320
- * @returns the actually selected|entered folder node or null in case of searching for the breadcrumb
321
- */
322
- get breadcrumbFolderNode() {
323
- let folderNode;
324
- if (this.showingSearchResults && this.selectionWithoutValidation?.length) {
325
- folderNode = this.selectionWithoutValidation[0];
326
- }
327
- else {
328
- folderNode = this.documentList.folderNode;
329
- }
330
- return folderNode;
331
- }
332
- /**
333
- * Prepares the dialog for a new search
334
- *
335
- * @param searchRequest request options
336
- */
337
- prepareDialogForNewSearch(searchRequest) {
338
- this.target = searchRequest ? null : this.documentList;
339
- if (this.target) {
340
- this.infinitePaginationComponent.reset();
341
- }
342
- this.folderIdToShow = null;
343
- this.preselectedNodes = [];
344
- this.loadingSearchResults = true;
345
- this.addCorrespondingNodeIdsQuery();
346
- this.resetChosenNode();
347
- }
348
- /**
349
- * Clear the search input and reset to last folder node in which search was performed
350
- */
351
- clear() {
352
- this.searchTerm = '';
353
- this.queryBuilderService.userQuery = '';
354
- this.queryBuilderService.update();
355
- }
356
- /**
357
- * Resets the folder to be shown with the site selection or the initial landing folder
358
- */
359
- resetFolderToShow() {
360
- this.folderIdToShow = this.siteId || this.currentFolderId;
361
- }
362
- /**
363
- * Clear the search input and search related data
364
- */
365
- clearSearch() {
366
- this.searchTerm = '';
367
- this.nodePaging = null;
368
- this.resetPagination();
369
- this.resetChosenNode();
370
- this.showingSearchResults = false;
371
- this.showingSearch.emit(this.showingSearchResults);
372
- }
373
- addCorrespondingNodeIdsQuery() {
374
- let extraParentFiltering = '';
375
- if (this.customResourcesService.hasCorrespondingNodeIds(this.siteId)) {
376
- this.customResourcesService.getCorrespondingNodeIds(this.siteId).subscribe((nodeIds) => {
377
- if (nodeIds?.length) {
378
- nodeIds
379
- .filter((id) => id !== this.siteId)
380
- .forEach((extraId) => {
381
- extraParentFiltering += ` OR ANCESTOR:'workspace://SpacesStore/${extraId}'`;
382
- });
383
- }
384
- const parentFiltering = this.siteId ? `ANCESTOR:'workspace://SpacesStore/${this.siteId}'${extraParentFiltering}` : '';
385
- this.queryBuilderService.addFilterQuery(parentFiltering);
386
- });
387
- }
388
- else {
389
- const parentFiltering = this.siteId ? `ANCESTOR:'workspace://SpacesStore/${this.siteId}'` : '';
390
- this.queryBuilderService.addFilterQuery(parentFiltering);
391
- }
392
- }
393
- setSearchScopeToNodes() {
394
- const scope = {
395
- locations: 'nodes'
396
- };
397
- this.queryBuilderService.setScope(scope);
398
- }
399
- /**
400
- * Show the results of the search
401
- *
402
- * @param results Search results
403
- */
404
- showSearchResults(results) {
405
- this.showingSearchResults = true;
406
- this.loadingSearchResults = false;
407
- this.showingSearch.emit(this.showingSearchResults);
408
- this.nodePaging = results;
409
- }
410
- /**
411
- * Sets showingSearchResults state to be able to differentiate between search results or folder results
412
- *
413
- * @param $event node event
414
- */
415
- onFolderChange($event) {
416
- this.folderIdToShow = $event.value.id;
417
- this.showingSearchResults = false;
418
- this.infiniteScroll = false;
419
- this.breadcrumbFolderTitle = null;
420
- this.preselectedNodes = [];
421
- this.clearSearch();
422
- this.navigationChange.emit($event);
423
- }
424
- /**
425
- * Attempts to set the currently loaded node
426
- *
427
- * @param nodePaging pagination model
428
- */
429
- onFolderLoaded(nodePaging) {
430
- setTimeout(() => {
431
- this._emptyList = !this.documentList.data.getRows().length;
432
- });
433
- this.updatePaginationAfterRowFilter(nodePaging);
434
- if (!this.showingSearchResults) {
435
- this.attemptNodeSelection(this.documentList.folderNode);
436
- }
437
- this.folderLoaded.emit();
438
- }
439
- /**
440
- * Updates pagination.hasMoreItems to false after filtering only folders during 'COPY' and 'MOVE' action
441
- *
442
- * @param nodePaging pagination model
443
- */
444
- updatePaginationAfterRowFilter(nodePaging) {
445
- if (this.documentList.data.getRows().length < nodePaging.list.pagination.maxItems) {
446
- nodePaging.list.pagination.hasMoreItems = false;
447
- }
448
- }
449
- /**
450
- * Returns whether breadcrumb has to be shown or not
451
- *
452
- * @returns `true` if needs to show the breadcrumb, otherwise `false`
453
- */
454
- showBreadcrumbs() {
455
- return !this.showingSearchResults || this.chosenNode;
456
- }
457
- /**
458
- * Loads the next batch of search results
459
- *
460
- * @param pagination Pagination object
461
- */
462
- getNextPageOfSearch(pagination) {
463
- this.infiniteScroll = true;
464
- this.queryBuilderService.paging.maxItems = pagination.maxItems;
465
- this.queryBuilderService.paging.skipCount = pagination.skipCount;
466
- if (this.searchTerm.length > 0) {
467
- this.queryBuilderService.update();
468
- }
469
- }
470
- /**
471
- * Selects node as chosen if it has the right permission, clears the selection otherwise
472
- *
473
- * @param entry node entry
474
- */
475
- attemptNodeSelection(entry) {
476
- if (entry && this.isSelectionValid(entry) && !this.isActionDisabledForFolder(this.documentList.currentFolderId)) {
477
- this.chosenNode = [entry];
478
- }
479
- }
480
- isActionDisabledForFolder(folderId) {
481
- return this.disableActionFolderList.includes(folderId);
482
- }
483
- /**
484
- * Clears the chosen node
485
- */
486
- resetChosenNode() {
487
- this.chosenNode = null;
488
- }
489
- /**
490
- * It filters and emit the selection coming from the document list
491
- *
492
- * @param nodesEntries selected nodes
493
- */
494
- onCurrentSelection(nodesEntries) {
495
- const validNodesEntity = nodesEntries.filter((node) => this.isSelectionValid(node.entry));
496
- this.chosenNode = validNodesEntity.map((node) => node.entry);
497
- this.selectionWithoutValidation = nodesEntries.map((node) => node.entry);
498
- }
499
- setTitleIfCustomSite(site) {
500
- if (this.customResourcesService.isCustomSource(site.entry.guid)) {
501
- this.breadcrumbFolderTitle = site.entry.title;
502
- if (this.documentList.folderNode.path.elements) {
503
- this.breadcrumbFolderNode.name = site.entry.title;
504
- this.documentList.folderNode.path.elements = null;
505
- }
506
- }
507
- else {
508
- this.breadcrumbFolderTitle = null;
509
- }
510
- }
511
- hasPreselectNodes() {
512
- return this.preselectedNodes?.length > 0;
513
- }
514
- isSingleSelectionMode() {
515
- return this.selectionMode === 'single';
516
- }
517
- getPreselectNodesBasedOnSelectionMode() {
518
- let selectedNodes = [];
519
- if (this.currentUploadBatch?.length) {
520
- if (this.isSingleSelectionMode()) {
521
- selectedNodes = [this.currentUploadBatch[this.currentUploadBatch.length - 1]];
522
- }
523
- else {
524
- selectedNodes = this.currentUploadBatch;
525
- }
526
- }
527
- return selectedNodes;
528
- }
529
- resetPagination() {
530
- this.queryBuilderService.paging = {
531
- maxItems: this.pageSize,
532
- skipCount: this.DEFAULT_PAGINATION.skipCount
533
- };
534
- }
535
- 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 }); }
536
- 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: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.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: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.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: i11.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: i12.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 }); }
537
- }
538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeSelectorPanelComponent, decorators: [{
539
- type: Component,
540
- args: [{ selector: 'adf-content-node-selector-panel', standalone: true, imports: [
541
- CommonModule,
542
- MatFormFieldModule,
543
- TranslateModule,
544
- MatInputModule,
545
- ReactiveFormsModule,
546
- AutoFocusDirective,
547
- MatIconModule,
548
- DropdownSitesComponent,
549
- MatButtonModule,
550
- ToolbarTitleComponent,
551
- ToolbarComponent,
552
- DropdownBreadcrumbComponent,
553
- NodeCounterDirective,
554
- DocumentListComponent,
555
- HighlightDirective,
556
- DataColumnListComponent,
557
- DataColumnComponent,
558
- NameLocationCellComponent,
559
- InfinitePaginationComponent,
560
- CustomEmptyContentTemplateDirective,
561
- SearchPanelComponent
562
- ], 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"] }]
563
- }], ctorParameters: () => [{ type: i1.CustomResourcesService }, { type: i2.SearchQueryBuilderService }, { type: i3.UserPreferencesService }, { type: i4.NodesApiService }, { type: i4.UploadService }, { type: i4.SitesService }, { type: i5.ContentNodeSelectorPanelService }], propDecorators: { restrictRootToCurrentFolderId: [{
564
- type: Input
565
- }], currentFolderId: [{
566
- type: Input,
567
- args: [{ required: true }]
568
- }], dropdownHideMyFiles: [{
569
- type: Input
570
- }], dropdownSiteList: [{
571
- type: Input
572
- }], where: [{
573
- type: Input
574
- }], rowFilter: [{
575
- type: Input
576
- }], excludeSiteContent: [{
577
- type: Input
578
- }], imageResolver: [{
579
- type: Input
580
- }], pageSize: [{
581
- type: Input
582
- }], selectionMode: [{
583
- type: Input
584
- }], isSelectionValid: [{
585
- type: Input
586
- }], breadcrumbTransform: [{
587
- type: Input
588
- }], showSearch: [{
589
- type: Input
590
- }], showDropdownSiteList: [{
591
- type: Input
592
- }], showFilesInResult: [{
593
- type: Input
594
- }], showNodeCounter: [{
595
- type: Input
596
- }], select: [{
597
- type: Output
598
- }], navigationChange: [{
599
- type: Output
600
- }], siteChange: [{
601
- type: Output
602
- }], showingSearch: [{
603
- type: Output
604
- }], currentFolder: [{
605
- type: Output
606
- }], folderLoaded: [{
607
- type: Output
608
- }], documentList: [{
609
- type: ViewChild,
610
- args: ['documentList', { static: true }]
611
- }], highlighter: [{
612
- type: ViewChild,
613
- args: [HighlightDirective, { static: true }]
614
- }], infinitePaginationComponent: [{
615
- type: ViewChild,
616
- args: [InfinitePaginationComponent, { static: true }]
617
- }] } });
618
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1ub2RlLXNlbGVjdG9yL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW5vZGUtc2VsZWN0b3IvY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUV2QixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQWtELGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBK0IsVUFBVSxFQUErQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0gsT0FBTyxFQUFFLHFC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QkFEWixLQUFLO2dCQVFOLGdCQUFnQjtzQkFEZixLQUFLO2dCQVVOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLRixVQUFVO3NCQURiLEtBQUs7Z0JBYUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQWFGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVdOLE1BQU07c0JBREwsTUFBTTtnQkFLUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTNDLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBbUIvQywyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgRGF0YUNvbHVtbkNvbXBvbmVudCxcbiAgICBEYXRhQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICBEYXRhU29ydGluZyxcbiAgICBIaWdobGlnaHREaXJlY3RpdmUsXG4gICAgSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFBhZ2luYXRlZENvbXBvbmVudCxcbiAgICBTaG93SGVhZGVyTW9kZSxcbiAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgIFRvb2xiYXJUaXRsZUNvbXBvbmVudCxcbiAgICBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIFVzZXJQcmVmZXJlbmNlVmFsdWVzXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcGxldGVFdmVudCwgRmlsZVVwbG9hZERlbGV0ZUV2ZW50LCBOb2Rlc0FwaVNlcnZpY2UsIFNpdGVzU2VydmljZSwgVXBsb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOb2RlLCBOb2RlRW50cnksIE5vZGVQYWdpbmcsIFBhZ2luYXRpb24sIFJlcXVlc3RTY29wZSwgU2VhcmNoUmVxdWVzdCwgU2l0ZUVudHJ5LCBTaXRlUGFnaW5nIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBEb2N1bWVudExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2NvbXBvbmVudHMvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm93RmlsdGVyIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9kYXRhL3Jvdy1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgSW1hZ2VSZXNvbHZlciB9IGZyb20gJy4uLy4uL2RvY3VtZW50LWxpc3QvZGF0YS9pbWFnZS1yZXNvbHZlci5tb2RlbCc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9zZXJ2aWNlcy9jdXN0b20tcmVzb3VyY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVEYXRhUm93IH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9kYXRhL3NoYXJlLWRhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyeUV2ZW50IH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL25vZGUuZXZlbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSB9IGZyb20gJy4vY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEF1dG9Gb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYXV0by1mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZUNvdW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vZGUtY291bnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRHJvcGRvd25TaXRlc0NvbXBvbmVudCB9IGZyb20gJy4uL3NpdGUtZHJvcGRvd24vc2l0ZXMtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBOYW1lTG9jYXRpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmFtZS1sb2NhdGlvbi1jZWxsL25hbWUtbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25CcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnJlYWRjcnVtYi9kcm9wZG93bi1icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlcnZpY2VzL3NlYXJjaC1xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtcGFuZWwvc2VhcmNoLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GdW5jdGlvbiA9IChlbnRyeTogTm9kZSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRWYWxpZGF0aW9uID0gKCkgPT4gdHJ1ZTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgRHJvcGRvd25TaXRlc0NvbXBvbmVudCxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBUb29sYmFyVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIERyb3Bkb3duQnJlYWRjcnVtYkNvbXBvbmVudCxcbiAgICAgICAgTm9kZUNvdW50ZXJEaXJlY3RpdmUsXG4gICAgICAgIERvY3VtZW50TGlzdENvbXBvbmVudCxcbiAgICAgICAgSGlnaGxpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBEYXRhQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICAgICAgRGF0YUNvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgTmFtZUxvY2F0aW9uQ2VsbENvbXBvbmVudCxcbiAgICAgICAgSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgU2VhcmNoUGFuZWxDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwnIH0sXG4gICAgcHJvdmlkZXJzOiBbU2VhcmNoUXVlcnlCdWlsZGVyU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb24oe1xuICAgICAgICBtYXhJdGVtczogMjUsXG4gICAgICAgIHNraXBDb3VudDogMFxuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgZGlzYWJsZUFjdGlvbkZvbGRlckxpc3QgPSBbJy1teXNpdGVzLSddO1xuXG4gICAgcHJpdmF0ZSBzaG93U2l0ZUxpc3QgPSB0cnVlO1xuICAgIHByaXZhdGUgc2hvd1NlYXJjaEZpZWxkID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNob3dDb3VudGVyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZW1wdHlMaXN0ID0gdHJ1ZTtcblxuICAgIC8qKiBJZiB0cnVlIHdpbGwgcmVzdHJpY3QgdGhlIHNlYXJjaCBhbmQgYnJlYWRjcnVtYnMgdG8gdGhlIGN1cnJlbnRGb2xkZXJJZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVzdHJpY3RSb290VG9DdXJyZW50Rm9sZGVySWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBOb2RlIElEIG9mIHRoZSBmb2xkZXIgY3VycmVudGx5IGxpc3RlZC4gKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIGN1cnJlbnRGb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIFwiTXkgRmlsZXNcIiBvcHRpb24gYWRkZWQgdG8gdGhlIHNpdGUgbGlzdCBieSBkZWZhdWx0LlxuICAgICAqIFNlZSB0aGUgW1NpdGVzIERyb3Bkb3duIGNvbXBvbmVudF0oc2l0ZXMtZHJvcGRvd24uY29tcG9uZW50Lm1kKVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcGRvd25IaWRlTXlGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHNpdGUgZm9yIHNpdGUgZHJvcGRvd24uIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGBzaXRlTGlzdGAuXG4gICAgICogcHJvcGVydHkgb2YgdGhlIFNpdGVzIERyb3Bkb3duIGNvbXBvbmVudCAoc2VlIGl0cyBkb2MgcGFnZVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duU2l0ZUxpc3Q6IFNpdGVQYWdpbmcgPSBudWxsO1xuXG4gICAgX3Jvd0ZpbHRlcjogUm93RmlsdGVyID0gZGVmYXVsdFZhbGlkYXRpb247XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gKndoZXJlKiBmaWx0ZXIgZnVuY3Rpb24uIFNlZSB0aGVcbiAgICAgKiBEb2N1bWVudCBMaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2hlcmU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByb3cgZmlsdGVyIGZ1bmN0aW9uLiBTZWUgdGhlXG4gICAgICogW1JvdyBGaWx0ZXIgTW9kZWxdKHJvdy1maWx0ZXIubW9kZWwubWQpIHBhZ2VcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByb3dGaWx0ZXIocm93RmlsdGVyOiBSb3dGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVSb3dGaWx0ZXIocm93RmlsdGVyKTtcbiAgICB9XG5cbiAgICBnZXQgcm93RmlsdGVyKCk6IFJvd0ZpbHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dGaWx0ZXI7XG4gICAgfVxuXG4gICAgX2V4Y2x1ZGVTaXRlQ29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBsaXN0IG9mIHNpdGUgY29udGVudCBjb21wb25lbnRJZHMuXG4gICAgICogVXNlZCB0byBmaWx0ZXIgb3V0IHRoZSBjb3JyZXNwb25kaW5nIGl0ZW1zIGZyb20gdGhlIGRpc3BsYXllZCBub2Rlc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGV4Y2x1ZGVTaXRlQ29udGVudChleGNsdWRlU2l0ZUNvbnRlbnQ6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudCA9IGV4Y2x1ZGVTaXRlQ29udGVudDtcbiAgICAgICAgdGhpcy5jcmVhdGVSb3dGaWx0ZXIodGhpcy5fcm93RmlsdGVyKTtcbiAgICB9XG5cbiAgICBnZXQgZXhjbHVkZVNpdGVDb250ZW50KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gaW1hZ2UgcmVzb2x2ZXIgZnVuY3Rpb24uIFNlZSB0aGVcbiAgICAgKiBbSW1hZ2UgUmVzb2x2ZXIgTW9kZWxdKGltYWdlLXJlc29sdmVyLm1vZGVsLm1kKSBwYWdlXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbWFnZVJlc29sdmVyOiBJbWFnZVJlc29sdmVyID0gbnVsbDtcblxuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgc2hvd24gcGVyIHBhZ2UgaW4gdGhlIGxpc3QuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5ERUZBVUxUX1BBR0lOQVRJT04ubWF4SXRlbXM7XG5cbiAgICAvKiogRGVmaW5lIHRoZSBzZWxlY3Rpb24gbW9kZSBmb3IgZG9jdW1lbnQgbGlzdC4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZSBzaW5nbGUgb3IgbXVsdGlwbGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkZWNpZGUgaWYgdGhlIHNlbGVjdGVkIG5vZGUgaGFzIHBlcm1pc3Npb24gdG8gYmUgc2VsZWN0ZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgdHJ1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzU2VsZWN0aW9uVmFsaWQ6IFZhbGlkYXRpb25GdW5jdGlvbiA9IGRlZmF1bHRWYWxpZGF0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtYXRpb24gdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBjaG9zZW4vZm9sZGVyIG5vZGUgYmVmb3JlIGJ1aWxkaW5nIHRoZVxuICAgICAqIGJyZWFkY3J1bWIgVUkuIENhbiBiZSB1c2VmdWwgd2hlbiBjdXN0b20gZm9ybWF0dGluZyBpcyBuZWVkZWQgZm9yIHRoZSBicmVhZGNydW1iLlxuICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoZSBwYXRoIGVsZW1lbnRzIGZyb20gdGhlIG5vZGUgdGhhdCBhcmUgdXNlZCB0byBidWlsZCB0aGVcbiAgICAgKiBicmVhZGNydW1iIHVzaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBicmVhZGNydW1iVHJhbnNmb3JtOiAobm9kZSkgPT4gYW55O1xuXG4gICAgLyoqIFRvZ2dsZSBzZWFyY2ggaW5wdXQgcmVuZGVyaW5nICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2hvd1NlYXJjaCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoRmllbGQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93U2VhcmNoRmllbGQ7XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZSBzaXRlcyBsaXN0IGRyb3Bkb3duIHJlbmRlcmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dEcm9wZG93blNpdGVMaXN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dTaXRlTGlzdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNob3dEcm9wZG93blNpdGVMaXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93U2l0ZUxpc3Q7XG4gICAgfVxuXG4gICAgLyoqIFNob3dzIHRoZSBmaWxlcyBhbmQgZm9sZGVycyBpbiB0aGUgc2VhcmNoIHJlc3VsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dGaWxlc0luUmVzdWx0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzaG93RmlsZXNRdWVyeSA9IGBUWVBFOidjbTpmb2xkZXInJHt2YWx1ZSA/IGAgT1IgVFlQRTonY206Y29udGVudCdgIDogJyd9YDtcbiAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5hZGRGaWx0ZXJRdWVyeShzaG93RmlsZXNRdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2hvd3MgdGhlIG5vZGUgY291bnRlciBpbiB0aGUgYnJlYWRjcnVtYiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dOb2RlQ291bnRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNob3dDb3VudGVyID0gdmFsdWUgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dOb2RlQ291bnRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NvdW50ZXI7XG4gICAgfVxuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBoYXMgY2hvc2VuIGFuIGl0ZW0uICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgbmF2aWdhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJ5RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBzZWxlY3Qgc2l0ZSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNpdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gc2VhcmNoIGlzIHJ1bm5pbmcuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd2luZ1NlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gY3VycmVudCBmb2xkZXIgbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGN1cnJlbnRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGU+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGZvbGRlciBsb2FkZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9sZGVyTG9hZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZG9jdW1lbnRMaXN0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBkb2N1bWVudExpc3Q6IERvY3VtZW50TGlzdENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoSGlnaGxpZ2h0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGhpZ2hsaWdodGVyOiBIaWdobGlnaHREaXJlY3RpdmU7XG5cbiAgICBub2RlUGFnaW5nOiBOb2RlUGFnaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgc2l0ZUlkOiBudWxsIHwgc3RyaW5nO1xuICAgIGJyZWFkY3J1bWJSb290SWQ6IG51bGwgfCBzdHJpbmc7XG4gICAgc2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG4gICAgc2hvd2luZ1NlYXJjaFJlc3VsdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsb2FkaW5nU2VhcmNoUmVzdWx0czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGluRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gICAgX2Nob3Nlbk5vZGU6IE5vZGVbXSA9IG51bGw7XG4gICAgc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb246IE5vZGVbXSA9IG51bGw7XG4gICAgZm9sZGVySWRUb1Nob3c6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGJyZWFkY3J1bWJGb2xkZXJUaXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgc3RhcnRTaXRlR3VpZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaGFzVmFsaWRRdWVyeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5OZXZlcjtcblxuICAgIEBWaWV3Q2hpbGQoSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudDogSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50O1xuXG4gICAgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBkZWJvdW5jZVNlYXJjaDogbnVtYmVyID0gMjAwO1xuICAgIHNlYXJjaElucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgICB0YXJnZXQ6IFBhZ2luYXRlZENvbXBvbmVudDtcbiAgICBwcmVzZWxlY3RlZE5vZGVzOiBOb2RlRW50cnlbXSA9IFtdO1xuICAgIGN1cnJlbnRVcGxvYWRCYXRjaDogTm9kZUVudHJ5W10gPSBbXTtcblxuICAgIHNvcnRpbmc6IHN0cmluZ1tdIHwgRGF0YVNvcnRpbmcgPSBbJ2NyZWF0ZWRBdCcsICdkZXNjJ107XG5cbiAgICBzZWFyY2hQYW5lbEV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21SZXNvdXJjZXNTZXJ2aWNlOiBDdXN0b21SZXNvdXJjZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2U6IFNlYXJjaFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub2Rlc0FwaVNlcnZpY2U6IE5vZGVzQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNpdGVzU2VydmljZTogU2l0ZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2U6IENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBzZXQgY2hvc2VuTm9kZSh2YWx1ZTogTm9kZVtdKSB7XG4gICAgICAgIHRoaXMuX2Nob3Nlbk5vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGNob3Nlbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaG9zZW5Ob2RlO1xuICAgIH1cblxuICAgIGdldCBlbXB0eUxpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eUxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9zZW5Ob2RlPy5sZW5ndGggfHwgMDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlU2VhcmNoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gc2VhcmNoVmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnVzZXJRdWVyeSA9IHNlYXJjaFZhbHVlLmxlbmd0aCA+IDAgPyBgJHtzZWFyY2hWYWx1ZX0qYCA6IHNlYXJjaFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoc2VhcmNoUmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbGlkUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZURpYWxvZ0Zvck5ld1NlYXJjaChzZWFyY2hSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuZXhlY3V0ZShmYWxzZSwgc2VhcmNoUmVxdWVzdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsaWRRdWVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb2xkZXJUb1Nob3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5leGVjdXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHJlc3VsdHM6IE5vZGVQYWdpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ZhbGlkUXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTZWFyY2hSZXN1bHRzKHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhZ1NpemUpID0+ICh0aGlzLnBhZ2VTaXplID0gcGFnU2l6ZSkpO1xuXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5kb2N1bWVudExpc3Q7XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN0cmljdFJvb3RUb0N1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYlJvb3RJZCA9IHRoaXMuY3VycmVudEZvbGRlcklkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2l0ZUlkID0gdGhpcy5jdXJyZW50Rm9sZGVySWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhcnRTaXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJUcmFuc2Zvcm0gPSB0aGlzLmJyZWFkY3J1bWJUcmFuc2Zvcm0gPyB0aGlzLmJyZWFkY3J1bWJUcmFuc2Zvcm0gOiBudWxsO1xuICAgICAgICB0aGlzLmlzU2VsZWN0aW9uVmFsaWQgPSB0aGlzLmlzU2VsZWN0aW9uVmFsaWQgPyB0aGlzLmlzU2VsZWN0aW9uVmFsaWQgOiBkZWZhdWx0VmFsaWRhdGlvbjtcbiAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWRFdmVudCgpO1xuICAgICAgICB0aGlzLm9uRmlsZVVwbG9hZERlbGV0ZWRFdmVudCgpO1xuICAgICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLnNldFNlYXJjaFNjb3BlVG9Ob2RlcygpO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LiRmb2xkZXJOb2RlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoY3VycmVudE5vZGU6IE5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlci5lbWl0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VhcmNoUGFuZWwoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUGFuZWxFeHBhbmRlZCA9ICF0aGlzLnNlYXJjaFBhbmVsRXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgaGFzQ3VzdG9tTW9kZWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlPy5jdXN0b21Nb2RlbHM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZpbGVVcGxvYWRFdmVudCgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWRDb21wbGV0ZVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZmlsZVVwbG9hZEV2ZW50OiBGaWxlVXBsb2FkQ29tcGxldGVFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVwbG9hZEJhdGNoLnB1c2goZmlsZVVwbG9hZEV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRTZXJ2aWNlLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZWxlY3RlZE5vZGVzID0gdGhpcy5nZXRQcmVzZWxlY3ROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVwbG9hZEJhdGNoID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRmlsZVVwbG9hZERlbGV0ZWRFdmVudCgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWREZWxldGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZGVsZXRlZEZpbGVFdmVudDogRmlsZVVwbG9hZERlbGV0ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC51bnNlbGVjdFJvd0Zyb21Ob2RlSWQoZGVsZXRlZEZpbGVFdmVudC5maWxlLmRhdGEuZW50cnkuaWQpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3QucmVsb2FkV2l0aG91dFJlc2V0dGluZ1NlbGVjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0YXJ0U2l0ZSgpIHtcbiAgICAgICAgdGhpcy5ub2Rlc0FwaVNlcnZpY2UuZ2V0Tm9kZSh0aGlzLmN1cnJlbnRGb2xkZXJJZCkuc3Vic2NyaWJlKChzdGFydE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFydFNpdGVHdWlkID0gdGhpcy5zaXRlc1NlcnZpY2UuZ2V0U2l0ZU5hbWVGcm9tTm9kZVBhdGgoc3RhcnROb2RlRW50cnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRTaXRlR3VpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2l0ZXNTZXJ2aWNlLmdldFNpdGUodGhpcy5zdGFydFNpdGVHdWlkKS5zdWJzY3JpYmUoKHN0YXJ0U2l0ZUVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFNpdGVFbnRyeSBpbnN0YW5jZW9mIFNpdGVFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXRlQ2hhbmdlLmVtaXQoc3RhcnRTaXRlRW50cnkuZW50cnkudGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUm93RmlsdGVyKGZpbHRlcj86IFJvd0ZpbHRlcikge1xuICAgICAgICBpZiAoIWZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVyID0gKCkgPT4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yb3dGaWx0ZXIgPSAodmFsdWU6IFNoYXJlRGF0YVJvdywgaW5kZXg6IG51bWJlciwgYXJyYXk6IFNoYXJlRGF0YVJvd1tdKSA9PlxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlLCBpbmRleCwgYXJyYXkpICYmICF0aGlzLmlzRXhjbHVkZWRTaXRlQ29udGVudCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4Y2x1ZGVkU2l0ZUNvbnRlbnQocm93OiBTaGFyZURhdGFSb3cpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByb3cubm9kZS5lbnRyeTtcbiAgICAgICAgaWYgKHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudD8ubGVuZ3RoICYmIGVudHJ5Py5wcm9wZXJ0aWVzPy5bJ3N0OmNvbXBvbmVudElkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkSXRlbSA9IHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudC5maW5kKChpZDogc3RyaW5nKSA9PiBlbnRyeS5wcm9wZXJ0aWVzWydzdDpjb21wb25lbnRJZCddID09PSBpZCk7XG4gICAgICAgICAgICByZXR1cm4gISFleGNsdWRlZEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNpdGUgYXR0cmlidXRlIGFuZCBzdGFydHMgYSBuZXcgc2VhcmNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvc2VuU2l0ZSBTaXRlRW50cnkgdG8gc2VhcmNoIHdpdGhpblxuICAgICAqL1xuICAgIHNpdGVDaGFuZ2VkKGNob3NlblNpdGU6IFNpdGVFbnRyeSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNpdGVJZCA9IGNob3NlblNpdGUuZW50cnkuZ3VpZDtcbiAgICAgICAgdGhpcy5zZXRUaXRsZUlmQ3VzdG9tU2l0ZShjaG9zZW5TaXRlKTtcbiAgICAgICAgdGhpcy5zaXRlQ2hhbmdlLmVtaXQoY2hvc2VuU2l0ZS5lbnRyeS50aXRsZSk7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY3VycmVudCBicmVhZGNydW1iIGZvbGRlciBub2RlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgYWN0dWFsbHkgc2VsZWN0ZWR8ZW50ZXJlZCBmb2xkZXIgbm9kZSBvciBudWxsIGluIGNhc2Ugb2Ygc2VhcmNoaW5nIGZvciB0aGUgYnJlYWRjcnVtYlxuICAgICAqL1xuICAgIGdldCBicmVhZGNydW1iRm9sZGVyTm9kZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgICAgIGxldCBmb2xkZXJOb2RlOiBOb2RlO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzICYmIHRoaXMuc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9sZGVyTm9kZSA9IHRoaXMuc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb25bMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2xkZXJOb2RlID0gdGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb2xkZXJOb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIHRoZSBkaWFsb2cgZm9yIGEgbmV3IHNlYXJjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHNlYXJjaFJlcXVlc3QgcmVxdWVzdCBvcHRpb25zXG4gICAgICovXG4gICAgcHJlcGFyZURpYWxvZ0Zvck5ld1NlYXJjaChzZWFyY2hSZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gc2VhcmNoUmVxdWVzdCA/IG51bGwgOiB0aGlzLmRvY3VtZW50TGlzdDtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudC5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRkQ29ycmVzcG9uZGluZ05vZGVJZHNRdWVyeSgpO1xuICAgICAgICB0aGlzLnJlc2V0Q2hvc2VuTm9kZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBzZWFyY2ggaW5wdXQgYW5kIHJlc2V0IHRvIGxhc3QgZm9sZGVyIG5vZGUgaW4gd2hpY2ggc2VhcmNoIHdhcyBwZXJmb3JtZWRcbiAgICAgKi9cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51c2VyUXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgZm9sZGVyIHRvIGJlIHNob3duIHdpdGggdGhlIHNpdGUgc2VsZWN0aW9uIG9yIHRoZSBpbml0aWFsIGxhbmRpbmcgZm9sZGVyXG4gICAgICovXG4gICAgcmVzZXRGb2xkZXJUb1Nob3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSB0aGlzLnNpdGVJZCB8fCB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgc2VhcmNoIGlucHV0IGFuZCBzZWFyY2ggcmVsYXRlZCBkYXRhXG4gICAgICovXG4gICAgY2xlYXJTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgICAgICB0aGlzLm5vZGVQYWdpbmcgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLnJlc2V0Q2hvc2VuTm9kZSgpO1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaC5lbWl0KHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ29ycmVzcG9uZGluZ05vZGVJZHNRdWVyeSgpIHtcbiAgICAgICAgbGV0IGV4dHJhUGFyZW50RmlsdGVyaW5nID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5oYXNDb3JyZXNwb25kaW5nTm9kZUlkcyh0aGlzLnNpdGVJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5nZXRDb3JyZXNwb25kaW5nTm9kZUlkcyh0aGlzLnNpdGVJZCkuc3Vic2NyaWJlKChub2RlSWRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJZHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlSWRzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChpZCkgPT4gaWQgIT09IHRoaXMuc2l0ZUlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKGV4dHJhSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVBhcmVudEZpbHRlcmluZyArPSBgIE9SIEFOQ0VTVE9SOid3b3Jrc3BhY2U6Ly9TcGFjZXNTdG9yZS8ke2V4dHJhSWR9J2A7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RmlsdGVyaW5nID0gdGhpcy5zaXRlSWQgPyBgQU5DRVNUT1I6J3dvcmtzcGFjZTovL1NwYWNlc1N0b3JlLyR7dGhpcy5zaXRlSWR9JyR7ZXh0cmFQYXJlbnRGaWx0ZXJpbmd9YCA6ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5hZGRGaWx0ZXJRdWVyeShwYXJlbnRGaWx0ZXJpbmcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGaWx0ZXJpbmcgPSB0aGlzLnNpdGVJZCA/IGBBTkNFU1RPUjond29ya3NwYWNlOi8vU3BhY2VzU3RvcmUvJHt0aGlzLnNpdGVJZH0nYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmFkZEZpbHRlclF1ZXJ5KHBhcmVudEZpbHRlcmluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlYXJjaFNjb3BlVG9Ob2RlcygpIHtcbiAgICAgICAgY29uc3Qgc2NvcGU6IFJlcXVlc3RTY29wZSA9IHtcbiAgICAgICAgICAgIGxvY2F0aW9uczogJ25vZGVzJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2Uuc2V0U2NvcGUoc2NvcGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIHJlc3VsdHMgb2YgdGhlIHNlYXJjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdHMgU2VhcmNoIHJlc3VsdHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHNob3dTZWFyY2hSZXN1bHRzKHJlc3VsdHM6IE5vZGVQYWdpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93aW5nU2VhcmNoLmVtaXQodGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyk7XG5cbiAgICAgICAgdGhpcy5ub2RlUGFnaW5nID0gcmVzdWx0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHNob3dpbmdTZWFyY2hSZXN1bHRzIHN0YXRlIHRvIGJlIGFibGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHNlYXJjaCByZXN1bHRzIG9yIGZvbGRlciByZXN1bHRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGV2ZW50IG5vZGUgZXZlbnRcbiAgICAgKi9cbiAgICBvbkZvbGRlckNoYW5nZSgkZXZlbnQ6IE5vZGVFbnRyeUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSAkZXZlbnQudmFsdWUuaWQ7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJyZWFkY3J1bWJGb2xkZXJUaXRsZSA9IG51bGw7XG4gICAgICAgIHRoaXMucHJlc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkNoYW5nZS5lbWl0KCRldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gc2V0IHRoZSBjdXJyZW50bHkgbG9hZGVkIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlUGFnaW5nIHBhZ2luYXRpb24gbW9kZWxcbiAgICAgKi9cbiAgICBvbkZvbGRlckxvYWRlZChub2RlUGFnaW5nOiBOb2RlUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZW1wdHlMaXN0ID0gIXRoaXMuZG9jdW1lbnRMaXN0LmRhdGEuZ2V0Um93cygpLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkFmdGVyUm93RmlsdGVyKG5vZGVQYWdpbmcpO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0ZW1wdE5vZGVTZWxlY3Rpb24odGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2xkZXJMb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgcGFnaW5hdGlvbi5oYXNNb3JlSXRlbXMgdG8gZmFsc2UgYWZ0ZXIgZmlsdGVyaW5nIG9ubHkgZm9sZGVycyBkdXJpbmcgJ0NPUFknIGFuZCAnTU9WRScgYWN0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVBhZ2luZyBwYWdpbmF0aW9uIG1vZGVsXG4gICAgICovXG4gICAgdXBkYXRlUGFnaW5hdGlvbkFmdGVyUm93RmlsdGVyKG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRMaXN0LmRhdGEuZ2V0Um93cygpLmxlbmd0aCA8IG5vZGVQYWdpbmcubGlzdC5wYWdpbmF0aW9uLm1heEl0ZW1zKSB7XG4gICAgICAgICAgICBub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbi5oYXNNb3JlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBicmVhZGNydW1iIGhhcyB0byBiZSBzaG93biBvciBub3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBuZWVkcyB0byBzaG93IHRoZSBicmVhZGNydW1iLCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIHNob3dCcmVhZGNydW1icygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzIHx8IHRoaXMuY2hvc2VuTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyB0aGUgbmV4dCBiYXRjaCBvZiBzZWFyY2ggcmVzdWx0c1xuICAgICAqXG4gICAgICogQHBhcmFtIHBhZ2luYXRpb24gUGFnaW5hdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBnZXROZXh0UGFnZU9mU2VhcmNoKHBhZ2luYXRpb246IFBhZ2luYXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IHRydWU7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5wYWdpbmcubWF4SXRlbXMgPSBwYWdpbmF0aW9uLm1heEl0ZW1zO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UucGFnaW5nLnNraXBDb3VudCA9IHBhZ2luYXRpb24uc2tpcENvdW50O1xuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBub2RlIGFzIGNob3NlbiBpZiBpdCBoYXMgdGhlIHJpZ2h0IHBlcm1pc3Npb24sIGNsZWFycyB0aGUgc2VsZWN0aW9uIG90aGVyd2lzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJ5IG5vZGUgZW50cnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGF0dGVtcHROb2RlU2VsZWN0aW9uKGVudHJ5OiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmIChlbnRyeSAmJiB0aGlzLmlzU2VsZWN0aW9uVmFsaWQoZW50cnkpICYmICF0aGlzLmlzQWN0aW9uRGlzYWJsZWRGb3JGb2xkZXIodGhpcy5kb2N1bWVudExpc3QuY3VycmVudEZvbGRlcklkKSkge1xuICAgICAgICAgICAgdGhpcy5jaG9zZW5Ob2RlID0gW2VudHJ5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25EaXNhYmxlZEZvckZvbGRlcihmb2xkZXJJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVBY3Rpb25Gb2xkZXJMaXN0LmluY2x1ZGVzKGZvbGRlcklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGNob3NlbiBub2RlXG4gICAgICovXG4gICAgcmVzZXRDaG9zZW5Ob2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNob3Nlbk5vZGUgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0IGZpbHRlcnMgYW5kIGVtaXQgdGhlIHNlbGVjdGlvbiBjb21pbmcgZnJvbSB0aGUgZG9jdW1lbnQgbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVzRW50cmllcyBzZWxlY3RlZCBub2Rlc1xuICAgICAqL1xuICAgIG9uQ3VycmVudFNlbGVjdGlvbihub2Rlc0VudHJpZXM6IE5vZGVFbnRyeVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkTm9kZXNFbnRpdHkgPSBub2Rlc0VudHJpZXMuZmlsdGVyKChub2RlKSA9PiB0aGlzLmlzU2VsZWN0aW9uVmFsaWQobm9kZS5lbnRyeSkpO1xuICAgICAgICB0aGlzLmNob3Nlbk5vZGUgPSB2YWxpZE5vZGVzRW50aXR5Lm1hcCgobm9kZSkgPT4gbm9kZS5lbnRyeSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24gPSBub2Rlc0VudHJpZXMubWFwKChub2RlKSA9PiBub2RlLmVudHJ5KTtcbiAgICB9XG5cbiAgICBzZXRUaXRsZUlmQ3VzdG9tU2l0ZShzaXRlOiBTaXRlRW50cnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5pc0N1c3RvbVNvdXJjZShzaXRlLmVudHJ5Lmd1aWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJGb2xkZXJUaXRsZSA9IHNpdGUuZW50cnkudGl0bGU7XG4gICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZS5wYXRoLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyTm9kZS5uYW1lID0gc2l0ZS5lbnRyeS50aXRsZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC5mb2xkZXJOb2RlLnBhdGguZWxlbWVudHMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyVGl0bGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzUHJlc2VsZWN0Tm9kZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbGVjdGVkTm9kZXM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBnZXRQcmVzZWxlY3ROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk6IE5vZGVFbnRyeVtdIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkTm9kZXM6IE5vZGVFbnRyeVtdID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVwbG9hZEJhdGNoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlcyA9IFt0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaFt0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaC5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSB0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZE5vZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UucGFnaW5nID0ge1xuICAgICAgICAgICAgbWF4SXRlbXM6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICBza2lwQ291bnQ6IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLnNraXBDb3VudFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRQbGFjZWhvbGRlcj1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyAnTk9ERV9TRUxFQ1RPUi5TRUFSQ0gnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgaWQ9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtaW5wdXRcIj5cblxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzZWFyY2hUZXJtLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgbWF0U3VmZml4IChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWlucHV0LWljb25cIlxuICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXNlYXJjaC1jbGVhclwiPmNsZWFyXG4gICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGVybS5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1pbnB1dC1pY29uXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtaWNvblwiPnNlYXJjaFxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8YWRmLXNpdGVzLWRyb3Bkb3duXG4gICAgICAgICpuZ0lmPVwic2hvd0Ryb3Bkb3duU2l0ZUxpc3RcIlxuICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGhcIlxuICAgICAgICAoY2hhbmdlKT1cInNpdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ05PREVfU0VMRUNUT1IuU0VMRUNUX0xJQlJBUlknXCJcbiAgICAgICAgW2hpZGVNeUZpbGVzXT1cImRyb3Bkb3duSGlkZU15RmlsZXNcIlxuICAgICAgICBbc2l0ZUxpc3RdPVwiZHJvcGRvd25TaXRlTGlzdFwiXG4gICAgICAgIFt2YWx1ZV09XCJzdGFydFNpdGVHdWlkXCJcbiAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXNpdGVzLWNvbWJvXCIgLz5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQ3VzdG9tTW9kZWxzKClcIlxuICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdG9nZ2xlLXNlYXJjaC1wYW5lbC1idXR0b25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaFBhbmVsKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmZpbHRlcl9saXN0PC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ1NFQVJDSC5TRUFSQ0hfSEVBREVSLlRJVExFJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXNlYXJjaC1wYW5lbC1jb250YWluZXJcIj5cbiAgICAgICAgPGFkZi1zZWFyY2gtcGFuZWwgKm5nSWY9XCJzZWFyY2hQYW5lbEV4cGFuZGVkXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItZG9jdW1lbnQtbGlzdC1jb250YWluZXJcIj5cbiAgICA8YWRmLXRvb2xiYXI+XG4gICAgICAgIDxhZGYtdG9vbGJhci10aXRsZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0JyZWFkY3J1bWJzKClcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJhZGYtc2VhcmNoLXJlc3VsdHMtbGFiZWxcIj57eyAnTk9ERV9TRUxFQ1RPUi5TRUFSQ0hfUkVTVUxUUycgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YWRmLWRyb3Bkb3duLWJyZWFkY3J1bWIgKm5nSWY9XCJzaG93QnJlYWRjcnVtYnMoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtYnJlYWRjcnVtYlwiXG4gICAgICAgICAgICAgICAgKG5hdmlnYXRlKT1cImNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZG9jdW1lbnRMaXN0XCJcbiAgICAgICAgICAgICAgICBbcm9vdElkXT1cImJyZWFkY3J1bWJSb290SWRcIlxuICAgICAgICAgICAgICAgIFt0cmFuc2Zvcm1dPVwiYnJlYWRjcnVtYlRyYW5zZm9ybVwiXG4gICAgICAgICAgICAgICAgW2ZvbGRlck5vZGVdPVwiYnJlYWRjcnVtYkZvbGRlck5vZGVcIlxuICAgICAgICAgICAgICAgIFtyb290XT1cImJyZWFkY3J1bWJGb2xkZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtYnJlYWRjcnVtYlwiIC8+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd05vZGVDb3VudGVyXCIgW2FkZi1ub2RlLWNvdW50ZXJdPVwiZ2V0U2VsZWN0ZWRDb3VudCgpXCIgLz5cbiAgICAgICAgPC9hZGYtdG9vbGJhci10aXRsZT5cbiAgICA8L2FkZi10b29sYmFyPlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0XCJcbiAgICAgICAgW2NsYXNzLmFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0LXNlYXJjaExheW91dF09XCJzaG93aW5nU2VhcmNoUmVzdWx0c1wiXG4gICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWxpc3RcIj5cbiAgICAgICAgPGFkZi1kb2N1bWVudC1saXN0XG4gICAgICAgICAgICAjZG9jdW1lbnRMaXN0XG4gICAgICAgICAgICBbYWRmLWhpZ2hsaWdodF09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgIGFkZi1oaWdobGlnaHQtc2VsZWN0b3I9XCIuYWRmLW5hbWUtbG9jYXRpb24tY2VsbC1uYW1lXCJcbiAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxuICAgICAgICAgICAgW25vZGVdPVwibm9kZVBhZ2luZ1wiXG4gICAgICAgICAgICBbcHJlc2VsZWN0Tm9kZXNdPVwicHJlc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICBbbWF4SXRlbXNdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgW3Jvd0ZpbHRlcl09XCJfcm93RmlsdGVyXCJcbiAgICAgICAgICAgIFtpbWFnZVJlc29sdmVyXT1cImltYWdlUmVzb2x2ZXJcIlxuICAgICAgICAgICAgW2N1cnJlbnRGb2xkZXJJZF09XCJmb2xkZXJJZFRvU2hvd1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgIFtjb250ZXh0TWVudUFjdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2NvbnRlbnRBY3Rpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFthbGxvd0Ryb3BGaWxlc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc29ydGluZ109XCJzb3J0aW5nXCJcbiAgICAgICAgICAgIHNvcnRpbmdNb2RlPVwic2VydmVyXCJcbiAgICAgICAgICAgIFt3aGVyZV09XCJ3aGVyZVwiXG4gICAgICAgICAgICAoZm9sZGVyQ2hhbmdlKT1cIm9uRm9sZGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKHJlYWR5KT1cIm9uRm9sZGVyTG9hZGVkKCRldmVudClcIlxuICAgICAgICAgICAgKG5vZGVTZWxlY3RlZCk9XCJvbkN1cnJlbnRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWxpc3QtZW1wdHldPVwiZW1wdHlMaXN0XCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1kb2N1bWVudC1saXN0XCI+XG5cbiAgICAgICAgICAgIDxhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIj57eyAnTk9ERV9TRUxFQ1RPUi5OT19SRVNVTFRTJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9hZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxkYXRhLWNvbHVtbnM+XG4gICAgICAgICAgICAgICAgPGRhdGEtY29sdW1uIGtleT1cIiR0aHVtYm5haWxcIiB0eXBlPVwiaW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCJuYW1lXCIgdHlwZT1cInRleHRcIiB0aXRsZT1cIkFERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5OQU1FXCIgY2xhc3M9XCJhZGYtZnVsbC13aWR0aCBhZGYtZWxsaXBzaXMtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbnRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLW5hbWUtbG9jYXRpb24tY2VsbCBbcm93XT1cImNvbnRleHQucm93XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2RhdGEtY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCJtb2RpZmllZEF0XCIgdHlwZT1cImRhdGVcIiB0aXRsZT1cIkFERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5NT0RJRklFRF9PTlwiIGZvcm1hdD1cInRpbWVBZ29cIiBjbGFzcz1cImFkZi1jb250ZW50LXNlbGVjdG9yLW1vZGlmaWVkLWNlbGxcIiAvPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCJjcmVhdGVkQnlVc2VyLmRpc3BsYXlOYW1lXCIgdHlwZT1cInRleHRcIiB0aXRsZT1cIkFERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5DUkVBVEVEX0JZXCIgY2xhc3M9XCJhZGYtY29udGVudC1zZWxlY3Rvci1tb2RpZmllci1jZWxsXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwidmlzaWJpbGl0eVwiIHR5cGU9XCJ0ZXh0XCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuU1RBVFVTXCIgY2xhc3M9XCJhZGYtY29udGVudC1zZWxlY3Rvci12aXNpYmlsaXR5LWNlbGxcIiAvPlxuICAgICAgICAgICAgPC9kYXRhLWNvbHVtbnM+XG5cbiAgICAgICAgPC9hZGYtZG9jdW1lbnQtbGlzdD5cblxuICAgICAgICA8YWRmLWluZmluaXRlLXBhZ2luYXRpb25cbiAgICAgICAgICAgIFt0YXJnZXRdPVwidGFyZ2V0XCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdTZWFyY2hSZXN1bHRzXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJnZXROZXh0UGFnZU9mU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXNlYXJjaC1wYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICB7eyAnQURGLURPQ1VNRU5ULUxJU1QuTEFZT1VULkxPQURfTU9SRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hZGYtaW5maW5pdGUtcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==