@eo-sdk/client 10.7.0-rc.5 → 11.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (856) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  2. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +1 -1
  3. package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts +1 -1
  4. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts +1 -1
  5. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.d.ts +1 -1
  6. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts +1 -1
  7. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts +1 -1
  8. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts +1 -1
  9. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.d.ts +1 -1
  10. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts +1 -1
  11. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.d.ts +1 -1
  12. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts +1 -1
  13. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.d.ts +1 -1
  14. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts +1 -1
  15. package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts +1 -1
  16. package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
  17. package/app/eo-framework/accordion/simple-accordion/simple-accordion.component.d.ts +1 -1
  18. package/app/eo-framework/actions/action.module.d.ts.map +1 -1
  19. package/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.d.ts +1 -1
  20. package/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.d.ts +1 -1
  21. package/app/eo-framework/actions/actions/cancel-signing-action/cancel-signing/cancel-signing.component.d.ts +1 -1
  22. package/app/eo-framework/actions/actions/clipboard/clipboard-object-action/clipboard-object-action.component.d.ts +1 -1
  23. package/app/eo-framework/actions/actions/custom-actions/custom-actions.component.d.ts +1 -1
  24. package/app/eo-framework/actions/actions/delete-action/delete/delete.component.d.ts +1 -1
  25. package/app/eo-framework/actions/actions/delete-content-action/delete-content/delete-content.component.d.ts +1 -1
  26. package/app/eo-framework/actions/actions/download-action/download-object-action/download-object-action.component.d.ts +1 -1
  27. package/app/eo-framework/actions/actions/email/email/email.component.d.ts +1 -1
  28. package/app/eo-framework/actions/actions/finalize/finalize-object-action/finalize-object-action.component.d.ts +1 -1
  29. package/app/eo-framework/actions/actions/open-document-action/open-document-action.component.d.ts +1 -1
  30. package/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.d.ts +1 -1
  31. package/app/eo-framework/actions/actions/signature-action/sequence-list-item/sequence-list-item.component.d.ts +1 -1
  32. package/app/eo-framework/actions/actions/workflow-action/simple-workflow-action.component.d.ts +1 -1
  33. package/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.d.ts +1 -1
  34. package/app/eo-framework/actions/actions/workflow-action/workflow-action.component.d.ts +1 -1
  35. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts +1 -1
  36. package/app/eo-framework/app-shell/app-bar/context-search/context-search.component.d.ts +1 -1
  37. package/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.d.ts +1 -1
  38. package/app/eo-framework/cta/component/cta.component.d.ts +1 -1
  39. package/app/eo-framework/form-elements/checkbox/checkbox.component.d.ts +1 -1
  40. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts +1 -1
  41. package/app/eo-framework/form-elements/date/date.component.d.ts +1 -1
  42. package/app/eo-framework/form-elements/date/year-range/year-range.directive.d.ts +1 -1
  43. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts +1 -1
  44. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +1 -1
  45. package/app/eo-framework/form-elements/form-input/form-input.component.d.ts +1 -1
  46. package/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.d.ts +1 -1
  47. package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts +1 -1
  48. package/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.d.ts +1 -1
  49. package/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.d.ts +1 -1
  50. package/app/eo-framework/form-elements/number/number.component.d.ts +1 -1
  51. package/app/eo-framework/form-elements/number-range/number-range.component.d.ts +1 -1
  52. package/app/eo-framework/form-elements/organization/organization.component.d.ts +1 -1
  53. package/app/eo-framework/form-elements/password/password.component.d.ts +1 -1
  54. package/app/eo-framework/form-elements/reference/reference.component.d.ts +1 -1
  55. package/app/eo-framework/form-elements/string/string.component.d.ts +1 -1
  56. package/app/eo-framework/grid/column-configurator/column-configurator.component.d.ts +1 -1
  57. package/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.d.ts +1 -1
  58. package/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.d.ts.map +1 -1
  59. package/app/eo-framework/grid/extensions/filter/abstract-filter.component.d.ts +3 -3
  60. package/app/eo-framework/grid/extensions/filter/abstract-filter.component.d.ts.map +1 -1
  61. package/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.d.ts +1 -1
  62. package/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.d.ts +1 -1
  63. package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts +3 -3
  64. package/app/eo-framework/grid/extensions/filter/text/text-filter.component.d.ts.map +1 -1
  65. package/app/eo-framework/grid/extensions/pagination/pagination.component.d.ts +1 -1
  66. package/app/eo-framework/grid/extensions/quick-filter/quick-filter.component.d.ts +1 -1
  67. package/app/eo-framework/grid/extensions/reset-filter/reset-filter.component.d.ts +1 -1
  68. package/app/eo-framework/grid/extensions/total-count/total-count.component.d.ts +1 -1
  69. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
  70. package/app/eo-framework/grid/grid.component.d.ts +6 -17
  71. package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
  72. package/app/eo-framework/grid/grid.module.d.ts +0 -3
  73. package/app/eo-framework/grid/grid.module.d.ts.map +1 -1
  74. package/app/eo-framework/grid/row-grouping/batchRemover.d.ts +13 -0
  75. package/app/eo-framework/grid/row-grouping/batchRemover.d.ts.map +1 -0
  76. package/app/eo-framework/grid/row-grouping/group-stage.d.ts +14 -14
  77. package/app/eo-framework/grid/row-grouping/group-stage.d.ts.map +1 -1
  78. package/app/eo-framework/grid/row-grouping/row-grouping.module.d.ts +1 -0
  79. package/app/eo-framework/grid/row-grouping/row-grouping.module.d.ts.map +1 -1
  80. package/app/eo-framework/inbox-details/duetimeInfo/duetimeInfo.component.d.ts +1 -1
  81. package/app/eo-framework/inbox-details/inbox-details.component.d.ts +1 -1
  82. package/app/eo-framework/list-container/list-container.component.d.ts +1 -1
  83. package/app/eo-framework/media/media.component.d.ts +1 -1
  84. package/app/eo-framework/object-details/edit-icon/edit-icon.component.d.ts +1 -1
  85. package/app/eo-framework/object-details/favorite-icon/favorite-icon.component.d.ts +1 -1
  86. package/app/eo-framework/object-details/object-details.component.d.ts +1 -1
  87. package/app/eo-framework/object-details/object-history/history-filter/history-filter.component.d.ts +1 -1
  88. package/app/eo-framework/object-details/object-history/object-history.component.d.ts +1 -1
  89. package/app/eo-framework/object-details/object-links/object-links.component.d.ts +1 -1
  90. package/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.d.ts +1 -1
  91. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts +1 -1
  92. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +4 -1
  93. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
  94. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts +1 -1
  95. package/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.d.ts +1 -1
  96. package/app/eo-framework/object-form/object-form/object-form.component.d.ts +1 -1
  97. package/app/eo-framework/object-form/object-form-edit/object-form-edit.component.d.ts +1 -1
  98. package/app/eo-framework/object-state-details/object-state-details.component.d.ts +1 -1
  99. package/app/eo-framework/plugins/plugin.component.d.ts +2 -2
  100. package/app/eo-framework/plugins/plugins.module.d.ts.map +1 -1
  101. package/app/eo-framework/prepare-details/prepare-content-exists-info/prepare-content-exists-info.component.d.ts +1 -1
  102. package/app/eo-framework/prepare-details/prepare-details.component.d.ts +1 -1
  103. package/app/eo-framework/process/details/process-details.component.d.ts +1 -1
  104. package/app/eo-framework/process/history/process-history.component.d.ts +1 -1
  105. package/app/eo-framework/process/process-file/process-file.component.d.ts +1 -1
  106. package/app/eo-framework/process-form/process-form.component.d.ts +1 -1
  107. package/app/eo-framework/quick-search/quick-search/quick-search.component.d.ts +1 -1
  108. package/app/eo-framework/recyclebin-details/recyclebin-details.component.d.ts +1 -1
  109. package/app/eo-framework/result-list/result-list.component.d.ts +1 -1
  110. package/app/eo-framework/settings/change-password/change-password-form/change-password-form.component.d.ts +1 -1
  111. package/app/eo-framework/settings/permissions/permissions.component.d.ts +1 -1
  112. package/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.d.ts +1 -1
  113. package/app/eo-framework/shortcuts/shortcuts.directive.d.ts +1 -1
  114. package/app/eo-framework/stored-query/stored-query/stored-query.component.d.ts +1 -1
  115. package/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.d.ts +1 -1
  116. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts +1 -1
  117. package/app/eo-framework/tree/tree-node/tree-node.component.d.ts +1 -1
  118. package/app/eo-framework/tree/tree.component.d.ts +1 -1
  119. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +1 -1
  120. package/app/eo-framework/ui/eo-icon/eo-icon.component.d.ts +1 -1
  121. package/app/eo-framework/ui/error-message/error-message.component.d.ts +1 -1
  122. package/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.d.ts +1 -1
  123. package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts +1 -1
  124. package/app/eo-framework/ui/loading-spinner/loading-spinner.component.d.ts +1 -1
  125. package/app/eo-framework/ui/overlay/overlay.component.d.ts +1 -1
  126. package/app/eo-framework/ui/query-scope-select/query-scope-select.component.d.ts +1 -1
  127. package/app/eo-framework/ui/rtl-aware/rtl-aware.directive.d.ts +1 -1
  128. package/app/eo-framework/ui/signature-tab/signature-tab.component.d.ts +1 -1
  129. package/app/eo-framework/ui/user-avatar/user-avatar.component.d.ts +1 -1
  130. package/app/eo-framework/upload-overlay/upload-overlay-guard.service.d.ts +2 -2
  131. package/app/eo-framework/upload-overlay/upload-overlay-guard.service.d.ts.map +1 -1
  132. package/app/eo-framework/util/directive/prevent-double-click.directive.d.ts +1 -1
  133. package/app/eo-framework-core/api/grid.service.d.ts +4 -3
  134. package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
  135. package/app/eo-framework-core/pending-changes/pending-changes-guard.service.d.ts +1 -2
  136. package/app/eo-framework-core/pending-changes/pending-changes-guard.service.d.ts.map +1 -1
  137. package/app/eo-framework-core/route-guards/auth/auth-guard.service.d.ts +2 -2
  138. package/app/eo-framework-core/route-guards/auth/auth-guard.service.d.ts.map +1 -1
  139. package/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.d.ts +2 -2
  140. package/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.d.ts.map +1 -1
  141. package/assets/_default/i18n/de.json +1 -0
  142. package/assets/_default/i18n/en.json +1 -0
  143. package/esm2022/app/eo-client/about-state/about-state.component.mjs +81 -0
  144. package/esm2022/app/eo-client/dashboard/dashboard.component.mjs +305 -0
  145. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +288 -0
  146. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +265 -0
  147. package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +121 -0
  148. package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +125 -0
  149. package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +192 -0
  150. package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +164 -0
  151. package/esm2022/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +59 -0
  152. package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.mjs +8 -8
  153. package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +60 -0
  154. package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.mjs +42 -0
  155. package/esm2022/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +69 -0
  156. package/esm2022/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.mjs +43 -0
  157. package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +116 -0
  158. package/esm2022/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +123 -0
  159. package/{esm2020 → esm2022}/app/eo-client/eo-client-routing.module.mjs +5 -5
  160. package/esm2022/app/eo-client/eo-client.module.mjs +170 -0
  161. package/esm2022/app/eo-client/favorite-state/favorite-state.component.mjs +150 -0
  162. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +218 -0
  163. package/{esm2020 → esm2022}/app/eo-client/inbox-state/inbox-state-routing.module.mjs +5 -5
  164. package/{esm2020 → esm2022}/app/eo-client/inbox-state/inbox-state.module.mjs +13 -13
  165. package/esm2022/app/eo-client/login/login.component.mjs +111 -0
  166. package/esm2022/app/eo-client/notifications-state/notifications-state.component.mjs +227 -0
  167. package/esm2022/app/eo-client/object-state/object-state/object-state.component.mjs +342 -0
  168. package/{esm2020 → esm2022}/app/eo-client/object-state/object-state-routing.module.mjs +5 -5
  169. package/esm2022/app/eo-client/object-state/object-state-service/object-state.service.mjs +134 -0
  170. package/{esm2020 → esm2022}/app/eo-client/object-state/object-state.module.mjs +11 -11
  171. package/esm2022/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +159 -0
  172. package/{esm2020 → esm2022}/app/eo-client/prepare-state/prepare-state-routing.module.mjs +5 -5
  173. package/{esm2020 → esm2022}/app/eo-client/prepare-state/prepare-state.module.mjs +15 -15
  174. package/esm2022/app/eo-client/process-state/process-state.component.mjs +330 -0
  175. package/esm2022/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +150 -0
  176. package/esm2022/app/eo-client/result-state/result-state.component.mjs +71 -0
  177. package/esm2022/app/eo-client/settings/settings.component.mjs +287 -0
  178. package/esm2022/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +209 -0
  179. package/esm2022/app/eo-client/version-state/version-state.component.mjs +142 -0
  180. package/{esm2020 → esm2022}/app/eo-framework/accordion/accordion.module.mjs +5 -5
  181. package/{esm2020 → esm2022}/app/eo-framework/accordion/simple-accordion/simple-accordion.component.mjs +4 -4
  182. package/{esm2020 → esm2022}/app/eo-framework/actions/action-menu/action-component-anchor/action-component-anchor.directive.mjs +5 -5
  183. package/esm2022/app/eo-framework/actions/action-menu/action-menu.component.mjs +208 -0
  184. package/esm2022/app/eo-framework/actions/action-service/action.service.mjs +185 -0
  185. package/esm2022/app/eo-framework/actions/action-target.mjs +28 -0
  186. package/esm2022/app/eo-framework/actions/action.module.mjs +269 -0
  187. package/esm2022/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +201 -0
  188. package/esm2022/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission-action.mjs +50 -0
  189. package/esm2022/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +134 -0
  190. package/esm2022/app/eo-framework/actions/actions/add-subscription-action/add-subscription-action.mjs +50 -0
  191. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/cancel-signing-action/cancel-signing/cancel-signing.component.mjs +6 -6
  192. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/cancel-signing-action/cancel-signing-action.mjs +5 -5
  193. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/clipboard/clipboard-action.mjs +5 -5
  194. package/esm2022/app/eo-framework/actions/actions/clipboard/clipboard-object-action/clipboard-object-action.component.mjs +95 -0
  195. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/copy-action/copy-action.mjs +5 -5
  196. package/esm2022/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +88 -0
  197. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/cut-action/cut-action.mjs +5 -5
  198. package/esm2022/app/eo-framework/actions/actions/delete-action/delete/delete.component.mjs +111 -0
  199. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-action/delete-action.mjs +5 -5
  200. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-action/delete-prepared-action.mjs +5 -5
  201. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-content-action/delete-content/delete-content.component.mjs +6 -6
  202. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/delete-content-action/delete-content-action.mjs +5 -5
  203. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/download-action/download-action.mjs +5 -5
  204. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/download-action/download-object-action/download-object-action.component.mjs +6 -6
  205. package/esm2022/app/eo-framework/actions/actions/email/email/email.component.mjs +97 -0
  206. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/email/email-action.mjs +5 -5
  207. package/esm2022/app/eo-framework/actions/actions/favorite-action/favorite-action.mjs +76 -0
  208. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/finalize/definalize-action.mjs +5 -5
  209. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/finalize/finalize-action.mjs +6 -6
  210. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/finalize/finalize-object-action/finalize-object-action.component.mjs +6 -6
  211. package/esm2022/app/eo-framework/actions/actions/open-context-action/open-context-action.mjs +56 -0
  212. package/esm2022/app/eo-framework/actions/actions/open-document-action/open-document-action.component.mjs +69 -0
  213. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/open-document-action/open-document-action.mjs +5 -5
  214. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/open-versions-action/open-versions-action.mjs +5 -5
  215. package/esm2022/app/eo-framework/actions/actions/remove-subscription-action/remove-subscription-action.mjs +45 -0
  216. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/restore-version-action/restore-version-action.mjs +5 -5
  217. package/esm2022/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +89 -0
  218. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/share-object-action/share-object-action.mjs +5 -5
  219. package/esm2022/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.mjs +184 -0
  220. package/esm2022/app/eo-framework/actions/actions/signature-action/sequence-list-item/sequence-list-item.component.mjs +53 -0
  221. package/esm2022/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +146 -0
  222. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/signature-action/signature-action.component.mjs +5 -5
  223. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/unlock-action/unlock-action.mjs +5 -5
  224. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/update-resubmission-action/update-resubmission-action.mjs +5 -5
  225. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/workflow-action/simple-workflow-action.component.mjs +5 -5
  226. package/esm2022/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +107 -0
  227. package/{esm2020 → esm2022}/app/eo-framework/actions/actions/workflow-action/workflow-action.component.mjs +5 -5
  228. package/esm2022/app/eo-framework/app-shell/app-bar/app-add/app-add-dialog/app-add-dialog.component.mjs +173 -0
  229. package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-bar/app-add/app-add.component.mjs +5 -5
  230. package/esm2022/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +203 -0
  231. package/esm2022/app/eo-framework/app-shell/app-bar/app-process/app-process.component.mjs +112 -0
  232. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +793 -0
  233. package/esm2022/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +46 -0
  234. package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.mjs +6 -6
  235. package/esm2022/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.mjs +42 -0
  236. package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-shell-routing.module.mjs +5 -5
  237. package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-shell.module.mjs +40 -40
  238. package/{esm2020 → esm2022}/app/eo-framework/cta/component/cta.component.mjs +4 -4
  239. package/{esm2020 → esm2022}/app/eo-framework/cta/cta.module.mjs +5 -5
  240. package/{esm2020 → esm2022}/app/eo-framework/eo-framework.module.mjs +110 -110
  241. package/{esm2020 → esm2022}/app/eo-framework/error/error.module.mjs +9 -9
  242. package/{esm2020 → esm2022}/app/eo-framework/error/error404/error404.component.mjs +4 -4
  243. package/{esm2020 → esm2022}/app/eo-framework/error/not-found/not-found.component.mjs +5 -5
  244. package/esm2022/app/eo-framework/form-elements/checkbox/checkbox.component.mjs +62 -0
  245. package/esm2022/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +312 -0
  246. package/esm2022/app/eo-framework/form-elements/date/date.component.mjs +101 -0
  247. package/esm2022/app/eo-framework/form-elements/date/year-range/year-range.directive.mjs +44 -0
  248. package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +184 -0
  249. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +303 -0
  250. package/{esm2020 → esm2022}/app/eo-framework/form-elements/form-elements.module.mjs +76 -76
  251. package/esm2022/app/eo-framework/form-elements/form-input/form-input.component.mjs +73 -0
  252. package/esm2022/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.mjs +35 -0
  253. package/esm2022/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +252 -0
  254. package/esm2022/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.mjs +253 -0
  255. package/esm2022/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.mjs +33 -0
  256. package/esm2022/app/eo-framework/form-elements/id-reference/service/reference-finder.service.mjs +106 -0
  257. package/esm2022/app/eo-framework/form-elements/number/number.component.mjs +171 -0
  258. package/esm2022/app/eo-framework/form-elements/number-range/number-range.component.mjs +138 -0
  259. package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +216 -0
  260. package/{esm2020 → esm2022}/app/eo-framework/form-elements/password/password.component.mjs +4 -4
  261. package/esm2022/app/eo-framework/form-elements/reference/reference.component.mjs +223 -0
  262. package/esm2022/app/eo-framework/form-elements/string/string.component.mjs +254 -0
  263. package/{esm2020 → esm2022}/app/eo-framework/frame/frame.component.mjs +5 -5
  264. package/esm2022/app/eo-framework/grid/column-configurator/column-configurator.component.mjs +211 -0
  265. package/esm2022/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +83 -0
  266. package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/empty/empty.component.mjs +4 -4
  267. package/esm2022/app/eo-framework/grid/extensions/filter/abstract-filter.component.mjs +65 -0
  268. package/esm2022/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +82 -0
  269. package/esm2022/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.mjs +85 -0
  270. package/esm2022/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +98 -0
  271. package/esm2022/app/eo-framework/grid/extensions/pagination/pagination.component.mjs +52 -0
  272. package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/quick-filter/quick-filter.component.mjs +6 -6
  273. package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/reset-filter/reset-filter.component.mjs +4 -4
  274. package/esm2022/app/eo-framework/grid/extensions/services/list-settings.service.mjs +42 -0
  275. package/esm2022/app/eo-framework/grid/extensions/total-count/total-count.component.mjs +36 -0
  276. package/esm2022/app/eo-framework/grid/filters/codesystem-filter.component.mjs +94 -0
  277. package/esm2022/app/eo-framework/grid/filters/datetime-filter.component.mjs +75 -0
  278. package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +96 -0
  279. package/esm2022/app/eo-framework/grid/filters/list-filter.component.mjs +54 -0
  280. package/esm2022/app/eo-framework/grid/filters/organization-filter.component.mjs +64 -0
  281. package/esm2022/app/eo-framework/grid/grid.component.mjs +420 -0
  282. package/esm2022/app/eo-framework/grid/grid.module.mjs +97 -0
  283. package/esm2022/app/eo-framework/grid/row-grouping/batchRemover.mjs +50 -0
  284. package/esm2022/app/eo-framework/grid/row-grouping/group-stage.mjs +623 -0
  285. package/{esm2020 → esm2022}/app/eo-framework/grid/row-grouping/row-grouping.module.mjs +2 -1
  286. package/{esm2020 → esm2022}/app/eo-framework/inbox-details/duetimeInfo/duetimeInfo.component.mjs +5 -5
  287. package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +457 -0
  288. package/esm2022/app/eo-framework/list-container/list-container.component.mjs +101 -0
  289. package/{esm2020 → esm2022}/app/eo-framework/list-container/list-container.module.mjs +7 -7
  290. package/esm2022/app/eo-framework/media/content-preview.service.mjs +42 -0
  291. package/esm2022/app/eo-framework/media/media.component.mjs +315 -0
  292. package/{esm2020 → esm2022}/app/eo-framework/media/media.module.mjs +13 -13
  293. package/{esm2020 → esm2022}/app/eo-framework/object-details/edit-icon/edit-icon.component.mjs +5 -5
  294. package/esm2022/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +104 -0
  295. package/esm2022/app/eo-framework/object-details/object-details.component.mjs +439 -0
  296. package/{esm2020 → esm2022}/app/eo-framework/object-details/object-details.module.mjs +42 -42
  297. package/esm2022/app/eo-framework/object-details/object-history/history-filter/history-filter-pipe/history-filter.pipe.mjs +32 -0
  298. package/{esm2020 → esm2022}/app/eo-framework/object-details/object-history/history-filter/history-filter.component.mjs +4 -4
  299. package/esm2022/app/eo-framework/object-details/object-history/object-history.component.mjs +82 -0
  300. package/esm2022/app/eo-framework/object-details/object-links/object-links.component.mjs +292 -0
  301. package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/form-element/form-element-template.directive.mjs +5 -5
  302. package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +123 -0
  303. package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +639 -0
  304. package/esm2022/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +238 -0
  305. package/esm2022/app/eo-framework/object-form/object-form/form-validation/form-validation.mjs +40 -0
  306. package/esm2022/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +81 -0
  307. package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +113 -0
  308. package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +267 -0
  309. package/esm2022/app/eo-framework/object-form/object-form/object-form.component.mjs +148 -0
  310. package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +216 -0
  311. package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +717 -0
  312. package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form.module.mjs +37 -37
  313. package/esm2022/app/eo-framework/object-state-details/object-state-details.component.mjs +135 -0
  314. package/{esm2020 → esm2022}/app/eo-framework/plugins/plugin.component.mjs +16 -16
  315. package/{esm2020 → esm2022}/app/eo-framework/plugins/plugin.directive.mjs +5 -5
  316. package/{esm2020 → esm2022}/app/eo-framework/plugins/plugin.service.mjs +6 -6
  317. package/esm2022/app/eo-framework/plugins/plugins.module.mjs +55 -0
  318. package/{esm2020 → esm2022}/app/eo-framework/prepare-details/prepare-content-exists-info/prepare-content-exists-info.component.mjs +4 -4
  319. package/esm2022/app/eo-framework/prepare-details/prepare-details.component.mjs +557 -0
  320. package/esm2022/app/eo-framework/process/details/process-details.component.mjs +226 -0
  321. package/{esm2020 → esm2022}/app/eo-framework/process/history/process-history.component.mjs +4 -4
  322. package/{esm2020 → esm2022}/app/eo-framework/process/process-file/process-file.component.mjs +6 -6
  323. package/esm2022/app/eo-framework/process-form/process-form.component.mjs +50 -0
  324. package/{esm2020 → esm2022}/app/eo-framework/process-form/process-form.module.mjs +11 -11
  325. package/esm2022/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +220 -0
  326. package/{esm2020 → esm2022}/app/eo-framework/quick-search/quick-search.module.mjs +11 -11
  327. package/esm2022/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +271 -0
  328. package/esm2022/app/eo-framework/result-list/result-list.component.mjs +369 -0
  329. package/{esm2020 → esm2022}/app/eo-framework/result-list/result-list.module.mjs +11 -11
  330. package/esm2022/app/eo-framework/settings/change-password/change-password-form/change-password-form.component.mjs +125 -0
  331. package/{esm2020 → esm2022}/app/eo-framework/settings/permissions/permissions.component.mjs +4 -4
  332. package/{esm2020 → esm2022}/app/eo-framework/settings/settings.module.mjs +13 -13
  333. package/esm2022/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.mjs +65 -0
  334. package/esm2022/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts.component.mjs +130 -0
  335. package/{esm2020 → esm2022}/app/eo-framework/shortcuts/shortcut.interface.mjs +1 -1
  336. package/{esm2020 → esm2022}/app/eo-framework/shortcuts/shortcuts.directive.mjs +5 -5
  337. package/{esm2020 → esm2022}/app/eo-framework/shortcuts/shortcuts.module.mjs +9 -9
  338. package/esm2022/app/eo-framework/shortcuts/shortcuts.service.mjs +45 -0
  339. package/esm2022/app/eo-framework/stored-query/stored-query/stored-query.component.mjs +225 -0
  340. package/esm2022/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.mjs +46 -0
  341. package/esm2022/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +501 -0
  342. package/{esm2020 → esm2022}/app/eo-framework/stored-query/stored-query.module.mjs +20 -20
  343. package/{esm2020 → esm2022}/app/eo-framework/tree/tree-node/tree-node.component.mjs +5 -5
  344. package/esm2022/app/eo-framework/tree/tree.component.mjs +281 -0
  345. package/{esm2020 → esm2022}/app/eo-framework/tree/tree.module.mjs +7 -7
  346. package/{esm2020 → esm2022}/app/eo-framework/ui/animations/panel-loading.animation.mjs +1 -1
  347. package/esm2022/app/eo-framework/ui/clipboard/clipboard.component.mjs +159 -0
  348. package/esm2022/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +130 -0
  349. package/esm2022/app/eo-framework/ui/eo-icon/eo-icon.component.mjs +119 -0
  350. package/esm2022/app/eo-framework/ui/error-message/error-message.component.mjs +33 -0
  351. package/{esm2020 → esm2022}/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +4 -4
  352. package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +147 -0
  353. package/{esm2020 → esm2022}/app/eo-framework/ui/loading-spinner/loading-spinner.component.mjs +8 -8
  354. package/esm2022/app/eo-framework/ui/outside-click/outside-click.directive.mjs +60 -0
  355. package/esm2022/app/eo-framework/ui/overlay/overlay.component.mjs +71 -0
  356. package/{esm2020 → esm2022}/app/eo-framework/ui/query-scope-select/query-scope-select.component.mjs +5 -5
  357. package/esm2022/app/eo-framework/ui/router-link/router-link.directive.mjs +26 -0
  358. package/esm2022/app/eo-framework/ui/rtl-aware/rtl-aware.directive.mjs +57 -0
  359. package/esm2022/app/eo-framework/ui/signature-tab/signature-tab.component.mjs +32 -0
  360. package/{esm2020 → esm2022}/app/eo-framework/ui/ui.module.mjs +59 -59
  361. package/esm2022/app/eo-framework/ui/user-avatar/user-avatar.component.mjs +54 -0
  362. package/esm2022/app/eo-framework/upload-overlay/upload-overlay-guard.service.mjs +17 -0
  363. package/esm2022/app/eo-framework/upload-overlay/upload-overlay.component.mjs +397 -0
  364. package/{esm2020 → esm2022}/app/eo-framework/util/directive/prevent-double-click.directive.mjs +5 -5
  365. package/esm2022/app/eo-framework/util/directive/trap-focus.directive.mjs +69 -0
  366. package/esm2022/app/eo-framework/util/services/utilities.service.mjs +25 -0
  367. package/esm2022/app/eo-framework/util/sortable/order-by.pipe.mjs +48 -0
  368. package/{esm2020 → esm2022}/app/eo-framework/util/util.module.mjs +5 -5
  369. package/esm2022/app/eo-framework-core/agent/agent.service.mjs +178 -0
  370. package/esm2022/app/eo-framework-core/api/grid.service.mjs +732 -0
  371. package/esm2022/app/eo-framework-core/api/plugins.service.mjs +258 -0
  372. package/esm2022/app/eo-framework-core/empty-state/empty-state.service.mjs +53 -0
  373. package/esm2022/app/eo-framework-core/eo-framework-core.module.mjs +105 -0
  374. package/esm2022/app/eo-framework-core/error-handler/error-handler.service.mjs +89 -0
  375. package/esm2022/app/eo-framework-core/layout/layout.service.mjs +106 -0
  376. package/esm2022/app/eo-framework-core/location/location.service.mjs +146 -0
  377. package/esm2022/app/eo-framework-core/pending-changes/pending-changes-guard.service.mjs +18 -0
  378. package/esm2022/app/eo-framework-core/pending-changes/pending-changes.service.mjs +112 -0
  379. package/esm2022/app/eo-framework-core/pipes/filesize.pipe.mjs +30 -0
  380. package/{esm2020 → esm2022}/app/eo-framework-core/pipes/keys.pipe.mjs +4 -4
  381. package/esm2022/app/eo-framework-core/pipes/locale-date.pipe.mjs +63 -0
  382. package/esm2022/app/eo-framework-core/pipes/locale-number.pipe.mjs +109 -0
  383. package/{esm2020 → esm2022}/app/eo-framework-core/pipes/pipes.module.mjs +19 -19
  384. package/{esm2020 → esm2022}/app/eo-framework-core/pipes/safe-html.pipe.mjs +5 -5
  385. package/esm2022/app/eo-framework-core/references/reference.service.mjs +266 -0
  386. package/esm2022/app/eo-framework-core/route-guards/auth/auth-guard.service.mjs +29 -0
  387. package/esm2022/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.mjs +55 -0
  388. package/esm2022/app/eo-framework-core/search/app-search.service.mjs +387 -0
  389. package/esm2022/app/eo-framework-core/selection/selection.service.mjs +63 -0
  390. package/esm2022/app/eo-framework-core/title/page-title.service.mjs +42 -0
  391. package/{fesm2020 → fesm2022}/eo-sdk-client.mjs +2278 -2143
  392. package/fesm2022/eo-sdk-client.mjs.map +1 -0
  393. package/misc/scripts/copy-client-assets.js +1 -1
  394. package/package.json +31 -44
  395. package/styles.css +725 -550
  396. package/styles.scss +3 -3
  397. package/esm2020/app/eo-client/about-state/about-state.component.mjs +0 -81
  398. package/esm2020/app/eo-client/dashboard/dashboard.component.mjs +0 -305
  399. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +0 -288
  400. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +0 -265
  401. package/esm2020/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +0 -121
  402. package/esm2020/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +0 -125
  403. package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +0 -192
  404. package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +0 -164
  405. package/esm2020/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +0 -59
  406. package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +0 -60
  407. package/esm2020/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-widget.component.mjs +0 -42
  408. package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +0 -69
  409. package/esm2020/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-widget.component.mjs +0 -43
  410. package/esm2020/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +0 -116
  411. package/esm2020/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +0 -123
  412. package/esm2020/app/eo-client/eo-client.module.mjs +0 -170
  413. package/esm2020/app/eo-client/favorite-state/favorite-state.component.mjs +0 -150
  414. package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +0 -218
  415. package/esm2020/app/eo-client/login/login.component.mjs +0 -111
  416. package/esm2020/app/eo-client/notifications-state/notifications-state.component.mjs +0 -227
  417. package/esm2020/app/eo-client/object-state/object-state/object-state.component.mjs +0 -342
  418. package/esm2020/app/eo-client/object-state/object-state-service/object-state.service.mjs +0 -134
  419. package/esm2020/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +0 -159
  420. package/esm2020/app/eo-client/process-state/process-state.component.mjs +0 -330
  421. package/esm2020/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +0 -150
  422. package/esm2020/app/eo-client/result-state/result-state.component.mjs +0 -71
  423. package/esm2020/app/eo-client/settings/settings.component.mjs +0 -287
  424. package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +0 -209
  425. package/esm2020/app/eo-client/version-state/version-state.component.mjs +0 -142
  426. package/esm2020/app/eo-framework/actions/action-menu/action-menu.component.mjs +0 -208
  427. package/esm2020/app/eo-framework/actions/action-service/action.service.mjs +0 -185
  428. package/esm2020/app/eo-framework/actions/action-target.mjs +0 -28
  429. package/esm2020/app/eo-framework/actions/action.module.mjs +0 -274
  430. package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.mjs +0 -201
  431. package/esm2020/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission-action.mjs +0 -50
  432. package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +0 -134
  433. package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription-action.mjs +0 -50
  434. package/esm2020/app/eo-framework/actions/actions/clipboard/clipboard-object-action/clipboard-object-action.component.mjs +0 -95
  435. package/esm2020/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +0 -88
  436. package/esm2020/app/eo-framework/actions/actions/delete-action/delete/delete.component.mjs +0 -111
  437. package/esm2020/app/eo-framework/actions/actions/email/email/email.component.mjs +0 -97
  438. package/esm2020/app/eo-framework/actions/actions/favorite-action/favorite-action.mjs +0 -76
  439. package/esm2020/app/eo-framework/actions/actions/open-context-action/open-context-action.mjs +0 -56
  440. package/esm2020/app/eo-framework/actions/actions/open-document-action/open-document-action.component.mjs +0 -69
  441. package/esm2020/app/eo-framework/actions/actions/remove-subscription-action/remove-subscription-action.mjs +0 -45
  442. package/esm2020/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +0 -89
  443. package/esm2020/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.mjs +0 -184
  444. package/esm2020/app/eo-framework/actions/actions/signature-action/sequence-list-item/sequence-list-item.component.mjs +0 -53
  445. package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +0 -146
  446. package/esm2020/app/eo-framework/actions/actions/workflow-action/workflow/workflow.component.mjs +0 -107
  447. package/esm2020/app/eo-framework/app-shell/app-bar/app-add/app-add-dialog/app-add-dialog.component.mjs +0 -173
  448. package/esm2020/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +0 -203
  449. package/esm2020/app/eo-framework/app-shell/app-bar/app-process/app-process.component.mjs +0 -112
  450. package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +0 -793
  451. package/esm2020/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +0 -46
  452. package/esm2020/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.mjs +0 -42
  453. package/esm2020/app/eo-framework/form-elements/checkbox/checkbox.component.mjs +0 -62
  454. package/esm2020/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +0 -312
  455. package/esm2020/app/eo-framework/form-elements/date/date.component.mjs +0 -101
  456. package/esm2020/app/eo-framework/form-elements/date/year-range/year-range.directive.mjs +0 -44
  457. package/esm2020/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +0 -184
  458. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +0 -303
  459. package/esm2020/app/eo-framework/form-elements/form-input/form-input.component.mjs +0 -73
  460. package/esm2020/app/eo-framework/form-elements/form-input/input-focus/input-focus.directive.mjs +0 -35
  461. package/esm2020/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +0 -252
  462. package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder/reference-finder.component.mjs +0 -253
  463. package/esm2020/app/eo-framework/form-elements/id-reference/reference-finder-entry/reference-finder-entry.component.mjs +0 -33
  464. package/esm2020/app/eo-framework/form-elements/id-reference/service/reference-finder.service.mjs +0 -106
  465. package/esm2020/app/eo-framework/form-elements/number/number.component.mjs +0 -171
  466. package/esm2020/app/eo-framework/form-elements/number-range/number-range.component.mjs +0 -138
  467. package/esm2020/app/eo-framework/form-elements/organization/organization.component.mjs +0 -216
  468. package/esm2020/app/eo-framework/form-elements/reference/reference.component.mjs +0 -223
  469. package/esm2020/app/eo-framework/form-elements/string/string.component.mjs +0 -254
  470. package/esm2020/app/eo-framework/grid/column-configurator/column-configurator.component.mjs +0 -211
  471. package/esm2020/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +0 -83
  472. package/esm2020/app/eo-framework/grid/extensions/filter/abstract-filter.component.mjs +0 -65
  473. package/esm2020/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +0 -82
  474. package/esm2020/app/eo-framework/grid/extensions/filter/setFilters/set-filter.component.mjs +0 -85
  475. package/esm2020/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +0 -98
  476. package/esm2020/app/eo-framework/grid/extensions/pagination/pagination.component.mjs +0 -52
  477. package/esm2020/app/eo-framework/grid/extensions/services/list-settings.service.mjs +0 -42
  478. package/esm2020/app/eo-framework/grid/extensions/total-count/total-count.component.mjs +0 -36
  479. package/esm2020/app/eo-framework/grid/filters/codesystem-filter.component.mjs +0 -94
  480. package/esm2020/app/eo-framework/grid/filters/datetime-filter.component.mjs +0 -75
  481. package/esm2020/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +0 -96
  482. package/esm2020/app/eo-framework/grid/filters/list-filter.component.mjs +0 -54
  483. package/esm2020/app/eo-framework/grid/filters/organization-filter.component.mjs +0 -64
  484. package/esm2020/app/eo-framework/grid/grid.component.mjs +0 -421
  485. package/esm2020/app/eo-framework/grid/grid.module.mjs +0 -107
  486. package/esm2020/app/eo-framework/grid/row-grouping/group-stage.mjs +0 -528
  487. package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +0 -457
  488. package/esm2020/app/eo-framework/list-container/list-container.component.mjs +0 -101
  489. package/esm2020/app/eo-framework/media/content-preview.service.mjs +0 -42
  490. package/esm2020/app/eo-framework/media/media.component.mjs +0 -314
  491. package/esm2020/app/eo-framework/object-details/favorite-icon/favorite-icon.component.mjs +0 -104
  492. package/esm2020/app/eo-framework/object-details/object-details.component.mjs +0 -439
  493. package/esm2020/app/eo-framework/object-details/object-history/history-filter/history-filter-pipe/history-filter.pipe.mjs +0 -32
  494. package/esm2020/app/eo-framework/object-details/object-history/object-history.component.mjs +0 -82
  495. package/esm2020/app/eo-framework/object-details/object-links/object-links.component.mjs +0 -292
  496. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +0 -123
  497. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +0 -634
  498. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +0 -238
  499. package/esm2020/app/eo-framework/object-form/object-form/form-validation/form-validation.mjs +0 -40
  500. package/esm2020/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +0 -81
  501. package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +0 -113
  502. package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +0 -267
  503. package/esm2020/app/eo-framework/object-form/object-form/object-form.component.mjs +0 -148
  504. package/esm2020/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +0 -216
  505. package/esm2020/app/eo-framework/object-form/object-form-helper.service.mjs +0 -717
  506. package/esm2020/app/eo-framework/object-state-details/object-state-details.component.mjs +0 -134
  507. package/esm2020/app/eo-framework/plugins/plugins.module.mjs +0 -59
  508. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +0 -557
  509. package/esm2020/app/eo-framework/process/details/process-details.component.mjs +0 -226
  510. package/esm2020/app/eo-framework/process-form/process-form.component.mjs +0 -50
  511. package/esm2020/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +0 -220
  512. package/esm2020/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +0 -271
  513. package/esm2020/app/eo-framework/result-list/result-list.component.mjs +0 -368
  514. package/esm2020/app/eo-framework/settings/change-password/change-password-form/change-password-form.component.mjs +0 -125
  515. package/esm2020/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.mjs +0 -65
  516. package/esm2020/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts.component.mjs +0 -130
  517. package/esm2020/app/eo-framework/shortcuts/shortcuts.service.mjs +0 -45
  518. package/esm2020/app/eo-framework/stored-query/stored-query/stored-query.component.mjs +0 -225
  519. package/esm2020/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.mjs +0 -46
  520. package/esm2020/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +0 -501
  521. package/esm2020/app/eo-framework/tree/tree.component.mjs +0 -281
  522. package/esm2020/app/eo-framework/ui/clipboard/clipboard.component.mjs +0 -159
  523. package/esm2020/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +0 -130
  524. package/esm2020/app/eo-framework/ui/eo-icon/eo-icon.component.mjs +0 -119
  525. package/esm2020/app/eo-framework/ui/error-message/error-message.component.mjs +0 -33
  526. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +0 -146
  527. package/esm2020/app/eo-framework/ui/outside-click/outside-click.directive.mjs +0 -60
  528. package/esm2020/app/eo-framework/ui/overlay/overlay.component.mjs +0 -71
  529. package/esm2020/app/eo-framework/ui/router-link/router-link.directive.mjs +0 -26
  530. package/esm2020/app/eo-framework/ui/rtl-aware/rtl-aware.directive.mjs +0 -57
  531. package/esm2020/app/eo-framework/ui/signature-tab/signature-tab.component.mjs +0 -32
  532. package/esm2020/app/eo-framework/ui/user-avatar/user-avatar.component.mjs +0 -54
  533. package/esm2020/app/eo-framework/upload-overlay/upload-overlay-guard.service.mjs +0 -17
  534. package/esm2020/app/eo-framework/upload-overlay/upload-overlay.component.mjs +0 -397
  535. package/esm2020/app/eo-framework/util/directive/trap-focus.directive.mjs +0 -69
  536. package/esm2020/app/eo-framework/util/services/utilities.service.mjs +0 -25
  537. package/esm2020/app/eo-framework/util/sortable/order-by.pipe.mjs +0 -48
  538. package/esm2020/app/eo-framework-core/agent/agent.service.mjs +0 -178
  539. package/esm2020/app/eo-framework-core/api/grid.service.mjs +0 -732
  540. package/esm2020/app/eo-framework-core/api/plugins.service.mjs +0 -258
  541. package/esm2020/app/eo-framework-core/empty-state/empty-state.service.mjs +0 -53
  542. package/esm2020/app/eo-framework-core/eo-framework-core.module.mjs +0 -105
  543. package/esm2020/app/eo-framework-core/error-handler/error-handler.service.mjs +0 -89
  544. package/esm2020/app/eo-framework-core/layout/layout.service.mjs +0 -106
  545. package/esm2020/app/eo-framework-core/location/location.service.mjs +0 -146
  546. package/esm2020/app/eo-framework-core/pending-changes/pending-changes-guard.service.mjs +0 -18
  547. package/esm2020/app/eo-framework-core/pending-changes/pending-changes.service.mjs +0 -112
  548. package/esm2020/app/eo-framework-core/pipes/filesize.pipe.mjs +0 -30
  549. package/esm2020/app/eo-framework-core/pipes/locale-date.pipe.mjs +0 -63
  550. package/esm2020/app/eo-framework-core/pipes/locale-number.pipe.mjs +0 -109
  551. package/esm2020/app/eo-framework-core/references/reference.service.mjs +0 -266
  552. package/esm2020/app/eo-framework-core/route-guards/auth/auth-guard.service.mjs +0 -29
  553. package/esm2020/app/eo-framework-core/route-guards/capabilities/capabilities-guard.service.mjs +0 -55
  554. package/esm2020/app/eo-framework-core/search/app-search.service.mjs +0 -387
  555. package/esm2020/app/eo-framework-core/selection/selection.service.mjs +0 -63
  556. package/esm2020/app/eo-framework-core/title/page-title.service.mjs +0 -42
  557. package/esm2020/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.mjs +0 -5
  558. package/esm2020/projects/eo-sdk/core/lib/config/core-config.mjs +0 -23
  559. package/esm2020/projects/eo-sdk/core/lib/config/core-init.service.mjs +0 -71
  560. package/esm2020/projects/eo-sdk/core/lib/config/core-init.tokens.mjs +0 -8
  561. package/esm2020/projects/eo-sdk/core/lib/config/initialize-module.mjs +0 -11
  562. package/esm2020/projects/eo-sdk/core/lib/config/missing-translation-handler.mjs +0 -15
  563. package/esm2020/projects/eo-sdk/core/lib/config/translate-json-loader.mjs +0 -130
  564. package/esm2020/projects/eo-sdk/core/lib/environment.enaio.mjs +0 -12
  565. package/esm2020/projects/eo-sdk/core/lib/eo-core-shared.module.mjs +0 -24
  566. package/esm2020/projects/eo-sdk/core/lib/eo-core.module.mjs +0 -117
  567. package/esm2020/projects/eo-sdk/core/lib/interface/change-password.interface.mjs +0 -2
  568. package/esm2020/projects/eo-sdk/core/lib/interface/event.interface.mjs +0 -2
  569. package/esm2020/projects/eo-sdk/core/lib/interface/http-options.interface.mjs +0 -2
  570. package/esm2020/projects/eo-sdk/core/lib/interface/logger.interface.mjs +0 -7
  571. package/esm2020/projects/eo-sdk/core/lib/interface/organization-objects.interface.mjs +0 -2
  572. package/esm2020/projects/eo-sdk/core/lib/interface/tree-node.interface.mjs +0 -2
  573. package/esm2020/projects/eo-sdk/core/lib/model/baseparams.model.mjs +0 -2
  574. package/esm2020/projects/eo-sdk/core/lib/model/bpm.model.mjs +0 -70
  575. package/esm2020/projects/eo-sdk/core/lib/model/custom-action.model.mjs +0 -2
  576. package/esm2020/projects/eo-sdk/core/lib/model/dms-object-history.model.mjs +0 -30
  577. package/esm2020/projects/eo-sdk/core/lib/model/dms-object.model.mjs +0 -140
  578. package/esm2020/projects/eo-sdk/core/lib/model/eo-error.model.mjs +0 -37
  579. package/esm2020/projects/eo-sdk/core/lib/model/eo-user.model.mjs +0 -86
  580. package/esm2020/projects/eo-sdk/core/lib/model/inbox-item.model.mjs +0 -36
  581. package/esm2020/projects/eo-sdk/core/lib/model/object-type.model.mjs +0 -39
  582. package/esm2020/projects/eo-sdk/core/lib/model/org.model.mjs +0 -2
  583. package/esm2020/projects/eo-sdk/core/lib/model/prepared-item.model.mjs +0 -35
  584. package/esm2020/projects/eo-sdk/core/lib/model/range-value.model.mjs +0 -45
  585. package/esm2020/projects/eo-sdk/core/lib/model/upload-file-item.model.mjs +0 -17
  586. package/esm2020/projects/eo-sdk/core/lib/model/upload-target.model.mjs +0 -50
  587. package/esm2020/projects/eo-sdk/core/lib/model/work-item-history.model.mjs +0 -54
  588. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-interceptor.mjs +0 -29
  589. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.mjs +0 -2
  590. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth.service.mjs +0 -215
  591. package/esm2020/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.mjs +0 -2
  592. package/esm2020/projects/eo-sdk/core/lib/service/backend/backend.service.mjs +0 -358
  593. package/esm2020/projects/eo-sdk/core/lib/service/bpm/bpm.service.mjs +0 -286
  594. package/esm2020/projects/eo-sdk/core/lib/service/cache/app-cache.service.mjs +0 -117
  595. package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.mjs +0 -2
  596. package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.mjs +0 -60
  597. package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.mjs +0 -6
  598. package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.mjs +0 -2
  599. package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.mjs +0 -100
  600. package/esm2020/projects/eo-sdk/core/lib/service/config/config.enum.mjs +0 -6
  601. package/esm2020/projects/eo-sdk/core/lib/service/config/config.interface.mjs +0 -2
  602. package/esm2020/projects/eo-sdk/core/lib/service/config/config.service.mjs +0 -135
  603. package/esm2020/projects/eo-sdk/core/lib/service/dms/dms.service.mjs +0 -507
  604. package/esm2020/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.mjs +0 -2
  605. package/esm2020/projects/eo-sdk/core/lib/service/events/event.service.mjs +0 -44
  606. package/esm2020/projects/eo-sdk/core/lib/service/events/events.mjs +0 -27
  607. package/esm2020/projects/eo-sdk/core/lib/service/inbox/inbox.service.mjs +0 -111
  608. package/esm2020/projects/eo-sdk/core/lib/service/logger/console-log.service.mjs +0 -41
  609. package/esm2020/projects/eo-sdk/core/lib/service/logger/logger.mjs +0 -47
  610. package/esm2020/projects/eo-sdk/core/lib/service/notifications/notifications.service.mjs +0 -136
  611. package/esm2020/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.mjs +0 -2
  612. package/esm2020/projects/eo-sdk/core/lib/service/prepare/prepare.service.mjs +0 -305
  613. package/esm2020/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.mjs +0 -2
  614. package/esm2020/projects/eo-sdk/core/lib/service/search/search-query.model.mjs +0 -510
  615. package/esm2020/projects/eo-sdk/core/lib/service/search/search.service.mjs +0 -478
  616. package/esm2020/projects/eo-sdk/core/lib/service/signing/signing.service.mjs +0 -60
  617. package/esm2020/projects/eo-sdk/core/lib/service/storage/local-storage.service.mjs +0 -111
  618. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.mjs +0 -2
  619. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.mjs +0 -216
  620. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.mjs +0 -98
  621. package/esm2020/projects/eo-sdk/core/lib/service/system/system.service.mjs +0 -345
  622. package/esm2020/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.mjs +0 -2
  623. package/esm2020/projects/eo-sdk/core/lib/service/system-status/system-status.service.mjs +0 -104
  624. package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.enum.mjs +0 -9
  625. package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.interface.mjs +0 -2
  626. package/esm2020/projects/eo-sdk/core/lib/service/upload/upload.service.mjs +0 -46
  627. package/esm2020/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.mjs +0 -83
  628. package/esm2020/projects/eo-sdk/core/lib/service/user/user.service.mjs +0 -399
  629. package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +0 -304
  630. package/esm2020/projects/eo-sdk/core/public_api.mjs +0 -85
  631. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6118
  632. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
  633. package/fesm2015/eo-sdk-client.mjs +0 -27040
  634. package/fesm2015/eo-sdk-client.mjs.map +0 -1
  635. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6133
  636. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
  637. package/fesm2020/eo-sdk-client.mjs.map +0 -1
  638. package/projects/eo-sdk/core/README.md +0 -113
  639. package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.d.ts.map +0 -1
  640. package/projects/eo-sdk/core/index.d.ts +0 -6
  641. package/projects/eo-sdk/core/lib/config/core-config.d.ts +0 -14
  642. package/projects/eo-sdk/core/lib/config/core-config.d.ts.map +0 -1
  643. package/projects/eo-sdk/core/lib/config/core-init.service.d.ts +0 -33
  644. package/projects/eo-sdk/core/lib/config/core-init.service.d.ts.map +0 -1
  645. package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts +0 -8
  646. package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts.map +0 -1
  647. package/projects/eo-sdk/core/lib/config/initialize-module.d.ts +0 -7
  648. package/projects/eo-sdk/core/lib/config/initialize-module.d.ts.map +0 -1
  649. package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts +0 -14
  650. package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts.map +0 -1
  651. package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts +0 -21
  652. package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts.map +0 -1
  653. package/projects/eo-sdk/core/lib/environment.enaio.d.ts +0 -6
  654. package/projects/eo-sdk/core/lib/environment.enaio.d.ts.map +0 -1
  655. package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts +0 -12
  656. package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts.map +0 -1
  657. package/projects/eo-sdk/core/lib/eo-core.module.d.ts +0 -46
  658. package/projects/eo-sdk/core/lib/eo-core.module.d.ts.map +0 -1
  659. package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts +0 -8
  660. package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts.map +0 -1
  661. package/projects/eo-sdk/core/lib/interface/event.interface.d.ts +0 -14
  662. package/projects/eo-sdk/core/lib/interface/event.interface.d.ts.map +0 -1
  663. package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts +0 -17
  664. package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts.map +0 -1
  665. package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts +0 -20
  666. package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts.map +0 -1
  667. package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts +0 -20
  668. package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts.map +0 -1
  669. package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts +0 -24
  670. package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts.map +0 -1
  671. package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts +0 -58
  672. package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts.map +0 -1
  673. package/projects/eo-sdk/core/lib/model/bpm.model.d.ts +0 -253
  674. package/projects/eo-sdk/core/lib/model/bpm.model.d.ts.map +0 -1
  675. package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts +0 -34
  676. package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts.map +0 -1
  677. package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts +0 -59
  678. package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts.map +0 -1
  679. package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts +0 -137
  680. package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts.map +0 -1
  681. package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts +0 -19
  682. package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts.map +0 -1
  683. package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts +0 -107
  684. package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts.map +0 -1
  685. package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts +0 -71
  686. package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts.map +0 -1
  687. package/projects/eo-sdk/core/lib/model/object-type.model.d.ts +0 -125
  688. package/projects/eo-sdk/core/lib/model/object-type.model.d.ts.map +0 -1
  689. package/projects/eo-sdk/core/lib/model/org.model.d.ts +0 -94
  690. package/projects/eo-sdk/core/lib/model/org.model.d.ts.map +0 -1
  691. package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts +0 -190
  692. package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts.map +0 -1
  693. package/projects/eo-sdk/core/lib/model/range-value.model.d.ts +0 -22
  694. package/projects/eo-sdk/core/lib/model/range-value.model.d.ts.map +0 -1
  695. package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts +0 -30
  696. package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts.map +0 -1
  697. package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts +0 -60
  698. package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts.map +0 -1
  699. package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts +0 -52
  700. package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts.map +0 -1
  701. package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts +0 -12
  702. package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts.map +0 -1
  703. package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts +0 -23
  704. package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts.map +0 -1
  705. package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts +0 -104
  706. package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts.map +0 -1
  707. package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts +0 -18
  708. package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts.map +0 -1
  709. package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts +0 -209
  710. package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts.map +0 -1
  711. package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts +0 -150
  712. package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts.map +0 -1
  713. package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts +0 -59
  714. package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts.map +0 -1
  715. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts +0 -54
  716. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts.map +0 -1
  717. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts +0 -35
  718. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts.map +0 -1
  719. package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts +0 -5
  720. package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts.map +0 -1
  721. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts +0 -16
  722. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts.map +0 -1
  723. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts +0 -49
  724. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts.map +0 -1
  725. package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts +0 -5
  726. package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts.map +0 -1
  727. package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts +0 -55
  728. package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts.map +0 -1
  729. package/projects/eo-sdk/core/lib/service/config/config.service.d.ts +0 -80
  730. package/projects/eo-sdk/core/lib/service/config/config.service.d.ts.map +0 -1
  731. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +0 -286
  732. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts.map +0 -1
  733. package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts +0 -13
  734. package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts.map +0 -1
  735. package/projects/eo-sdk/core/lib/service/events/event.service.d.ts +0 -31
  736. package/projects/eo-sdk/core/lib/service/events/event.service.d.ts.map +0 -1
  737. package/projects/eo-sdk/core/lib/service/events/events.d.ts +0 -27
  738. package/projects/eo-sdk/core/lib/service/events/events.d.ts.map +0 -1
  739. package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts +0 -66
  740. package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts.map +0 -1
  741. package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts +0 -20
  742. package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts.map +0 -1
  743. package/projects/eo-sdk/core/lib/service/logger/logger.d.ts +0 -25
  744. package/projects/eo-sdk/core/lib/service/logger/logger.d.ts.map +0 -1
  745. package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts +0 -78
  746. package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts.map +0 -1
  747. package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts +0 -9
  748. package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts.map +0 -1
  749. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts +0 -189
  750. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts.map +0 -1
  751. package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts +0 -10
  752. package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts.map +0 -1
  753. package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts +0 -327
  754. package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts.map +0 -1
  755. package/projects/eo-sdk/core/lib/service/search/search.service.d.ts +0 -173
  756. package/projects/eo-sdk/core/lib/service/search/search.service.d.ts.map +0 -1
  757. package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts +0 -52
  758. package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts.map +0 -1
  759. package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts +0 -53
  760. package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts.map +0 -1
  761. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts +0 -15
  762. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts.map +0 -1
  763. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts +0 -108
  764. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts.map +0 -1
  765. package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts +0 -74
  766. package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts.map +0 -1
  767. package/projects/eo-sdk/core/lib/service/system/system.service.d.ts +0 -125
  768. package/projects/eo-sdk/core/lib/service/system/system.service.d.ts.map +0 -1
  769. package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts +0 -53
  770. package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts.map +0 -1
  771. package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts +0 -26
  772. package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts.map +0 -1
  773. package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts +0 -8
  774. package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts.map +0 -1
  775. package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts +0 -8
  776. package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts.map +0 -1
  777. package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts +0 -28
  778. package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts.map +0 -1
  779. package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts +0 -50
  780. package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts.map +0 -1
  781. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts +0 -216
  782. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts.map +0 -1
  783. package/projects/eo-sdk/core/lib/util/utils.d.ts +0 -148
  784. package/projects/eo-sdk/core/lib/util/utils.d.ts.map +0 -1
  785. package/projects/eo-sdk/core/public_api.d.ts +0 -82
  786. package/projects/eo-sdk/core/public_api.d.ts.map +0 -1
  787. /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/charts-widget/icharts.mjs +0 -0
  788. /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.mjs +0 -0
  789. /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.mjs +0 -0
  790. /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox.model.mjs +0 -0
  791. /package/{esm2020 → esm2022}/app/eo-client/dashboard/widgets/info-intray-widget/info-intray.model.mjs +0 -0
  792. /package/{esm2020 → esm2022}/app/eo-client/inbox-state/inbox-state/inbox.types.enum.mjs +0 -0
  793. /package/{esm2020 → esm2022}/app/eo-client/index.mjs +0 -0
  794. /package/{esm2020 → esm2022}/app/eo-client/notifications-state/notifications-state.interface.mjs +0 -0
  795. /package/{esm2020 → esm2022}/app/eo-client/object-state/object-state-service/object-state.interface.mjs +0 -0
  796. /package/{esm2020 → esm2022}/app/eo-client/settings/agent-lock-settings.enum.mjs +0 -0
  797. /package/{esm2020 → esm2022}/app/eo-framework/accordion/index.mjs +0 -0
  798. /package/{esm2020 → esm2022}/app/eo-framework/actions/actions/signature-action/signature.model.mjs +0 -0
  799. /package/{esm2020 → esm2022}/app/eo-framework/actions/index.mjs +0 -0
  800. /package/{esm2020 → esm2022}/app/eo-framework/actions/interfaces/action-component.interface.mjs +0 -0
  801. /package/{esm2020 → esm2022}/app/eo-framework/actions/interfaces/action-list-entry.mjs +0 -0
  802. /package/{esm2020 → esm2022}/app/eo-framework/actions/interfaces/action.interface.mjs +0 -0
  803. /package/{esm2020 → esm2022}/app/eo-framework/actions/selection-range.enum.mjs +0 -0
  804. /package/{esm2020 → esm2022}/app/eo-framework/animations/animations.mjs +0 -0
  805. /package/{esm2020 → esm2022}/app/eo-framework/app-shell/app-bar/app-search/app-search.interface.mjs +0 -0
  806. /package/{esm2020 → esm2022}/app/eo-framework/app-shell/index.mjs +0 -0
  807. /package/{esm2020 → esm2022}/app/eo-framework/cta/index.mjs +0 -0
  808. /package/{esm2020 → esm2022}/app/eo-framework/error/index.mjs +0 -0
  809. /package/{esm2020 → esm2022}/app/eo-framework/form-elements/id-reference/animation/reference-finder.animation.mjs +0 -0
  810. /package/{esm2020 → esm2022}/app/eo-framework/form-elements/id-reference/interface/reference-finder.interface.mjs +0 -0
  811. /package/{esm2020 → esm2022}/app/eo-framework/form-elements/index.mjs +0 -0
  812. /package/{esm2020 → esm2022}/app/eo-framework/grid/extensions/filter/setFilters/set-filters.interface.mjs +0 -0
  813. /package/{esm2020 → esm2022}/app/eo-framework/grid/filters/filesize-filter.component.mjs +0 -0
  814. /package/{esm2020 → esm2022}/app/eo-framework/grid/grid-filter.model.mjs +0 -0
  815. /package/{esm2020 → esm2022}/app/eo-framework/grid/index.mjs +0 -0
  816. /package/{esm2020 → esm2022}/app/eo-framework/grid/loader.interface.mjs +0 -0
  817. /package/{esm2020 → esm2022}/app/eo-framework/index.mjs +0 -0
  818. /package/{esm2020 → esm2022}/app/eo-framework/list-container/index.mjs +0 -0
  819. /package/{esm2020 → esm2022}/app/eo-framework/media/index.mjs +0 -0
  820. /package/{esm2020 → esm2022}/app/eo-framework/object-details/index.mjs +0 -0
  821. /package/{esm2020 → esm2022}/app/eo-framework/object-details/object-history/history-filter/history-filter.mjs +0 -0
  822. /package/{esm2020 → esm2022}/app/eo-framework/object-form/form-status-changed-event.interface.mjs +0 -0
  823. /package/{esm2020 → esm2022}/app/eo-framework/object-form/index.mjs +0 -0
  824. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/form-element-table/form-element.interface.mjs +0 -0
  825. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-control-wrapper.mjs +0 -0
  826. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-control.mjs +0 -0
  827. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-group.model.mjs +0 -0
  828. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form-script/object-form-script.interface.mjs +0 -0
  829. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form/object-form.model.mjs +0 -0
  830. /package/{esm2020 → esm2022}/app/eo-framework/object-form/object-form-options.interface.mjs +0 -0
  831. /package/{esm2020 → esm2022}/app/eo-framework/plugins/index.mjs +0 -0
  832. /package/{esm2020 → esm2022}/app/eo-framework/process/process-file/file-entry-permissions.interface.mjs +0 -0
  833. /package/{esm2020 → esm2022}/app/eo-framework/quick-search/index.mjs +0 -0
  834. /package/{esm2020 → esm2022}/app/eo-framework/quick-search/quick-search/quick-search-result.interface.mjs +0 -0
  835. /package/{esm2020 → esm2022}/app/eo-framework/result-list/index.mjs +0 -0
  836. /package/{esm2020 → esm2022}/app/eo-framework/settings/change-password/change-password.interface.mjs +0 -0
  837. /package/{esm2020 → esm2022}/app/eo-framework/settings/index.mjs +0 -0
  838. /package/{esm2020 → esm2022}/app/eo-framework/shortcuts/global-shortcut-action.interface.mjs +0 -0
  839. /package/{esm2020 → esm2022}/app/eo-framework/shortcuts/global-shortcut-component.interface.mjs +0 -0
  840. /package/{esm2020 → esm2022}/app/eo-framework/shortcuts/index.mjs +0 -0
  841. /package/{esm2020 → esm2022}/app/eo-framework/stored-query/index.mjs +0 -0
  842. /package/{esm2020 → esm2022}/app/eo-framework/stored-query/stored-query-type-filter.enum.mjs +0 -0
  843. /package/{esm2020 → esm2022}/app/eo-framework/stored-query/stored-query.interface.mjs +0 -0
  844. /package/{esm2020 → esm2022}/app/eo-framework/tree/index.mjs +0 -0
  845. /package/{esm2020 → esm2022}/app/eo-framework/tree/tree.component.interface.mjs +0 -0
  846. /package/{esm2020 → esm2022}/app/eo-framework/ui/index.mjs +0 -0
  847. /package/{esm2020 → esm2022}/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry.interface.mjs +0 -0
  848. /package/{esm2020 → esm2022}/app/eo-framework/util/index.mjs +0 -0
  849. /package/{esm2020 → esm2022}/app/eo-framework-core/agent/agent.interface.mjs +0 -0
  850. /package/{esm2020 → esm2022}/app/eo-framework-core/api/model/dms-object.api.interface.mjs +0 -0
  851. /package/{esm2020 → esm2022}/app/eo-framework-core/empty-state/empty-state.interface.mjs +0 -0
  852. /package/{esm2020 → esm2022}/app/eo-framework-core/error-handler/error-keys.mjs +0 -0
  853. /package/{esm2020 → esm2022}/app/eo-framework-core/index.mjs +0 -0
  854. /package/{esm2020 → esm2022}/app/eo-framework-core/pending-changes/pending-changes-component.interface.mjs +0 -0
  855. /package/{esm2020 → esm2022}/eo-sdk-client.mjs +0 -0
  856. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -0,0 +1,793 @@
1
+ import { forkJoin as observableForkJoin, from as observableFrom, of as observableOf, Subject } from 'rxjs';
2
+ import { pluck, switchMap } from 'rxjs/operators';
3
+ import { Component, EventEmitter, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
4
+ import { LocaleDatePipe } from '../../../../eo-framework-core/pipes/locale-date.pipe';
5
+ import { RangeValue, SearchFilter, SearchQuery, StoredQuery, Utils } from '@eo-sdk/core';
6
+ import { ContextType } from './app-search.interface';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../../eo-framework-core/search/app-search.service";
9
+ import * as i2 from "@yuuvis/components/overlay";
10
+ import * as i3 from "@eo-sdk/core";
11
+ import * as i4 from "@angular/router";
12
+ import * as i5 from "@angular/common";
13
+ import * as i6 from "@angular/forms";
14
+ import * as i7 from "@ngx-translate/core";
15
+ import * as i8 from "../../../ui/eo-icon/eo-icon.component";
16
+ import * as i9 from "../../../ui/rtl-aware/rtl-aware.directive";
17
+ import * as i10 from "../../../ui/loading-spinner/loading-spinner.component";
18
+ import * as i11 from "../../../ui/query-scope-select/query-scope-select.component";
19
+ import * as i12 from "@yuuvis/components/tabs";
20
+ import * as i13 from "../../../form-elements/form-input/form-input.component";
21
+ import * as i14 from "../../../form-elements/datetime-range/datetime-range.component";
22
+ import * as i15 from "../../../form-elements/organization/organization.component";
23
+ import * as i16 from "../../../form-elements/string/string.component";
24
+ import * as i17 from "../../../object-form/object-form/object-form.component";
25
+ import * as i18 from "@yuuvis/components/autocomplete";
26
+ import * as i19 from "../context-search/context-search.component";
27
+ import * as i20 from "../../../../eo-framework-core/pipes/locale-number.pipe";
28
+ export class AppSearchComponent {
29
+ set selected(index) {
30
+ this._selected = this._selected === index ? null : index;
31
+ }
32
+ get selected() {
33
+ return this._selected;
34
+ }
35
+ get storedQuery() {
36
+ return this.query;
37
+ }
38
+ constructor(appSearchService, overlay, searchService, systemService, notifications, translate, router, renderer, cd, storedQueriesService, capabilityService, userService, logger, storageService) {
39
+ this.appSearchService = appSearchService;
40
+ this.overlay = overlay;
41
+ this.searchService = searchService;
42
+ this.systemService = systemService;
43
+ this.notifications = notifications;
44
+ this.translate = translate;
45
+ this.router = router;
46
+ this.renderer = renderer;
47
+ this.cd = cd;
48
+ this.storedQueriesService = storedQueriesService;
49
+ this.capabilityService = capabilityService;
50
+ this.userService = userService;
51
+ this.logger = logger;
52
+ this.storageService = storageService;
53
+ this.PARAMS = SearchQuery.BASE_PARAMS;
54
+ this.OPERATOR = SearchFilter.OPERATOR;
55
+ this.isOwnQuery = false;
56
+ this.objectTypeGroups = [];
57
+ this.typeGroupTree = [];
58
+ this.expertModeQueryEmpty = false;
59
+ this.expertModeSupport = {
60
+ baseParams: [],
61
+ selectedGroup: null,
62
+ selectedType: null
63
+ };
64
+ this.filtersModel = {};
65
+ this.aggregationsModel = {};
66
+ this.sysRootContext = {
67
+ id: null,
68
+ name: ContextType.sysroot,
69
+ label: this.translate.instant('eo.add.title.location.common'),
70
+ situation: 'SEARCH',
71
+ mode: 'CONTEXT',
72
+ contextFormOptions: {
73
+ formModel: { name: ContextType.sysroot }
74
+ }
75
+ };
76
+ this._selected = null;
77
+ this.objectTypeGroupsStorageKey = 'eo.app.search.object.type.group.sortedList';
78
+ this.onExecuteSearch = new EventEmitter();
79
+ this.datePipe = new LocaleDatePipe(translate);
80
+ this.expertModeSupport.baseParams = Object.keys(SearchQuery.BASE_PARAMS).map(k => {
81
+ let data = SearchQuery.BASE_PARAMS[k];
82
+ return {
83
+ label: this.translate.instant('eo.global.baseparam.' + data),
84
+ data: data
85
+ };
86
+ });
87
+ this.aggregationsModel[SearchQuery.BASE_PARAMS.CREATED] = Object.keys(SearchQuery.TIME_PERIOD_BUCKETS).map(k => {
88
+ return {
89
+ key: SearchQuery.TIME_PERIOD_BUCKETS[k],
90
+ value: '',
91
+ label: this.translate.instant('eo.search.agg.time.' + SearchQuery.TIME_PERIOD_BUCKETS[k])
92
+ };
93
+ });
94
+ this.aggregationsModel[SearchQuery.BASE_PARAMS.MODIFIED] = Object.keys(SearchQuery.TIME_PERIOD_BUCKETS).map(k => {
95
+ return {
96
+ key: SearchQuery.TIME_PERIOD_BUCKETS[k],
97
+ value: '',
98
+ label: this.translate.instant('eo.search.agg.time.' + SearchQuery.TIME_PERIOD_BUCKETS[k])
99
+ };
100
+ });
101
+ this.aggregationsModel[SearchQuery.BASE_PARAMS.MIMETYPEGROUP] = Object.keys(SearchQuery.MIMETYPEGROUP_BUCKETS).map(k => {
102
+ return {
103
+ key: SearchQuery.MIMETYPEGROUP_BUCKETS[k],
104
+ value: '',
105
+ label: SearchQuery.MIMETYPEGROUP_BUCKETS[k]
106
+ };
107
+ });
108
+ this.aggregationsModel[SearchQuery.BASE_PARAMS.FILESIZE] = Object.keys(SearchQuery.FILE_SIZE_BUCKETS).map(k => {
109
+ return {
110
+ key: SearchQuery.FILE_SIZE_BUCKETS[k],
111
+ value: '',
112
+ label: this.translate.instant('eo.search.agg.filesize.' + SearchQuery.FILE_SIZE_BUCKETS[k])
113
+ };
114
+ });
115
+ }
116
+ onTabChange(tabId) {
117
+ this.activeTabId = tabId;
118
+ if (tabId === 'restrictType') {
119
+ this.appSearchService.setAggs({
120
+ type: {}
121
+ });
122
+ }
123
+ else if (tabId === 'restrictCreated') {
124
+ this.appSearchService.setAggs({
125
+ type: {},
126
+ created: {}
127
+ });
128
+ }
129
+ else if (tabId === 'restrictModification') {
130
+ this.appSearchService.setAggs({
131
+ type: {},
132
+ modified: {}
133
+ });
134
+ }
135
+ else if (tabId === 'restrictFile') {
136
+ this.appSearchService.setAggs({
137
+ type: {},
138
+ mimetypegroup: {},
139
+ filesize: {}
140
+ });
141
+ }
142
+ this.appSearchService.aggregate();
143
+ }
144
+ processQuery(query) {
145
+ // IMPORTANT: never change the local query directly
146
+ // use searchService, so every components subscribed to the query
147
+ // will get the new value
148
+ this.query = query;
149
+ this.currentContextFolderName = this.query.contextFolderTypes.length
150
+ ? this.query.contextFolderTypes[0].name
151
+ : null;
152
+ this.isStoredQuery = query instanceof StoredQuery;
153
+ if (this.isStoredQuery) {
154
+ const user = this.userService.getCurrentUser();
155
+ this.isOwnQuery =
156
+ this.storedQuery.user.toLowerCase() === user.name.toLowerCase();
157
+ }
158
+ Object.keys(SearchQuery.BASE_PARAMS).forEach(k => this.processFilters(k));
159
+ // if we have an indexdata search using a context but the context was removed
160
+ if (!this.query.contextFolderTypes.length &&
161
+ this.idxSearch &&
162
+ this.idxSearch.contextFormOptions) {
163
+ this.idxSearch.contextFormOptions = null;
164
+ this.idxSearch.contextFolderType = null;
165
+ setTimeout(() => {
166
+ this.updateSearchFilterFromFormData();
167
+ }, 0);
168
+ }
169
+ // decide whether or not to setup an indexdata search
170
+ const updateCausedByTypeToggle = this.query.__updateCause === SearchQuery.UPDATE_CAUSE.TOGGLED_TYPE;
171
+ if (this.query.types.length === 1 && !updateCausedByTypeToggle) {
172
+ // having just one target type and a context type setup means, that we are using indexdata search
173
+ this.indexdataSearch(this.query.types[0], this.query.contextFolderTypes.length > 0 ? this.query.contextFolderTypes[0] : null);
174
+ }
175
+ else if (this.query.types.length === 1 &&
176
+ this.appSearchService.getIndexSearchQueryFilters(this.query).length > 0) {
177
+ // having just one target type and indexdata filters also means, that we are using indexdata search
178
+ this.indexdataSearch(this.query.types[0]);
179
+ }
180
+ else if (this.query.types.length > 1) {
181
+ // reset indexdata search otherwise, because the current query may be reset from out side (e.g. by a stored query)
182
+ this.idxSearch = null;
183
+ }
184
+ if (query.expertMode) {
185
+ this.typeGroupTree = this.appSearchService.buildTypeGroupTree();
186
+ }
187
+ this.queryScope = query.scope;
188
+ }
189
+ selectObjectType(type) {
190
+ /** set up the right type filter if not already done */
191
+ const queryTypesLength = this.query.types.length > 1 || this.query.types.length === 0;
192
+ const queryTypesLengthAndName = this.query.types.length === 1 && this.query.types[0].name !== type.name;
193
+ if (queryTypesLength || queryTypesLengthAndName) {
194
+ // setting object types will emit a new query. This will then take care of
195
+ // setting up the indexdata form
196
+ this.appSearchService.setQueryTypes([type]);
197
+ }
198
+ }
199
+ /**
200
+ * Sets up indexdata search for a given object type
201
+ * @param type - an object type
202
+ * @param contextFolderType - context folder type
203
+ */
204
+ indexdataSearch(type, contextFolderType) {
205
+ if (!type || this.query.types.length > 1) {
206
+ return;
207
+ }
208
+ if (this.query.types.length === 1 && this.query.types[0].name === type.name) {
209
+ /** even if we select a type that is already selected, we need to call aggregate as there may be context types involved */
210
+ this.appSearchService.setAggs({
211
+ type: {
212
+ sub: {
213
+ contextfoldertype: {}
214
+ }
215
+ }
216
+ }, true);
217
+ this.appSearchService.aggregate();
218
+ }
219
+ const isRootType = !!this.appSearchService.typesAllowedUnderSysroot.find(rT => rT.qname === type.qname);
220
+ this.idxSearch = {
221
+ type,
222
+ contextFolderType,
223
+ contextModels: isRootType ? [this.sysRootContext] : [],
224
+ formOptions: null
225
+ };
226
+ /** fetch context type models */
227
+ if (type.allowedcontexttypes.length) {
228
+ const toFetch = [];
229
+ type.allowedcontexttypes.forEach(contextType => {
230
+ const objType = this.systemService.getObjectType(contextType.name);
231
+ if (objType) {
232
+ toFetch.push(this.systemService.getObjectTypeForm(contextType.name, 'SEARCH', 'CONTEXT'));
233
+ }
234
+ });
235
+ if (toFetch.length) {
236
+ observableForkJoin(toFetch).subscribe(formModels => {
237
+ /** abstract context types should not be used */
238
+ this.addContextModel(formModels);
239
+ /** if there was a context type provided by the query, we'll setup the right model as well */
240
+ if (contextFolderType) {
241
+ const model = this.idxSearch.contextModels.find(m => m.name === contextFolderType.name);
242
+ if (model) {
243
+ this.selectContext(model);
244
+ }
245
+ else if (contextFolderType.name === ContextType.sysroot) {
246
+ this.selectContext(this.sysRootContext);
247
+ }
248
+ else {
249
+ /** the provided context type does not exist any more, so just remove it */
250
+ this.idxSearch.contextFolderType = null;
251
+ }
252
+ }
253
+ });
254
+ }
255
+ }
256
+ let formData;
257
+ let idxFilters = this.appSearchService.getIndexSearchQueryFilters();
258
+ if (idxFilters && idxFilters.length > 0) {
259
+ // set up form data from indexdata query filters
260
+ formData = idxFilters;
261
+ }
262
+ const objectType = this.systemService.getObjectType(type.name);
263
+ if (objectType) {
264
+ this.systemService
265
+ .getObjectTypeForm(type.name, 'SEARCH')
266
+ .subscribe(model => {
267
+ this.idxSearch.formOptions = {
268
+ formModel: model,
269
+ data: formData
270
+ };
271
+ });
272
+ }
273
+ }
274
+ processQueryState(queryState) {
275
+ this.loading = false;
276
+ this.queryState = queryState;
277
+ if (this.idxSearch) {
278
+ this.idxSearch.contextAggregations = {};
279
+ if (queryState.aggregations.contextType.size) {
280
+ this.idxSearch.contextAggregations = this.buildContextAggregations(queryState.aggregations.contextType);
281
+ }
282
+ }
283
+ // save aggregations values
284
+ if (!this.aggregationsModel[SearchQuery.BASE_PARAMS.TYPE] || !this.query.types.length || queryState.lastChange !== SearchQuery.BASE_PARAMS.TYPE) {
285
+ this.aggregationsModel[SearchQuery.BASE_PARAMS.TYPE] = new Map(queryState.aggregations.type);
286
+ }
287
+ this.syncAggregations(SearchQuery.BASE_PARAMS.CREATED, SearchFilter.OPERATOR.RANGE);
288
+ this.syncAggregations(SearchQuery.BASE_PARAMS.MODIFIED, SearchFilter.OPERATOR.RANGE);
289
+ this.syncAggregations(SearchQuery.BASE_PARAMS.MIMETYPEGROUP, SearchFilter.OPERATOR.IN);
290
+ this.syncAggregations(SearchQuery.BASE_PARAMS.FILESIZE, SearchFilter.OPERATOR.RANGE);
291
+ }
292
+ buildContextAggregations(contextType) {
293
+ let contextAggregations = {};
294
+ contextType.forEach((value, key) => contextAggregations[key] = value);
295
+ return contextAggregations;
296
+ }
297
+ processFilters(k) {
298
+ let f = this.query.filters.find(ff => ff.property === SearchQuery.BASE_PARAMS[k]);
299
+ if (!f) {
300
+ this.filtersModel[SearchQuery.BASE_PARAMS[k]] = {
301
+ value: null,
302
+ multiValue: [],
303
+ innerValue: []
304
+ };
305
+ }
306
+ else if (!this.filtersModel[f.property] ||
307
+ this.filtersModel[f.property].filter !== f) {
308
+ this.filtersModel[f.property] = {};
309
+ this.filtersModel[f.property].filter = f;
310
+ let value = typeof f.firstValue === 'string' &&
311
+ f.operator === SearchFilter.OPERATOR.IN
312
+ ? JSON.parse(f.firstValue)
313
+ : typeof f.firstValue !== 'boolean' ? [f.firstValue] : f.firstValue;
314
+ if (f.operator === SearchFilter.OPERATOR.RANGE) {
315
+ this.filtersModel[f.property].multiValue = value;
316
+ this.filtersModel[f.property].value = null;
317
+ }
318
+ else {
319
+ if (f.property === SearchQuery.BASE_PARAMS.CREATED ||
320
+ f.property === SearchQuery.BASE_PARAMS.MODIFIED) {
321
+ value = new RangeValue(f.operator, f.firstValue, f.secondValue);
322
+ }
323
+ this.filtersModel[f.property].value = value;
324
+ this.filtersModel[f.property].multiValue = null;
325
+ }
326
+ this.filtersModel[f.property].innerValue =
327
+ value instanceof Array ? value : [value];
328
+ this.filtersModel[f.property].label = [];
329
+ this.filtersModel[f.property].innerValue.forEach((v, i) => {
330
+ if (f.property === SearchQuery.BASE_PARAMS.CREATOR ||
331
+ f.property === SearchQuery.BASE_PARAMS.MODIFIER) {
332
+ this.filtersModel[f.property].label[i] = new Subject();
333
+ }
334
+ else {
335
+ this.filtersModel[f.property].label[i] = observableOf(this.renderFilter(f, v));
336
+ }
337
+ });
338
+ }
339
+ }
340
+ syncAggregations(name, operator) {
341
+ this.aggregationsModel[name].forEach(agg => {
342
+ let a = this.queryState.aggregations[name].find(aa => aa.key === agg.key);
343
+ if (a && a.value !== agg.value) {
344
+ agg.value = a.value;
345
+ }
346
+ else if (!a && this.queryState.lastChange !== name) {
347
+ agg.value = '';
348
+ }
349
+ agg.selected = this.isFilterActive(name, operator, agg.key);
350
+ agg.saved = !a && this.queryState.lastChange === name;
351
+ });
352
+ }
353
+ renderFilter(filter, value) {
354
+ if (value instanceof RangeValue) {
355
+ return this.createDateRestriction(filter);
356
+ }
357
+ else if (typeof value === 'string' && this.aggregationsModel[filter.property]) {
358
+ let agg = this.aggregationsModel[filter.property].find(a => a.key === value);
359
+ return agg.label;
360
+ }
361
+ return value;
362
+ }
363
+ createDateRestriction(filter) {
364
+ switch (filter.operator) {
365
+ case SearchFilter.OPERATOR.RANGE:
366
+ return this.translate.instant(`eo.search.agg.time.${filter.firstValue}`);
367
+ case SearchFilter.OPERATOR.EQUAL:
368
+ return `= ${this.datePipe.transform(filter.firstValue, 'eoShortDate')}`;
369
+ case SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH:
370
+ return `${this.datePipe.transform(filter.firstValue, 'eoShort')} - ${this.datePipe.transform(filter.secondValue, 'eoShort')}`;
371
+ case SearchFilter.OPERATOR.GREATER_OR_EQUAL:
372
+ return `${this.translate.instant('eo.search.agg.time.span.since')} ${this.datePipe.transform(filter.firstValue, 'eoShort')}`;
373
+ case SearchFilter.OPERATOR.LESS_OR_EQUAL:
374
+ return `${this.translate.instant('eo.search.agg.time.span.until')} ${this.datePipe.transform(filter.firstValue, 'eoShort')}`;
375
+ default:
376
+ return `(${filter.operator}) ${this.datePipe.transform(filter.firstValue, 'eoShort')}`;
377
+ }
378
+ }
379
+ resolveLabel(model, value) {
380
+ model.label.forEach((l, i) => l.next(value[i].title));
381
+ }
382
+ resolveSelection(aggs, key, selected) {
383
+ return aggs
384
+ .filter(a => selected ? a.key !== key && a.selected : a.key === key || a.selected)
385
+ .map(a => a.key);
386
+ }
387
+ resetExpertModeInput() {
388
+ this.query.term = '';
389
+ this.appSearchService.aggregate();
390
+ }
391
+ toggleExpertMode() {
392
+ if (this.typeGroupTree.length === 0) {
393
+ this.typeGroupTree = this.appSearchService.buildTypeGroupTree();
394
+ }
395
+ this.appSearchService.toggleExpertMode();
396
+ this.cd.detectChanges();
397
+ this.changeSearchInputFocus();
398
+ }
399
+ setQueryScope(scope) {
400
+ this.appSearchService.setQueryScope(scope);
401
+ }
402
+ xpSelectGroup(group) {
403
+ this.expertModeSupport.selectedGroup = group;
404
+ this.expertModeSupport.selectedType = null;
405
+ }
406
+ xpSelectType(type) {
407
+ this.expertModeSupport.selectedType = type;
408
+ }
409
+ xpAddToTerm(str) {
410
+ let term;
411
+ if (!this.query.term) {
412
+ term = str;
413
+ }
414
+ else {
415
+ term = this.query.term + ' ' + str;
416
+ }
417
+ this.query.term = term + ':';
418
+ this.expertInput.nativeElement.focus();
419
+ }
420
+ toggleType(_type) {
421
+ // do not directly toggle _type on the query, instead use the
422
+ // searchService to update the query store
423
+ this.appSearchService.toggleQueryType(_type);
424
+ }
425
+ isTypeActive(_type) {
426
+ return !!this.query.types.find(t => t.id === _type.id);
427
+ }
428
+ isTypeSaved(_type) {
429
+ return (!this.queryState.aggregations.type.get(_type.name) && this.queryState.lastChange === SearchQuery.BASE_PARAMS.TYPE);
430
+ }
431
+ getAggregationCount(_type) {
432
+ return ((this.isTypeSaved(_type) ? this.aggregationsModel[SearchQuery.BASE_PARAMS.TYPE].get(_type.name) : this.queryState.aggregations.type.get(_type.name)) || '');
433
+ }
434
+ buildFilter(filterType, operator, key) {
435
+ if (key instanceof RangeValue) {
436
+ return new SearchFilter(filterType, key.operator, key.firstValue, key.secondValue, { time: key.operator !== this.OPERATOR.EQUAL, timezone: false });
437
+ }
438
+ else {
439
+ return new SearchFilter(filterType, operator, key);
440
+ }
441
+ }
442
+ setFilter(filterType, operator, key, form) {
443
+ let filter = this.buildFilter(filterType, operator, key);
444
+ let empty = this.isEmpty(filter);
445
+ let activeFilter = this.query.filters.find(ff => ff.property === filter.property);
446
+ let duplicate = this.isFilterActive(filterType, operator, key);
447
+ if (empty && activeFilter && activeFilter.operator !== SearchFilter.OPERATOR.RANGE) {
448
+ this.appSearchService.removeQueryFilter(filter);
449
+ }
450
+ else if (!empty && !duplicate) {
451
+ this.appSearchService.addQueryFilter(filter);
452
+ }
453
+ }
454
+ toggleFilter(filterType, operator, key, selected) {
455
+ let filter = this.buildFilter(filterType, operator, key);
456
+ if (filterType === this.PARAMS.FILESIZE) {
457
+ let folderFilter = this.buildFilter('folder', 'eq', false);
458
+ this.appSearchService.toggleQueryFilters([filter, folderFilter], !selected);
459
+ }
460
+ else {
461
+ this.appSearchService.toggleQueryFilter(filter, !selected);
462
+ }
463
+ }
464
+ isEmpty(value) {
465
+ return (((value instanceof RangeValue || value instanceof SearchFilter) &&
466
+ this.isEmpty(value.firstValue) &&
467
+ this.isEmpty(value.secondValue)) ||
468
+ (value == null || value.length === 0));
469
+ }
470
+ isFilterActive(filterType, operator, key) {
471
+ let f = this.buildFilter(filterType, operator, key);
472
+ return !!this.query.filters.find(ff => ff.match(f.property, f.operator, f.firstValue, f.secondValue));
473
+ }
474
+ resetFilter(model, value) {
475
+ if (model.innerValue instanceof Array && model.innerValue.length > 1) {
476
+ let filter = this.buildFilter(model.filter.property, model.filter.operator, model.innerValue.filter(f => f !== value));
477
+ this.appSearchService.addQueryFilter(filter);
478
+ }
479
+ else {
480
+ this.appSearchService.removeQueryFilter(model.filter);
481
+ }
482
+ }
483
+ autocompleteSuggest(evt) {
484
+ setTimeout(() => {
485
+ let v = [];
486
+ // also trigger aggregations search
487
+ this.autocompleteSelect();
488
+ if (evt) {
489
+ this.appSearchService
490
+ .autocomplete(evt)
491
+ .pipe(switchMap(res => observableFrom(res).pipe(pluck('value'))))
492
+ .subscribe(res => v.push(res), () => { }, () => (this.autocompleteResults = v));
493
+ }
494
+ }, 1000);
495
+ }
496
+ expertTermChanged() {
497
+ this.expertModeQueryEmpty = false;
498
+ }
499
+ autocompleteSelect() {
500
+ this.loading = this.appSearchService.aggregate();
501
+ }
502
+ autocompletePaste(e) {
503
+ setTimeout(() => {
504
+ this.query.term = e.target.value;
505
+ this.autocompleteSelect();
506
+ }, 0);
507
+ }
508
+ executeSearch() {
509
+ this.expertModeQueryEmpty = false;
510
+ if (this.query.expertMode) {
511
+ // in expert search mode we pre-fetch results before executing the actual search
512
+ this.appSearchService.getSearchState({ aggs: { type: {} }, ...this.query.getQueryJson() }).subscribe((queryState) => {
513
+ // only execute the actual query when we've found something
514
+ if (!queryState.isEmpty) {
515
+ this.triggerSearch();
516
+ }
517
+ else {
518
+ this.expertModeQueryEmpty = true;
519
+ }
520
+ }, Utils.throw(() => {
521
+ this.logger.error('Error fetching search result');
522
+ this.expertModeQueryEmpty = true;
523
+ }));
524
+ }
525
+ else {
526
+ this.triggerSearch();
527
+ }
528
+ }
529
+ // execute the actual search by routing to the result state which then will execute the
530
+ // query and display the results
531
+ triggerSearch() {
532
+ this.query.resolveReference = true;
533
+ const uriParam = encodeURIComponent(Utils.formDataStringify(this.query.getQueryJson()));
534
+ this._overlayRef.close();
535
+ this.router.navigate([{ outlets: { modal: null } }]).then(() => {
536
+ const uriParamQuery = { queryParams: { query: uriParam } };
537
+ this.router.navigate(['/result'], uriParamQuery);
538
+ });
539
+ }
540
+ removeTerm() {
541
+ this.appSearchService.setTerm('');
542
+ }
543
+ removeType(type) {
544
+ if (this.idxSearch) {
545
+ this.exitIndexdataSearch();
546
+ }
547
+ else {
548
+ this.appSearchService.toggleQueryType(type);
549
+ }
550
+ }
551
+ removeContextType() {
552
+ this.appSearchService.setContextType(null);
553
+ }
554
+ removeFilter(filter) {
555
+ this.appSearchService.removeQueryFilter(filter);
556
+ // if we are in indesdata search mode, removing a filter that is no baseparam filter
557
+ // requires the from model to be updated
558
+ if (this.idxSearch && !this.appSearchService.isBaseParamFilter(filter)) {
559
+ // todo: update form model/data
560
+ let idxFilters = this.appSearchService.getIndexSearchQueryFilters();
561
+ if (idxFilters && idxFilters.length > 0) {
562
+ // set up form data from indexdata query filters
563
+ this.idxSearch.formOptions.data = idxFilters;
564
+ this.indexdataForm.setFormData(idxFilters);
565
+ }
566
+ else {
567
+ // if no filters are present reset the form
568
+ this.idxSearch.formOptions.data = {};
569
+ this.indexdataForm.resetForm();
570
+ }
571
+ }
572
+ }
573
+ addContextModel(formModels) {
574
+ let models = [...formModels];
575
+ this.idxSearch.contextModels.push(...models);
576
+ this.idxSearch.contextModels.sort(Utils.sortValues('label'));
577
+ }
578
+ exitIndexdataSearch() {
579
+ this.appSearchService.exitIndexdataSearch();
580
+ this.idxSearch = null;
581
+ }
582
+ setContext(contextFolderName) {
583
+ if (contextFolderName && this.currentContextFolderName !== contextFolderName) {
584
+ this.currentContextFolderName = contextFolderName;
585
+ const contextType = this.systemService.getObjectType(contextFolderName);
586
+ if (contextFolderName === ContextType.sysroot) {
587
+ this.appSearchService.setContextType({ name: ContextType.sysroot, label: ContextType.sysroot });
588
+ }
589
+ else if (contextType) {
590
+ this.appSearchService.setContextType(contextType);
591
+ }
592
+ else {
593
+ this.logger.error(`Context type '${contextFolderName}' not found.`);
594
+ }
595
+ }
596
+ else {
597
+ this.appSearchService.setContextType(null);
598
+ this.currentContextFolderName = null;
599
+ }
600
+ }
601
+ /**
602
+ * Selects a context type for the current search
603
+ * @param ctx The context form model
604
+ */
605
+ selectContext(ctx) {
606
+ if (this.idxSearch.contextFormOptions && this.idxSearch.contextFormOptions.formModel.name === ctx.name) {
607
+ this.appSearchService.setContextType(null);
608
+ }
609
+ else {
610
+ let context;
611
+ if (ctx.name === ContextType.sysroot) {
612
+ context = ctx;
613
+ }
614
+ else {
615
+ context = this.systemService.getObjectType(ctx.name);
616
+ this.idxSearch.contextFolderType = context;
617
+ }
618
+ this.appSearchService.setContextType(context);
619
+ let formData = {};
620
+ let idxFilters = this.appSearchService.getIndexSearchQueryFilters();
621
+ if (idxFilters && idxFilters.length > 0) {
622
+ formData = idxFilters;
623
+ }
624
+ this.idxSearch.contextFormOptions = { formModel: ctx, data: formData };
625
+ }
626
+ }
627
+ onIndexDataChanged(event) {
628
+ // only trigger when values are changed as changes may also appear when scripts
629
+ // change other form element properties (eg. readonly, required flag)
630
+ if (event.indexdataChanged) {
631
+ this.updateSearchFilterFromFormData();
632
+ }
633
+ }
634
+ updateSearchFilterFromFormData() {
635
+ if (!this.indexdataForm) {
636
+ return;
637
+ }
638
+ // add metadata filters for each form data entry
639
+ let idxFilters = [];
640
+ let formData = this.indexdataForm.getFormData();
641
+ if (this.contextForm) {
642
+ formData = Object.assign(formData, this.contextForm.getFormData());
643
+ }
644
+ for (let key of Object.keys(formData)) {
645
+ const filters = this.searchService.getSearchFilter(this.query.types, key, formData[key]).map(filter => {
646
+ // the search service does not like newline chars in case of multiline fields
647
+ if (Array.isArray(filter.firstValue)) {
648
+ filter.firstValue = filter.firstValue.map(value => value.replace(/\n/g, ' '));
649
+ }
650
+ else if (typeof filter.firstValue === 'string') {
651
+ filter.firstValue = filter.firstValue.replace(/\n/g, ' ');
652
+ }
653
+ return filter;
654
+ });
655
+ filters.forEach(f => idxFilters.push(f));
656
+ }
657
+ this.appSearchService.setIndexSearchQueryFilters(idxFilters);
658
+ }
659
+ /**
660
+ * Gets the object type element for a filter, to be able to show the
661
+ * label for a filter in the search summary.
662
+ *
663
+ * @param filter - the filter to fetch object type element for
664
+ */
665
+ getObjectTypeElementLabel(filter) {
666
+ let ot = this.appSearchService.getTargetTypeElementByName(filter.property);
667
+ return ot ? ot.label : filter.property + ' - ' + filter.firstValue;
668
+ }
669
+ saveQuery() {
670
+ // const queryParams: NavigationExtras = {queryParamsHandling : 'preserve'};
671
+ this._overlayRef.close();
672
+ this.router
673
+ .navigate([{ outlets: { modal: null } }], { replaceUrl: true })
674
+ .then(() => this.router.navigate(['/stored-queries'], { queryParams: { create: true } }));
675
+ }
676
+ updateStoredQuery() {
677
+ if (this.query instanceof StoredQuery) {
678
+ this.router.navigate([{ outlets: { modal: null } }], { replaceUrl: true });
679
+ this.storedQueriesService.saveStoredQuery(this.query).subscribe(res => {
680
+ this._overlayRef.close();
681
+ this.notifications.success(this.translate.instant('eo.search.storedquery.save.success'));
682
+ }, Utils.throw(null, this.translate.instant('eo.search.storedquery.save.error')));
683
+ }
684
+ }
685
+ resetQuery() {
686
+ this.appSearchService.reset();
687
+ this.isOwnQuery = false;
688
+ this.activeTabId = undefined;
689
+ if (this.idxSearch) {
690
+ this.exitIndexdataSearch();
691
+ }
692
+ }
693
+ closeSearchMenu() {
694
+ this._overlayRef.close();
695
+ }
696
+ moveObjectTypeGroup(groupLabel, direction) {
697
+ let index = this.objectTypeGroups.findIndex(group => groupLabel === group.label);
698
+ let newIndex = direction === 'left' ? index - 1 : index + 1;
699
+ while (index < 0) {
700
+ index += this.objectTypeGroups.length;
701
+ }
702
+ while (newIndex < 0) {
703
+ newIndex += this.objectTypeGroups.length;
704
+ }
705
+ if (newIndex >= this.objectTypeGroups.length) {
706
+ let k = newIndex - this.objectTypeGroups.length + 1;
707
+ while (k--) {
708
+ this.objectTypeGroups.push(undefined);
709
+ }
710
+ }
711
+ this.objectTypeGroups.splice(newIndex, 0, this.objectTypeGroups.splice(index, 1)[0]);
712
+ this.storageService.setItem(this.objectTypeGroupsStorageKey, this.objectTypeGroups.map(group => group.label));
713
+ }
714
+ focusSearchInput() {
715
+ if (this.searchInput) {
716
+ // TODO: this.searchInput.inputEL.nativeElement.focus();
717
+ this.cd.detectChanges();
718
+ }
719
+ }
720
+ changeSearchInputFocus() {
721
+ if (this.query.expertMode) {
722
+ this.renderer.selectRootElement('.expert-search__input').focus();
723
+ }
724
+ else {
725
+ this.focusSearchInput();
726
+ }
727
+ }
728
+ ngOnInit() {
729
+ this.capabilities = this.capabilityService.getCapabilities();
730
+ this.objectTypeGroups = this.appSearchService.objectTypeGroups;
731
+ this.objectTypeGroups[0].types = this.objectTypeGroups[0].types.filter(type => type.qname !== 'sysfolder' && type.qname !== 'sysdocument' && type.qname !== 'sysobject');
732
+ let sortedObjectTypeGroupLabels = this.storageService.getItem(this.objectTypeGroupsStorageKey);
733
+ let synced = true;
734
+ if (sortedObjectTypeGroupLabels && sortedObjectTypeGroupLabels.length === this.objectTypeGroups.length) {
735
+ for (let i = 0; i < this.objectTypeGroups.length; i++) {
736
+ if (!sortedObjectTypeGroupLabels.find(group => group === this.objectTypeGroups[i].label)) {
737
+ synced = false;
738
+ break;
739
+ }
740
+ }
741
+ if (synced) {
742
+ this.objectTypeGroups = [...this.objectTypeGroups].sort((a, b) => sortedObjectTypeGroupLabels.indexOf(a.label) - sortedObjectTypeGroupLabels.indexOf(b.label));
743
+ }
744
+ }
745
+ this.querySubscription = this.appSearchService.query$.subscribe((query) => this.processQuery(query));
746
+ // subscribe to query state as well to fetch result count and aggregations as they change
747
+ this.queryStateSubscription = this.appSearchService.queryState$.subscribe((queryState) => this.processQueryState(queryState));
748
+ this.appSearchService.aggregate();
749
+ }
750
+ ngAfterViewInit() {
751
+ setTimeout(() => {
752
+ this.searchInput.focusInput();
753
+ });
754
+ this._overlayRef = this.overlay.open(this.tplSearch, null, {
755
+ centered: false
756
+ });
757
+ this._overlayRef.afterClosed$.subscribe({
758
+ next: () => {
759
+ const queryParams = { queryParamsHandling: 'preserve' };
760
+ this.router.navigate([{ outlets: { modal: null } }], queryParams);
761
+ }
762
+ });
763
+ }
764
+ ngOnDestroy() {
765
+ this.appSearchService.resetAggs();
766
+ this.querySubscription.unsubscribe();
767
+ this.queryStateSubscription.unsubscribe();
768
+ }
769
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppSearchComponent, deps: [{ token: i1.AppSearchService }, { token: i2.YvcOverlayService }, { token: i3.SearchService }, { token: i3.SystemService }, { token: i3.NotificationsService }, { token: i3.TranslateService }, { token: i4.Router }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i3.StoredQueriesService }, { token: i3.CapabilitiesService }, { token: i3.UserService }, { token: i3.Logger }, { token: i3.LocalStorageService }], target: i0.ɵɵFactoryTarget.Component }); }
770
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppSearchComponent, selector: "eo-app-search", outputs: { onExecuteSearch: "onExecuteSearch" }, viewQueries: [{ propertyName: "tplSearch", first: true, predicate: ["tplSearch"], descendants: true, read: TemplateRef }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "expertInput", first: true, predicate: ["xpinput"], descendants: true }, { propertyName: "indexdataForm", first: true, predicate: ["idxform"], descendants: true }, { propertyName: "contextForm", first: true, predicate: ["ctxform"], descendants: true }], ngImport: i0, template: "<!-- <eo-dialog [visible]=\"true\" [styleClass]=\"'eo-app-search-dialog'\" [align]=\"'start'\" [minWidth]=\"'80vw'\"\n [minHeight]=\"'100vh'\" (hide)=\"closeSearchMenu($event)\"> -->\n<!-- <yvc-dialog [options]=\"{lightDismiss: true}\" [template]=\"tplSearch\" (closed)=\"closeSearchMenu()\"></yvc-dialog> -->\n<ng-template #tplSearch>\n\n <div class=\"eo-app-search\" [ngClass]=\"{expert: query.expertMode}\" eoRtlAware=\"full\" *ngIf=\"query\">\n\n <div class=\"head\">\n\n <div class=\"search\">\n <form (submit)=\"executeSearch()\">\n <div class=\"title\" translate>eo.search</div>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n\n <div class=\"search-box\">\n\n <yvc-autocomplete *ngIf=\"!query.expertMode; else expertInput\" #searchInput\n [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"query.term\"\n (autocompleteFnc)=\"autocompleteSuggest($event)\" [autocompleteValues]=\"autocompleteResults\"\n (suggestionSelect)=\"autocompleteSelect()\" [minLength]=\"3\" (keydown.enter)=\"executeSearch()\" (paste)=\"autocompletePaste($event)\">\n </yvc-autocomplete>\n\n <ng-template #expertInput>\n <input autofocus=\"autofocus\" class=\"expert-search__input\" #xpinput type=\"text\"\n (ngModelChange)=\"expertTermChanged()\" [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\">\n </ng-template>\n\n <button class=\"btn expert-mode\" type=\"button\" (click)=\"toggleExpertMode()\">\n <!--<span translate>eo.search.mode.expert</span>-->\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert' | translate)\" *ngIf=\"!query?.expertMode; else close\"></eo-icon>\n <ng-template #close>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert.close' | translate)\"></eo-icon>\n </ng-template>\n </button>\n\n <button type=\"button\" class=\"btn expert-mode expert-mode__reset\" [ngClass]=\"{active: query.term}\"\n (click)=\"resetExpertModeInput()\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.clear.search' | translate)\"></eo-icon>\n </button>\n\n <button class=\"btn btn-default\" type=\"submit\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </div>\n </form>\n </div>\n\n <div class=\"result\" *ngIf=\"!loading; else spinner\">{{queryState.totalCount | localeDecimal}}</div>\n <ng-template #spinner>\n <eo-loading-spinner class=\"search-aggregator__loader\" [size]=\"'medium'\" [mode]=\"'dark'\"></eo-loading-spinner>\n </ng-template>\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.close' | translate)\" (click)=\"closeSearchMenu()\"></eo-icon>\n\n </div>\n\n <div class=\"body\" *ngIf=\"!query.expertMode; else expert\">\n\n <yvc-tabs (tabChange)=\"onTabChange($event)\">\n\n <!-- object type select -->\n <ng-template [yvcTab]=\"{id: 'restrictType', label: 'eo.search.restrict.type' | translate}\">\n\n <div class=\"object-types rest-box-container\" [ngClass]=\"{idxenabled: query.types.length < 1}\"\n *ngIf=\"objectTypeGroups && !idxSearch\">\n <div class=\"group rest-box\" *ngFor=\"let group of objectTypeGroups; let i = index\">\n <div class=\"group-header\">\n <h3 *ngIf=\"group.label !== '0'\">{{group.label}}</h3>\n <h3 *ngIf=\"group.label === '0'\" translate>{{'eo.search.group.general'}}</h3>\n <div class=\"move-icons\">\n <eo-icon *ngIf=\"i !== 0\" class=\"move-left-icon\" (click)=\"moveObjectTypeGroup(group.label, 'left')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_left.svg'\"></eo-icon>\n <eo-icon *ngIf=\"i !== objectTypeGroups.length - 1\" class=\"move-right-icon\" (click)=\"moveObjectTypeGroup(group.label, 'right')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_right.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"type\" *ngFor=\"let type of group.types\"\n [ngClass]=\"{context: type.isContextFolder, folder: type.isFolder, abstract: type.isAbstract, selected: isTypeActive(type), saved: isTypeSaved(type)}\">\n\n <div class=\"checkbox\" (click)=\"toggleType(type)\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"item\" (click)=\"selectObjectType(type)\">\n <eo-icon [objectType]=\"type\"></eo-icon>\n <div class=\"label\">{{type.label}} {{type.isAbstract ? '('+ ('eo.search.type.abstract' | translate) +\n ')' : ''}}</div>\n <div class=\"count\">{{getAggregationCount(type) | localeDecimal}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"indexdata-search\" *ngIf=\"idxSearch\">\n <h2>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_arrow_back.svg'\"\n (click)=\"exitIndexdataSearch()\"></eo-icon>\n <span translate [translateParams]=\"{type: idxSearch.type.label}\">eo.search.objecttype.form</span>\n </h2>\n\n <div class=\"context\" *ngIf=\"idxSearch.contextModels.length\">\n\n <div class=\"context-select\">\n <div translate>eo.search.objecttype.form.context</div>\n <div class=\"spacer\"></div>\n\n <eo-context-search *ngFor=\"let ctx of idxSearch.contextModels; index as i\" [ctx]=\"ctx\" [query]=\"query\"\n [selected]=\"currentContextFolderName === ctx.name\"\n [disabled]=\"(currentContextFolderName && currentContextFolderName !== ctx.name)\"\n [idxSearch]=\"idxSearch\" (setContext)=\"setContext($event)\">\n </eo-context-search>\n </div>\n\n <section class=\"context form\">\n <eo-object-form class=\"dark\" #ctxform\n *ngIf=\"idxSearch.contextFormOptions && idxSearch.contextFormOptions?.formModel?.elements?.length\"\n [formOptions]=\"idxSearch.contextFormOptions\" (statusChanged)=\"onIndexDataChanged($event)\">\n </eo-object-form>\n </section>\n </div>\n\n\n <section class=\"object-type form\" *ngIf=\"idxSearch.formOptions\">\n <eo-object-form #idxform [formOptions]=\"idxSearch.formOptions\"\n (statusChanged)=\"onIndexDataChanged($event)\" (onFormReady)=\"idxform.focusForm()\">\n </eo-object-form>\n </section>\n </div>\n </ng-template>\n\n <!-- created tab -->\n <ng-template [yvcTab]=\"{id: 'restrictCreated', label: 'eo.search.restrict.creation' | translate }\">\n <div class=\"created rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.CREATED]\"\n (click)=\"toggleFilter(PARAMS.CREATED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #createdForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #createdField [(ngModel)]=\"filtersModel[PARAMS.CREATED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.CREATED].value ? filtersModel[PARAMS.CREATED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"createdField.searchOption && createdField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.CREATED, OPERATOR.EQUAL, $event, createdForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-creator\">\n <h3 translate>eo.search.agg.creator</h3>\n <form #creatorForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.createdby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.CREATOR].value\" name=\"creator\"\n (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.CREATOR], $event)\" [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.CREATOR, OPERATOR.IN, $event, creatorForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictModification', label: 'eo.search.restrict.modification' | translate}\">\n <div class=\"modified rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MODIFIED]\"\n (click)=\"toggleFilter(PARAMS.MODIFIED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #modifiedForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #modifiedField [(ngModel)]=\"filtersModel[PARAMS.MODIFIED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.MODIFIED].value ? filtersModel[PARAMS.MODIFIED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"modifiedField.searchOption && modifiedField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIED, OPERATOR.EQUAL, $event, modifiedForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-modifier\">\n <h3 translate>eo.search.agg.modifier</h3>\n <form #modifierForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.modifiedby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.MODIFIER].value\"\n name=\"modifier\" (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.MODIFIER], $event)\"\n [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIER, OPERATOR.IN, $event, modifierForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictFile', label: 'eo.search.restrict.file' | translate}\">\n <div class=\"file rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-mimetype-group\">\n <h3 translate>eo.search.restrict.mimetypegroup</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MIMETYPEGROUP]\"\n (click)=\"setFilter(PARAMS.MIMETYPEGROUP, OPERATOR.IN, resolveSelection(aggregationsModel[PARAMS.MIMETYPEGROUP], agg.key, agg.selected))\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"checkbox\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filesize\">\n <h3 translate>eo.search.restrict.filesize</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.FILESIZE]\"\n (click)=\"toggleFilter(PARAMS.FILESIZE, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filename\">\n <h3 translate>eo.search.restrict.filename</h3>\n <form #filenameForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.restrict.filename' | translate\">\n <eo-string [autocomplete]=\"true\" [qname]=\"'filename'\"\n [(ngModel)]=\"filtersModel[PARAMS.FILENAME].value\" name=\"filename\"\n (ngModelChange)=\"setFilter(PARAMS.FILENAME, OPERATOR.EQUAL, $event, filenameForm)\"></eo-string>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n </yvc-tabs>\n\n <!-- summary of the current search filters -->\n <div class=\"summary-panel\">\n\n <div class=\"headline stored-query\" *ngIf=\"isStoredQuery; else reghead\">\n <div class=\"spaceInbetwen\">\n <div class=\"savedSearchIcon\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"></eo-icon>\n </div>\n <div class=\"store\">\n <div class=\"pre\" translate>eo.search.aside.summary.storedquery</div>\n <div class=\"stored-query-name\">{{storedQuery.name}}</div>\n </div>\n </div>\n </div>\n\n <ng-template #reghead>\n <div class=\"headline\" translate>eo.search.aside.summary</div>\n </ng-template>\n\n <section class=\"query-types\">\n <div class=\"section section-searchterm\" *ngIf=\"query.term\">\n <div class=\"title\" translate>eo.search.aside.summary.term</div>\n <div class=\"filter\">\n <div class=\"label\">{{query.term}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeTerm()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-contexttype\" *ngIf=\"query.contextFolderTypes.length\">\n <div class=\"title\" translate>eo.search.aside.summary.contextfoldertypes</div>\n <div class=\"filter\" *ngFor=\"let type of query.contextFolderTypes\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeContextType()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-objecttype\" *ngIf=\"query.types.length\">\n <div class=\"title\" translate>eo.search.aside.summary.types</div>\n <div class=\"filter\" *ngFor=\"let type of query.types\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeType(type)\"></eo-icon>\n </div>\n </div>\n\n <ng-template #filterTemplate let-filter let-translate>\n <ng-container *ngIf=\"filter.innerValue.length\">\n <div class=\"filter\" *ngFor=\"let val of filter.innerValue; index as i\">\n <div class=\"label\">{{filter.label[i] | async}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"resetFilter(filter, val)\"></eo-icon>\n </div>\n </ng-container>\n </ng-template>\n\n <div class=\"section section-creation\"\n *ngIf=\"filtersModel[PARAMS.CREATED].innerValue?.length || filtersModel[PARAMS.CREATOR].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.creation</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATOR] }\"></ng-template>\n </div>\n\n <div class=\"section section-modification\"\n *ngIf=\"filtersModel[PARAMS.MODIFIED].innerValue?.length || filtersModel[PARAMS.MODIFIER].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.modification</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIER] }\"></ng-template>\n </div>\n\n <div class=\"section section-mimetypegroup\"\n *ngIf=\"filtersModel[PARAMS.MIMETYPEGROUP].innerValue.length || filtersModel[PARAMS.FILESIZE].innerValue.length || filtersModel[PARAMS.FILENAME].innerValue.length\">\n <div class=\"title\" translate>eo.search.restrict.file</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MIMETYPEGROUP] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILESIZE] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILENAME] }\"></ng-template>\n </div>\n </section>\n\n <div class=\"actions\" *ngIf=\"query.term || query.filters.length || query.types.length; else emptySearch\">\n\n <ng-container *ngIf=\"isStoredQuery; else regactions\">\n <button class=\"secondary btn-reset\" (click)=\"resetQuery()\" translate>eo.search.storedquery.close</button>\n <button class=\"primary grey btn-update\" (click)=\"updateStoredQuery()\"\n *ngIf=\"capabilities.storedqueries && isOwnQuery\" translate>eo.search.storedquery.update</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-container>\n\n <ng-template #regactions>\n <button class=\"primary grey btn-reset\" (click)=\"resetQuery()\" translate>eo.search.reset</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-template>\n\n\n </div>\n\n <ng-template #emptySearch>\n <div class=\"empty-search\" translate>eo.search.summary.empty</div>\n </ng-template>\n\n </div>\n\n\n </div>\n\n <!-- expert mode body panel containing explanations -->\n <ng-template #expert>\n <div class=\"body expert\">\n\n <div class=\"empty\" *ngIf=\"expertModeQueryEmpty\"><span translate>eo.search.mode.expert.result.empty</span></div>\n\n <!--\n <h2><span translate>eo.search.mode.expert</span></h2>\n <div class=\"intro\" translate>eo.search.mode.expert.intro</div>\n\n <div class=\"base-params fields\">\n <h2 translate>eo.search.mode.expert.support.baseparams</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.baseParams\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"system-types fields\">\n\n <div class=\"column column-group\">\n <h2 translate>eo.search.mode.expert.support.group</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let group of typeGroupTree\"\n [ngClass]=\"{selected: expertModeSupport.selectedGroup && group.id === expertModeSupport.selectedGroup.id}\"\n (click)=\"xpSelectGroup(group)\">\n <div *ngIf=\"group.label !== '0'\">{{group.label}}</div>\n <div *ngIf=\"group.label === '0'\">{{'eo.search.group.general' | translate}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column column-type\" *ngIf=\"expertModeSupport.selectedGroup\">\n <h2 translate>eo.search.mode.expert.support.type</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let type of expertModeSupport.selectedGroup.tree\"\n [ngClass]=\"{selected: expertModeSupport.selectedType && type.id === expertModeSupport.selectedType.id}\"\n (click)=\"xpSelectType(type)\">\n <div>{{type.label}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column section-field\" *ngIf=\"expertModeSupport.selectedType\">\n <h2 translate>eo.search.mode.expert.support.field</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.selectedType.children\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span><span class=\"type\">{{el.type}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n </div>\n\n -->\n </div>\n </ng-template>\n </div>\n <!-- </eo-dialog> -->\n</ng-template>\n", styles: ["eo-app-search dialog{height:100vh;margin:0!important;max-height:100vh;max-block-size:100%!important;min-width:500px;width:80%}@media screen and (max-width: 500px){.eo-app-search-dialog{width:100%!important;min-width:inherit}}.eo-app-search-dialog .eo-dialog-content{overflow:inherit;max-height:100%}.eo-app-search-dialog .eo-dialog-header{display:none}.eo-app-search.rtl .head .close{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body .indexdata-search h2 eo-icon{transform:rotate(180deg)}.eo-app-search{--search-min-width: 500px;--search-box-max-width: 600px;--search-summary-width: 350px;width:80vw;height:100vh;background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;min-width:var(--search-min-width)}.eo-app-search .head{background:var(--color-primary-2);flex:0 0 auto;color:var(--color-white);position:relative;display:flex;flex-flow:row nowrap;padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .head .search{flex:1 1 auto;justify-content:space-between;margin:0 calc(var(--app-pane-padding) / 2);z-index:2}.eo-app-search .head .search .title{font-size:var(--font-display);font-weight:var(--font-weight-light);min-height:1em;line-height:1em}@media screen and (max-width: 480px){.eo-app-search .head .search .title{font-size:var(--font-title)}}.eo-app-search .head .search .query-scope{margin:calc(var(--app-pane-padding) * 2) 0 0 0;min-width:var(--search-min-width);max-width:var(--search-box-max-width)}.eo-app-search .head .search .search-box{margin-bottom:var(--app-pane-padding);display:flex;flex-flow:row nowrap;align-items:stretch;background:var(--color-white);max-width:var(--search-box-max-width);box-shadow:0 2px 2px rgba(var(--color-black-rgb),.2)}@media screen and (max-width: 480px){.eo-app-search .head .search .search-box{margin-top:var(--app-pane-padding)}}.eo-app-search .head .search .search-box yvc-autocomplete{flex:1 1 auto;background:transparent;outline:0;border:0}.eo-app-search .head .search .search-box yvc-autocomplete span.ui-autocomplete{width:100%}.eo-app-search .head .search .search-box input{width:100%;border:0;box-sizing:border-box;padding:calc(var(--app-pane-padding) / 2);font-size:var(--font-title)}.eo-app-search .head .search .search-box input::-ms-clear{display:none}.eo-app-search .head .search .search-box button[type=submit]{background:var(--color-accent);color:var(--color-white);border:0;padding:0 var(--app-pane-padding);font-size:var(--font-subhead)}.eo-app-search .head .search .search-box button.expert-mode{padding:0 calc(var(--app-pane-padding) / 2);background:transparent;border:0;color:var(--text-color-hint);display:flex;align-items:center}.eo-app-search .head .search .search-box button.expert-mode:focus{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode__reset{opacity:0;width:0;padding:0;transition:all .2s ease-in-out}.eo-app-search .head .search .search-box button.expert-mode__reset.active{opacity:1;width:40px;padding:0 8px}.eo-app-search .head .search .search-box button.expert-mode span{display:none;padding:calc(var(--app-pane-padding) / 4);white-space:nowrap;animation:eoFadeIn var(--app-default-transition-duration)}.eo-app-search .head .search .search-box button.expert-mode:hover{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode:hover span{display:block}.eo-app-search .head .result{position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding) * 2.5);z-index:1;font-size:7em;line-height:1em;opacity:.1}@media screen and (max-width: 900px){.eo-app-search .head .result{font-size:3em;right:calc(var(--app-pane-padding) * 3);top:var(--app-pane-padding)}}.eo-app-search .head .search-aggregator__loader{z-index:11;position:absolute;right:13%;top:30%;-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s}@media screen and (max-width: 900px){.eo-app-search .head .search-aggregator__loader{top:5%}}.eo-app-search .head .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);z-index:2}.eo-app-search .body{background:rgba(var(--color-white-rgb),.2);flex:1 1 auto;position:relative}@media screen and (max-width: 1000px){.eo-app-search .body .summary-panel{bottom:0;right:0!important;left:0!important;top:auto!important;width:auto!important;display:flex;flex-flow:row nowrap}.eo-app-search .body .summary-panel .headline:not(.stored-query),.eo-app-search .body .summary-panel .section{display:none}.eo-app-search .body .summary-panel .headline.stored-query{margin-bottom:0;display:flex;align-items:center;padding:0 var(--app-pane-padding)}.eo-app-search .body .summary-panel .headline.stored-query .pre{display:none}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-subhead)!important}.eo-app-search .body .summary-panel .actions{flex:1 1 auto}.eo-app-search .body yvc-tabs>section[role=tabpanel]{padding-right:0!important;padding-left:0!important}}.eo-app-search .body>yvc-tabs{position:absolute;inset:0}.eo-app-search .body>yvc-tabs>header{--text-color-body: #fff;--text-color-hint: rgba(255,255,255,.7);background:var(--color-primary-2)}.eo-app-search .body>yvc-tabs>section[role=tabpanel]{padding:calc(var(--app-pane-padding) - var(--app-pane-padding) / 2) calc(var(--app-pane-padding) * 2 + var(--search-summary-width)) 0 calc(var(--app-pane-padding) - 2px)}.eo-app-search .body .summary-panel{background:rgba(var(--color-black-rgb),.06);width:var(--search-summary-width);position:absolute;top:calc(var(--app-pane-padding) + var(--eo-tab-nav-height));right:var(--app-pane-padding);box-sizing:border-box}.eo-app-search .body .summary-panel .query-types{overflow:auto;max-height:calc(100vh - 290px)}.eo-app-search .body .summary-panel .headline{line-height:1em;font-size:var(--font-subhead);font-weight:var(--font-weight-light);color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .summary-panel .headline .spaceInbetwen{display:flex;align-items:center}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon{display:block;padding:calc(var(--app-pane-padding) / 4) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon eo-icon{--eoSvgIcon-size: 44px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store{display:block;min-height:0;min-width:0;padding-left:12px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .pre{padding:calc(var(--app-pane-padding) / 2) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .stored-query-name{font-size:var(--font-title);padding:calc(var(--app-pane-padding) / 2) 0;line-height:1.2em}.eo-app-search .body .summary-panel .headline.stored-query{background:var(--color-primary-3);color:var(--color-white);font-size:var(--font-body)}.eo-app-search .body .summary-panel .empty-search{padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .section{padding:calc(var(--app-pane-padding) / 2);max-height:calc(100vh - 280px);overflow-y:auto}.eo-app-search .body .summary-panel .section .title{border-bottom:1px solid rgba(var(--color-black-rgb),.1);padding-bottom:calc(var(--app-pane-padding) / 4);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .filter{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;background:rgba(var(--color-white-rgb),.6);margin-top:4px;align-items:center}.eo-app-search .body .summary-panel .filter .label{display:inline-block;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;padding:0 0 0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .summary-panel .filter eo-icon{flex:0 0 auto;padding:calc(var(--app-pane-padding) / 4);box-sizing:border-box;cursor:pointer;color:var(--text-color-hint)}.eo-app-search .body .summary-panel .filter eo-icon:hover{color:var(--text-color-caption)}.eo-app-search .body .summary-panel .actions{display:flex;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2 - 2px)}.eo-app-search .body .summary-panel .actions button{margin:0 2px;line-height:1em;font-size:var(--font-hint)}.eo-app-search .body .ui-tabview .ui-tabview-panel{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .ui-tabview .ui-tabview-panel h2{margin:0 0 calc(var(--app-pane-padding) * 1.5) 0;padding:0;font-weight:var(--font-weight-light);font-size:var(--font-title);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container{display:flex;flex-flow:row wrap;align-items:stretch}.eo-app-search .body .rest-box-container .rest-box{margin:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2);background:var(--color-white);flex:1 1 auto}.eo-app-search .body .rest-box-container .rest-box h3{margin:0 0 var(--app-pane-padding) 0;padding:0;font-size:var(--font-caption);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item{display:flex;flex:1 1 auto;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);color:var(--text-color-body)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected{background:var(--color-primary-3);color:var(--color-white)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover{background:var(--list-item-hover-background)}.eo-app-search .body .rest-box-container .rest-box .label{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .count{font-size:var(--font-caption);min-width:30px;text-align:right;font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .group-header .move-icons{display:none}.eo-app-search .body .object-types .group .type{display:flex;flex-flow:row nowrap;align-items:center;padding:1px 0}.eo-app-search .body .object-types .group .type.context{font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .type.folder .item eo-icon{background:rgba(var(--color-black-rgb),.15)}.eo-app-search .body .object-types .group .type.folder .item:hover eo-icon{background:rgba(var(--color-white-rgb),.3)}.eo-app-search .body .object-types .group .type.abstract .item{color:var(--text-color-caption)}.eo-app-search .body .object-types .group .type.abstract .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .group .type .item{display:flex;flex:1 1 auto;border-radius:2px;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);cursor:default;color:var(--text-color-body)}.eo-app-search .body .object-types .group .type .item eo-icon{color:var(--text-color-caption);width:16px;height:16px;box-sizing:content-box;padding:2px;border-radius:2px;transition:none;-webkit-transition:none;-moz-transition:none;-o-transition:none}.eo-app-search .body .object-types .group:hover .group-header{display:flex;justify-content:space-between}.eo-app-search .body .object-types .group:hover .group-header .move-icons{display:flex}.eo-app-search .body .object-types .group:hover .group-header .move-left-icon,.eo-app-search .body .object-types .group:hover .group-header .move-right-icon{cursor:pointer;color:var(--text-color-caption)}.eo-app-search .body .object-types .type .item{cursor:pointer}.eo-app-search .body .object-types .type .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .type .item:hover eo-icon{color:var(--panel-background)}.eo-app-search .body .indexdata-search{padding:calc(var(--app-pane-padding) / 2) 0 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2{display:flex;flex-flow:row;align-items:center}.eo-app-search .body .indexdata-search h2 eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2 span{padding:0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .indexdata-search .context{margin-bottom:var(--app-pane-padding)}.eo-app-search .body .indexdata-search .context .context-select{display:flex;align-items:center;flex-flow:row wrap;padding-bottom:1px}.eo-app-search .body .indexdata-search .context .context-select .spacer{width:var(--app-pane-padding)}.eo-app-search .body .indexdata-search eo-object-form{border:1px solid rgba(var(--color-black-rgb),.1)}.eo-app-search .body .indexdata-search eo-object-form.dark{display:block;background-color:var(--color-primary-2)}.eo-app-search.rtl{left:0;right:0;animation:appSearchAppearRTL var(--app-default-transition-duration)}.eo-app-search.rtl .head .result,.eo-app-search.rtl .body .summary-panel{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body yvc-tabs{padding-right:0;padding-left:calc(var(--app-pane-padding) * 2 + var(--search-summary-width));padding-bottom:0;padding-top:0}.eo-app-search.expert .head .result{display:none}.eo-app-search.expert .head .search .search-box{max-width:100%}.eo-app-search.expert .head .search .search-box button.expert-mode{color:var(--color-accent)}.eo-app-search.expert .body{background:var(--color-primary-2);color:var(--color-white);display:flex;flex-flow:column}.eo-app-search.expert .body h2{flex:0 0 auto;padding:0;margin:var(--app-pane-padding) 0;font-size:var(--font-title);font-weight:var(--font-weight-light)}.eo-app-search.expert .body h2 span{padding:calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2) var(--app-pane-padding);border-bottom:4px solid var(--color-accent)}.eo-app-search.expert .body .intro{flex:0 0 auto;padding:var(--app-pane-padding)}.eo-app-search.expert .body .empty{flex:0 0 auto;padding:0 var(--app-pane-padding)}.eo-app-search.expert .body .empty span{padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);border-radius:2px;background:var(--color-error);color:var(--color-white)}.eo-app-search.expert .body .fields h2{margin:calc(var(--app-pane-padding) / 2);flex:0 0 auto;padding:calc(var(--app-pane-padding) / 2);border-bottom:1px solid rgba(var(--color-white-rgb),.3)}.eo-app-search.expert .body .fields .item{padding:calc(var(--app-pane-padding) / 2);cursor:pointer;border-radius:2px;background:rgba(var(--color-white-rgb),.06);margin-bottom:4px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.eo-app-search.expert .body .fields .item:hover,.eo-app-search.expert .body .fields .item.selected{background:rgba(var(--color-white-rgb),.2)}.eo-app-search.expert .body .fields .item .label{font-weight:var(--font-weight-bold);display:flex;justify-content:space-between}.eo-app-search.expert .body .fields .item .label .type{font-size:var(--font-hint);opacity:.5}.eo-app-search.expert .body .fields .item .data{opacity:.75}.eo-app-search.expert .body .base-params{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .base-params .items{display:flex;flex-flow:row wrap;padding:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .base-params .items .item{margin:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .system-types{flex:1 1 auto;display:flex;flex-flow:row;justify-content:flex-start;align-items:stretch;padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .system-types .column{flex:0 0 33%;box-sizing:border-box;display:flex;flex-flow:column}.eo-app-search.expert .body .system-types .column .items{padding:calc(var(--app-pane-padding) / 2);flex:1 1 auto;overflow-y:auto}.eo-app-search.expert .body .system-types .column .items::-webkit-scrollbar-thumb{background-color:rgba(var(--color-white-rgb),.1)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox,.eo-app-search .body .rest-box-container .rest-box .type .checkbox{width:20px;height:20px;cursor:pointer;border:1px solid var(--text-color-hint);border-radius:2px;margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type .checkbox svg{opacity:0}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover{border-color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover svg,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover svg{fill:var(--text-color-body);opacity:.3}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox{background:var(--color-primary-3);border-color:var(--color-primary-3)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox svg{fill:var(--color-white)!important;opacity:1}.eo-app-search .body .rest-box-container .rest-box .rest-item.saved .count,.eo-app-search .body .rest-box-container .rest-box .type.saved .count{font-weight:var(--font-weight-normal)}@keyframes appSearchAppear{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}@keyframes appSearchAppearRTL{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RtlAwareDirective, selector: "[eoRtlAware]", inputs: ["eoRtlAware"] }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.QueryScopeSelectComponent, selector: "eo-query-scope-select", inputs: ["selection"], outputs: ["select"] }, { kind: "component", type: i12.Tabs, selector: "yvc-tabs", inputs: ["tabs", "layoutSettingsID", "panelOrder", "panelOrderIncludeUnmentioned", "cacheViews", "tabSplitEnabled", "tabRemoveEnabled"], outputs: ["tabSplit", "tabRemove", "tabChange"] }, { kind: "directive", type: i12.YvcTabDirective, selector: "[yvcTab]", inputs: ["yvcTab"] }, { kind: "component", type: i13.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i14.DatetimeRangeComponent, selector: "eo-datetime-range", inputs: ["withTime", "pickerTitle", "operator"] }, { kind: "component", type: i15.OrganizationComponent, selector: "eo-organization", inputs: ["removeCurrentUser", "situation", "multiselect", "readonly", "dataMeta", "placeholder", "exceptions", "filterObject"], outputs: ["onValueResolved", "onDataMetaChanged"] }, { kind: "component", type: i16.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i17.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "component", type: i18.AutoComplete, selector: "yvc-autocomplete", inputs: ["field", "placeholder", "minLength", "multiple", "typeahead", "distinctValues", "forceSelection", "autocompleteValues", "disabled"], outputs: ["autocompleteFnc", "blur", "focus", "suggestionUnselect", "suggestionSelect"] }, { kind: "component", type: i19.ContextSearchComponent, selector: "eo-context-search", inputs: ["ctx", "query", "idxSearch", "selected", "disabled"], outputs: ["setContext"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i20.LocaleDecimalPipe, name: "localeDecimal" }], encapsulation: i0.ViewEncapsulation.None }); }
771
+ }
772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppSearchComponent, decorators: [{
773
+ type: Component,
774
+ args: [{ selector: 'eo-app-search', encapsulation: ViewEncapsulation.None, template: "<!-- <eo-dialog [visible]=\"true\" [styleClass]=\"'eo-app-search-dialog'\" [align]=\"'start'\" [minWidth]=\"'80vw'\"\n [minHeight]=\"'100vh'\" (hide)=\"closeSearchMenu($event)\"> -->\n<!-- <yvc-dialog [options]=\"{lightDismiss: true}\" [template]=\"tplSearch\" (closed)=\"closeSearchMenu()\"></yvc-dialog> -->\n<ng-template #tplSearch>\n\n <div class=\"eo-app-search\" [ngClass]=\"{expert: query.expertMode}\" eoRtlAware=\"full\" *ngIf=\"query\">\n\n <div class=\"head\">\n\n <div class=\"search\">\n <form (submit)=\"executeSearch()\">\n <div class=\"title\" translate>eo.search</div>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n\n <div class=\"search-box\">\n\n <yvc-autocomplete *ngIf=\"!query.expertMode; else expertInput\" #searchInput\n [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"query.term\"\n (autocompleteFnc)=\"autocompleteSuggest($event)\" [autocompleteValues]=\"autocompleteResults\"\n (suggestionSelect)=\"autocompleteSelect()\" [minLength]=\"3\" (keydown.enter)=\"executeSearch()\" (paste)=\"autocompletePaste($event)\">\n </yvc-autocomplete>\n\n <ng-template #expertInput>\n <input autofocus=\"autofocus\" class=\"expert-search__input\" #xpinput type=\"text\"\n (ngModelChange)=\"expertTermChanged()\" [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\">\n </ng-template>\n\n <button class=\"btn expert-mode\" type=\"button\" (click)=\"toggleExpertMode()\">\n <!--<span translate>eo.search.mode.expert</span>-->\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert' | translate)\" *ngIf=\"!query?.expertMode; else close\"></eo-icon>\n <ng-template #close>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\n [iconTitle]=\"('eo.search.mode.expert.close' | translate)\"></eo-icon>\n </ng-template>\n </button>\n\n <button type=\"button\" class=\"btn expert-mode expert-mode__reset\" [ngClass]=\"{active: query.term}\"\n (click)=\"resetExpertModeInput()\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.clear.search' | translate)\"></eo-icon>\n </button>\n\n <button class=\"btn btn-default\" type=\"submit\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </div>\n </form>\n </div>\n\n <div class=\"result\" *ngIf=\"!loading; else spinner\">{{queryState.totalCount | localeDecimal}}</div>\n <ng-template #spinner>\n <eo-loading-spinner class=\"search-aggregator__loader\" [size]=\"'medium'\" [mode]=\"'dark'\"></eo-loading-spinner>\n </ng-template>\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\n [iconTitle]=\"('eo.search.close' | translate)\" (click)=\"closeSearchMenu()\"></eo-icon>\n\n </div>\n\n <div class=\"body\" *ngIf=\"!query.expertMode; else expert\">\n\n <yvc-tabs (tabChange)=\"onTabChange($event)\">\n\n <!-- object type select -->\n <ng-template [yvcTab]=\"{id: 'restrictType', label: 'eo.search.restrict.type' | translate}\">\n\n <div class=\"object-types rest-box-container\" [ngClass]=\"{idxenabled: query.types.length < 1}\"\n *ngIf=\"objectTypeGroups && !idxSearch\">\n <div class=\"group rest-box\" *ngFor=\"let group of objectTypeGroups; let i = index\">\n <div class=\"group-header\">\n <h3 *ngIf=\"group.label !== '0'\">{{group.label}}</h3>\n <h3 *ngIf=\"group.label === '0'\" translate>{{'eo.search.group.general'}}</h3>\n <div class=\"move-icons\">\n <eo-icon *ngIf=\"i !== 0\" class=\"move-left-icon\" (click)=\"moveObjectTypeGroup(group.label, 'left')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_left.svg'\"></eo-icon>\n <eo-icon *ngIf=\"i !== objectTypeGroups.length - 1\" class=\"move-right-icon\" (click)=\"moveObjectTypeGroup(group.label, 'right')\" [iconSrc]=\"'assets/_default/svg/ic_arrow_right.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"type\" *ngFor=\"let type of group.types\"\n [ngClass]=\"{context: type.isContextFolder, folder: type.isFolder, abstract: type.isAbstract, selected: isTypeActive(type), saved: isTypeSaved(type)}\">\n\n <div class=\"checkbox\" (click)=\"toggleType(type)\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"item\" (click)=\"selectObjectType(type)\">\n <eo-icon [objectType]=\"type\"></eo-icon>\n <div class=\"label\">{{type.label}} {{type.isAbstract ? '('+ ('eo.search.type.abstract' | translate) +\n ')' : ''}}</div>\n <div class=\"count\">{{getAggregationCount(type) | localeDecimal}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"indexdata-search\" *ngIf=\"idxSearch\">\n <h2>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_arrow_back.svg'\"\n (click)=\"exitIndexdataSearch()\"></eo-icon>\n <span translate [translateParams]=\"{type: idxSearch.type.label}\">eo.search.objecttype.form</span>\n </h2>\n\n <div class=\"context\" *ngIf=\"idxSearch.contextModels.length\">\n\n <div class=\"context-select\">\n <div translate>eo.search.objecttype.form.context</div>\n <div class=\"spacer\"></div>\n\n <eo-context-search *ngFor=\"let ctx of idxSearch.contextModels; index as i\" [ctx]=\"ctx\" [query]=\"query\"\n [selected]=\"currentContextFolderName === ctx.name\"\n [disabled]=\"(currentContextFolderName && currentContextFolderName !== ctx.name)\"\n [idxSearch]=\"idxSearch\" (setContext)=\"setContext($event)\">\n </eo-context-search>\n </div>\n\n <section class=\"context form\">\n <eo-object-form class=\"dark\" #ctxform\n *ngIf=\"idxSearch.contextFormOptions && idxSearch.contextFormOptions?.formModel?.elements?.length\"\n [formOptions]=\"idxSearch.contextFormOptions\" (statusChanged)=\"onIndexDataChanged($event)\">\n </eo-object-form>\n </section>\n </div>\n\n\n <section class=\"object-type form\" *ngIf=\"idxSearch.formOptions\">\n <eo-object-form #idxform [formOptions]=\"idxSearch.formOptions\"\n (statusChanged)=\"onIndexDataChanged($event)\" (onFormReady)=\"idxform.focusForm()\">\n </eo-object-form>\n </section>\n </div>\n </ng-template>\n\n <!-- created tab -->\n <ng-template [yvcTab]=\"{id: 'restrictCreated', label: 'eo.search.restrict.creation' | translate }\">\n <div class=\"created rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.CREATED]\"\n (click)=\"toggleFilter(PARAMS.CREATED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #createdForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #createdField [(ngModel)]=\"filtersModel[PARAMS.CREATED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.CREATED].value ? filtersModel[PARAMS.CREATED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"createdField.searchOption && createdField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.CREATED, OPERATOR.EQUAL, $event, createdForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-creator\">\n <h3 translate>eo.search.agg.creator</h3>\n <form #creatorForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.createdby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.CREATOR].value\" name=\"creator\"\n (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.CREATOR], $event)\" [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.CREATOR, OPERATOR.IN, $event, creatorForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictModification', label: 'eo.search.restrict.modification' | translate}\">\n <div class=\"modified rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-timespan\">\n <h3 translate>eo.search.agg.time.span</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MODIFIED]\"\n (click)=\"toggleFilter(PARAMS.MODIFIED, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-timespan-custom\">\n <h3 translate>eo.search.agg.time.span.custom</h3>\n <form #modifiedForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\n <eo-datetime-range #modifiedField [(ngModel)]=\"filtersModel[PARAMS.MODIFIED].value\" name=\"range\"\n [operator]=\"filtersModel[PARAMS.MODIFIED].value ? filtersModel[PARAMS.MODIFIED].value.operator : OPERATOR.EQUAL\"\n [withTime]=\"modifiedField.searchOption && modifiedField.searchOption !== OPERATOR.EQUAL\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIED, OPERATOR.EQUAL, $event, modifiedForm)\">\n </eo-datetime-range>\n </eo-form-input>\n </form>\n </div>\n\n <div class=\"rest-box box-modifier\">\n <h3 translate>eo.search.agg.modifier</h3>\n <form #modifierForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.agg.modifiedby' | translate\">\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.MODIFIER].value\"\n name=\"modifier\" (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.MODIFIER], $event)\"\n [situation]=\"'SEARCH'\"\n (ngModelChange)=\"setFilter(PARAMS.MODIFIER, OPERATOR.IN, $event, modifierForm)\"></eo-organization>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n\n <ng-template [yvcTab]=\"{id: 'restrictFile', label: 'eo.search.restrict.file' | translate}\">\n <div class=\"file rest-box-container\" *ngIf=\"queryState.aggregations\">\n\n <div class=\"rest-box box-mimetype-group\">\n <h3 translate>eo.search.restrict.mimetypegroup</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MIMETYPEGROUP]\"\n (click)=\"setFilter(PARAMS.MIMETYPEGROUP, OPERATOR.IN, resolveSelection(aggregationsModel[PARAMS.MIMETYPEGROUP], agg.key, agg.selected))\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"checkbox\">\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </div>\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filesize\">\n <h3 translate>eo.search.restrict.filesize</h3>\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.FILESIZE]\"\n (click)=\"toggleFilter(PARAMS.FILESIZE, OPERATOR.RANGE, agg.key, agg.selected)\"\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\n <div class=\"label\">{{agg.label}}</div>\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\n </div>\n </div>\n\n <div class=\"rest-box box-filename\">\n <h3 translate>eo.search.restrict.filename</h3>\n <form #filenameForm=\"ngForm\">\n <eo-form-input [label]=\"'eo.search.restrict.filename' | translate\">\n <eo-string [autocomplete]=\"true\" [qname]=\"'filename'\"\n [(ngModel)]=\"filtersModel[PARAMS.FILENAME].value\" name=\"filename\"\n (ngModelChange)=\"setFilter(PARAMS.FILENAME, OPERATOR.EQUAL, $event, filenameForm)\"></eo-string>\n </eo-form-input>\n </form>\n </div>\n </div>\n </ng-template>\n </yvc-tabs>\n\n <!-- summary of the current search filters -->\n <div class=\"summary-panel\">\n\n <div class=\"headline stored-query\" *ngIf=\"isStoredQuery; else reghead\">\n <div class=\"spaceInbetwen\">\n <div class=\"savedSearchIcon\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"></eo-icon>\n </div>\n <div class=\"store\">\n <div class=\"pre\" translate>eo.search.aside.summary.storedquery</div>\n <div class=\"stored-query-name\">{{storedQuery.name}}</div>\n </div>\n </div>\n </div>\n\n <ng-template #reghead>\n <div class=\"headline\" translate>eo.search.aside.summary</div>\n </ng-template>\n\n <section class=\"query-types\">\n <div class=\"section section-searchterm\" *ngIf=\"query.term\">\n <div class=\"title\" translate>eo.search.aside.summary.term</div>\n <div class=\"filter\">\n <div class=\"label\">{{query.term}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeTerm()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-contexttype\" *ngIf=\"query.contextFolderTypes.length\">\n <div class=\"title\" translate>eo.search.aside.summary.contextfoldertypes</div>\n <div class=\"filter\" *ngFor=\"let type of query.contextFolderTypes\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeContextType()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"section section-objecttype\" *ngIf=\"query.types.length\">\n <div class=\"title\" translate>eo.search.aside.summary.types</div>\n <div class=\"filter\" *ngFor=\"let type of query.types\">\n <div class=\"label\">{{type.label}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeType(type)\"></eo-icon>\n </div>\n </div>\n\n <ng-template #filterTemplate let-filter let-translate>\n <ng-container *ngIf=\"filter.innerValue.length\">\n <div class=\"filter\" *ngFor=\"let val of filter.innerValue; index as i\">\n <div class=\"label\">{{filter.label[i] | async}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"resetFilter(filter, val)\"></eo-icon>\n </div>\n </ng-container>\n </ng-template>\n\n <div class=\"section section-creation\"\n *ngIf=\"filtersModel[PARAMS.CREATED].innerValue?.length || filtersModel[PARAMS.CREATOR].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.creation</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATOR] }\"></ng-template>\n </div>\n\n <div class=\"section section-modification\"\n *ngIf=\"filtersModel[PARAMS.MODIFIED].innerValue?.length || filtersModel[PARAMS.MODIFIER].innerValue?.length\">\n <div class=\"title\" translate>eo.search.restrict.modification</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIED] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIER] }\"></ng-template>\n </div>\n\n <div class=\"section section-mimetypegroup\"\n *ngIf=\"filtersModel[PARAMS.MIMETYPEGROUP].innerValue.length || filtersModel[PARAMS.FILESIZE].innerValue.length || filtersModel[PARAMS.FILENAME].innerValue.length\">\n <div class=\"title\" translate>eo.search.restrict.file</div>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MIMETYPEGROUP] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILESIZE] }\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILENAME] }\"></ng-template>\n </div>\n </section>\n\n <div class=\"actions\" *ngIf=\"query.term || query.filters.length || query.types.length; else emptySearch\">\n\n <ng-container *ngIf=\"isStoredQuery; else regactions\">\n <button class=\"secondary btn-reset\" (click)=\"resetQuery()\" translate>eo.search.storedquery.close</button>\n <button class=\"primary grey btn-update\" (click)=\"updateStoredQuery()\"\n *ngIf=\"capabilities.storedqueries && isOwnQuery\" translate>eo.search.storedquery.update</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-container>\n\n <ng-template #regactions>\n <button class=\"primary grey btn-reset\" (click)=\"resetQuery()\" translate>eo.search.reset</button>\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\n translate>eo.search.submit</button>\n </ng-template>\n\n\n </div>\n\n <ng-template #emptySearch>\n <div class=\"empty-search\" translate>eo.search.summary.empty</div>\n </ng-template>\n\n </div>\n\n\n </div>\n\n <!-- expert mode body panel containing explanations -->\n <ng-template #expert>\n <div class=\"body expert\">\n\n <div class=\"empty\" *ngIf=\"expertModeQueryEmpty\"><span translate>eo.search.mode.expert.result.empty</span></div>\n\n <!--\n <h2><span translate>eo.search.mode.expert</span></h2>\n <div class=\"intro\" translate>eo.search.mode.expert.intro</div>\n\n <div class=\"base-params fields\">\n <h2 translate>eo.search.mode.expert.support.baseparams</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.baseParams\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"system-types fields\">\n\n <div class=\"column column-group\">\n <h2 translate>eo.search.mode.expert.support.group</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let group of typeGroupTree\"\n [ngClass]=\"{selected: expertModeSupport.selectedGroup && group.id === expertModeSupport.selectedGroup.id}\"\n (click)=\"xpSelectGroup(group)\">\n <div *ngIf=\"group.label !== '0'\">{{group.label}}</div>\n <div *ngIf=\"group.label === '0'\">{{'eo.search.group.general' | translate}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column column-type\" *ngIf=\"expertModeSupport.selectedGroup\">\n <h2 translate>eo.search.mode.expert.support.type</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let type of expertModeSupport.selectedGroup.tree\"\n [ngClass]=\"{selected: expertModeSupport.selectedType && type.id === expertModeSupport.selectedType.id}\"\n (click)=\"xpSelectType(type)\">\n <div>{{type.label}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"column section-field\" *ngIf=\"expertModeSupport.selectedType\">\n <h2 translate>eo.search.mode.expert.support.field</h2>\n <div class=\"items\">\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.selectedType.children\" (click)=\"xpAddToTerm(el.data)\">\n <div class=\"label\"><span>{{el.label}}</span><span class=\"type\">{{el.type}}</span></div>\n <div class=\"data\">{{el.data}}</div>\n </div>\n </div>\n </div>\n\n </div>\n\n -->\n </div>\n </ng-template>\n </div>\n <!-- </eo-dialog> -->\n</ng-template>\n", styles: ["eo-app-search dialog{height:100vh;margin:0!important;max-height:100vh;max-block-size:100%!important;min-width:500px;width:80%}@media screen and (max-width: 500px){.eo-app-search-dialog{width:100%!important;min-width:inherit}}.eo-app-search-dialog .eo-dialog-content{overflow:inherit;max-height:100%}.eo-app-search-dialog .eo-dialog-header{display:none}.eo-app-search.rtl .head .close{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body .indexdata-search h2 eo-icon{transform:rotate(180deg)}.eo-app-search{--search-min-width: 500px;--search-box-max-width: 600px;--search-summary-width: 350px;width:80vw;height:100vh;background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;min-width:var(--search-min-width)}.eo-app-search .head{background:var(--color-primary-2);flex:0 0 auto;color:var(--color-white);position:relative;display:flex;flex-flow:row nowrap;padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .head .search{flex:1 1 auto;justify-content:space-between;margin:0 calc(var(--app-pane-padding) / 2);z-index:2}.eo-app-search .head .search .title{font-size:var(--font-display);font-weight:var(--font-weight-light);min-height:1em;line-height:1em}@media screen and (max-width: 480px){.eo-app-search .head .search .title{font-size:var(--font-title)}}.eo-app-search .head .search .query-scope{margin:calc(var(--app-pane-padding) * 2) 0 0 0;min-width:var(--search-min-width);max-width:var(--search-box-max-width)}.eo-app-search .head .search .search-box{margin-bottom:var(--app-pane-padding);display:flex;flex-flow:row nowrap;align-items:stretch;background:var(--color-white);max-width:var(--search-box-max-width);box-shadow:0 2px 2px rgba(var(--color-black-rgb),.2)}@media screen and (max-width: 480px){.eo-app-search .head .search .search-box{margin-top:var(--app-pane-padding)}}.eo-app-search .head .search .search-box yvc-autocomplete{flex:1 1 auto;background:transparent;outline:0;border:0}.eo-app-search .head .search .search-box yvc-autocomplete span.ui-autocomplete{width:100%}.eo-app-search .head .search .search-box input{width:100%;border:0;box-sizing:border-box;padding:calc(var(--app-pane-padding) / 2);font-size:var(--font-title)}.eo-app-search .head .search .search-box input::-ms-clear{display:none}.eo-app-search .head .search .search-box button[type=submit]{background:var(--color-accent);color:var(--color-white);border:0;padding:0 var(--app-pane-padding);font-size:var(--font-subhead)}.eo-app-search .head .search .search-box button.expert-mode{padding:0 calc(var(--app-pane-padding) / 2);background:transparent;border:0;color:var(--text-color-hint);display:flex;align-items:center}.eo-app-search .head .search .search-box button.expert-mode:focus{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode__reset{opacity:0;width:0;padding:0;transition:all .2s ease-in-out}.eo-app-search .head .search .search-box button.expert-mode__reset.active{opacity:1;width:40px;padding:0 8px}.eo-app-search .head .search .search-box button.expert-mode span{display:none;padding:calc(var(--app-pane-padding) / 4);white-space:nowrap;animation:eoFadeIn var(--app-default-transition-duration)}.eo-app-search .head .search .search-box button.expert-mode:hover{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode:hover span{display:block}.eo-app-search .head .result{position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding) * 2.5);z-index:1;font-size:7em;line-height:1em;opacity:.1}@media screen and (max-width: 900px){.eo-app-search .head .result{font-size:3em;right:calc(var(--app-pane-padding) * 3);top:var(--app-pane-padding)}}.eo-app-search .head .search-aggregator__loader{z-index:11;position:absolute;right:13%;top:30%;-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s}@media screen and (max-width: 900px){.eo-app-search .head .search-aggregator__loader{top:5%}}.eo-app-search .head .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);z-index:2}.eo-app-search .body{background:rgba(var(--color-white-rgb),.2);flex:1 1 auto;position:relative}@media screen and (max-width: 1000px){.eo-app-search .body .summary-panel{bottom:0;right:0!important;left:0!important;top:auto!important;width:auto!important;display:flex;flex-flow:row nowrap}.eo-app-search .body .summary-panel .headline:not(.stored-query),.eo-app-search .body .summary-panel .section{display:none}.eo-app-search .body .summary-panel .headline.stored-query{margin-bottom:0;display:flex;align-items:center;padding:0 var(--app-pane-padding)}.eo-app-search .body .summary-panel .headline.stored-query .pre{display:none}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-subhead)!important}.eo-app-search .body .summary-panel .actions{flex:1 1 auto}.eo-app-search .body yvc-tabs>section[role=tabpanel]{padding-right:0!important;padding-left:0!important}}.eo-app-search .body>yvc-tabs{position:absolute;inset:0}.eo-app-search .body>yvc-tabs>header{--text-color-body: #fff;--text-color-hint: rgba(255,255,255,.7);background:var(--color-primary-2)}.eo-app-search .body>yvc-tabs>section[role=tabpanel]{padding:calc(var(--app-pane-padding) - var(--app-pane-padding) / 2) calc(var(--app-pane-padding) * 2 + var(--search-summary-width)) 0 calc(var(--app-pane-padding) - 2px)}.eo-app-search .body .summary-panel{background:rgba(var(--color-black-rgb),.06);width:var(--search-summary-width);position:absolute;top:calc(var(--app-pane-padding) + var(--eo-tab-nav-height));right:var(--app-pane-padding);box-sizing:border-box}.eo-app-search .body .summary-panel .query-types{overflow:auto;max-height:calc(100vh - 290px)}.eo-app-search .body .summary-panel .headline{line-height:1em;font-size:var(--font-subhead);font-weight:var(--font-weight-light);color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .summary-panel .headline .spaceInbetwen{display:flex;align-items:center}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon{display:block;padding:calc(var(--app-pane-padding) / 4) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .savedSearchIcon eo-icon{--eoSvgIcon-size: 44px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store{display:block;min-height:0;min-width:0;padding-left:12px}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .pre{padding:calc(var(--app-pane-padding) / 2) 0}.eo-app-search .body .summary-panel .headline .spaceInbetwen .store .stored-query-name{font-size:var(--font-title);padding:calc(var(--app-pane-padding) / 2) 0;line-height:1.2em}.eo-app-search .body .summary-panel .headline.stored-query{background:var(--color-primary-3);color:var(--color-white);font-size:var(--font-body)}.eo-app-search .body .summary-panel .empty-search{padding:var(--app-pane-padding) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .section{padding:calc(var(--app-pane-padding) / 2);max-height:calc(100vh - 280px);overflow-y:auto}.eo-app-search .body .summary-panel .section .title{border-bottom:1px solid rgba(var(--color-black-rgb),.1);padding-bottom:calc(var(--app-pane-padding) / 4);color:var(--text-color-caption)}.eo-app-search .body .summary-panel .filter{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;background:rgba(var(--color-white-rgb),.6);margin-top:4px;align-items:center}.eo-app-search .body .summary-panel .filter .label{display:inline-block;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;padding:0 0 0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .summary-panel .filter eo-icon{flex:0 0 auto;padding:calc(var(--app-pane-padding) / 4);box-sizing:border-box;cursor:pointer;color:var(--text-color-hint)}.eo-app-search .body .summary-panel .filter eo-icon:hover{color:var(--text-color-caption)}.eo-app-search .body .summary-panel .actions{display:flex;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2 - 2px)}.eo-app-search .body .summary-panel .actions button{margin:0 2px;line-height:1em;font-size:var(--font-hint)}.eo-app-search .body .ui-tabview .ui-tabview-panel{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search .body .ui-tabview .ui-tabview-panel h2{margin:0 0 calc(var(--app-pane-padding) * 1.5) 0;padding:0;font-weight:var(--font-weight-light);font-size:var(--font-title);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container{display:flex;flex-flow:row wrap;align-items:stretch}.eo-app-search .body .rest-box-container .rest-box{margin:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2);background:var(--color-white);flex:1 1 auto}.eo-app-search .body .rest-box-container .rest-box h3{margin:0 0 var(--app-pane-padding) 0;padding:0;font-size:var(--font-caption);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item{display:flex;flex:1 1 auto;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);color:var(--text-color-body)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected{background:var(--color-primary-3);color:var(--color-white)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover{background:var(--list-item-hover-background)}.eo-app-search .body .rest-box-container .rest-box .label{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .count{font-size:var(--font-caption);min-width:30px;text-align:right;font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .group-header .move-icons{display:none}.eo-app-search .body .object-types .group .type{display:flex;flex-flow:row nowrap;align-items:center;padding:1px 0}.eo-app-search .body .object-types .group .type.context{font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .type.folder .item eo-icon{background:rgba(var(--color-black-rgb),.15)}.eo-app-search .body .object-types .group .type.folder .item:hover eo-icon{background:rgba(var(--color-white-rgb),.3)}.eo-app-search .body .object-types .group .type.abstract .item{color:var(--text-color-caption)}.eo-app-search .body .object-types .group .type.abstract .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .group .type .item{display:flex;flex:1 1 auto;border-radius:2px;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 2);margin:0 calc(var(--app-pane-padding) / 4);cursor:default;color:var(--text-color-body)}.eo-app-search .body .object-types .group .type .item eo-icon{color:var(--text-color-caption);width:16px;height:16px;box-sizing:content-box;padding:2px;border-radius:2px;transition:none;-webkit-transition:none;-moz-transition:none;-o-transition:none}.eo-app-search .body .object-types .group:hover .group-header{display:flex;justify-content:space-between}.eo-app-search .body .object-types .group:hover .group-header .move-icons{display:flex}.eo-app-search .body .object-types .group:hover .group-header .move-left-icon,.eo-app-search .body .object-types .group:hover .group-header .move-right-icon{cursor:pointer;color:var(--text-color-caption)}.eo-app-search .body .object-types .type .item{cursor:pointer}.eo-app-search .body .object-types .type .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .type .item:hover eo-icon{color:var(--panel-background)}.eo-app-search .body .indexdata-search{padding:calc(var(--app-pane-padding) / 2) 0 0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2{display:flex;flex-flow:row;align-items:center}.eo-app-search .body .indexdata-search h2 eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .indexdata-search h2 span{padding:0 calc(var(--app-pane-padding) / 4)}.eo-app-search .body .indexdata-search .context{margin-bottom:var(--app-pane-padding)}.eo-app-search .body .indexdata-search .context .context-select{display:flex;align-items:center;flex-flow:row wrap;padding-bottom:1px}.eo-app-search .body .indexdata-search .context .context-select .spacer{width:var(--app-pane-padding)}.eo-app-search .body .indexdata-search eo-object-form{border:1px solid rgba(var(--color-black-rgb),.1)}.eo-app-search .body .indexdata-search eo-object-form.dark{display:block;background-color:var(--color-primary-2)}.eo-app-search.rtl{left:0;right:0;animation:appSearchAppearRTL var(--app-default-transition-duration)}.eo-app-search.rtl .head .result,.eo-app-search.rtl .body .summary-panel{right:auto;left:var(--app-pane-padding)}.eo-app-search.rtl .body yvc-tabs{padding-right:0;padding-left:calc(var(--app-pane-padding) * 2 + var(--search-summary-width));padding-bottom:0;padding-top:0}.eo-app-search.expert .head .result{display:none}.eo-app-search.expert .head .search .search-box{max-width:100%}.eo-app-search.expert .head .search .search-box button.expert-mode{color:var(--color-accent)}.eo-app-search.expert .body{background:var(--color-primary-2);color:var(--color-white);display:flex;flex-flow:column}.eo-app-search.expert .body h2{flex:0 0 auto;padding:0;margin:var(--app-pane-padding) 0;font-size:var(--font-title);font-weight:var(--font-weight-light)}.eo-app-search.expert .body h2 span{padding:calc(var(--app-pane-padding) / 2) 0 calc(var(--app-pane-padding) / 2) var(--app-pane-padding);border-bottom:4px solid var(--color-accent)}.eo-app-search.expert .body .intro{flex:0 0 auto;padding:var(--app-pane-padding)}.eo-app-search.expert .body .empty{flex:0 0 auto;padding:0 var(--app-pane-padding)}.eo-app-search.expert .body .empty span{padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);border-radius:2px;background:var(--color-error);color:var(--color-white)}.eo-app-search.expert .body .fields h2{margin:calc(var(--app-pane-padding) / 2);flex:0 0 auto;padding:calc(var(--app-pane-padding) / 2);border-bottom:1px solid rgba(var(--color-white-rgb),.3)}.eo-app-search.expert .body .fields .item{padding:calc(var(--app-pane-padding) / 2);cursor:pointer;border-radius:2px;background:rgba(var(--color-white-rgb),.06);margin-bottom:4px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.eo-app-search.expert .body .fields .item:hover,.eo-app-search.expert .body .fields .item.selected{background:rgba(var(--color-white-rgb),.2)}.eo-app-search.expert .body .fields .item .label{font-weight:var(--font-weight-bold);display:flex;justify-content:space-between}.eo-app-search.expert .body .fields .item .label .type{font-size:var(--font-hint);opacity:.5}.eo-app-search.expert .body .fields .item .data{opacity:.75}.eo-app-search.expert .body .base-params{padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .base-params .items{display:flex;flex-flow:row wrap;padding:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .base-params .items .item{margin:calc(var(--app-pane-padding) / 4)}.eo-app-search.expert .body .system-types{flex:1 1 auto;display:flex;flex-flow:row;justify-content:flex-start;align-items:stretch;padding:calc(var(--app-pane-padding) / 2)}.eo-app-search.expert .body .system-types .column{flex:0 0 33%;box-sizing:border-box;display:flex;flex-flow:column}.eo-app-search.expert .body .system-types .column .items{padding:calc(var(--app-pane-padding) / 2);flex:1 1 auto;overflow-y:auto}.eo-app-search.expert .body .system-types .column .items::-webkit-scrollbar-thumb{background-color:rgba(var(--color-white-rgb),.1)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox,.eo-app-search .body .rest-box-container .rest-box .type .checkbox{width:20px;height:20px;cursor:pointer;border:1px solid var(--text-color-hint);border-radius:2px;margin:0 calc(var(--app-pane-padding) / 2)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type .checkbox svg{opacity:0}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover{border-color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover svg,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover svg{fill:var(--text-color-body);opacity:.3}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox{background:var(--color-primary-3);border-color:var(--color-primary-3)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox svg{fill:var(--color-white)!important;opacity:1}.eo-app-search .body .rest-box-container .rest-box .rest-item.saved .count,.eo-app-search .body .rest-box-container .rest-box .type.saved .count{font-weight:var(--font-weight-normal)}@keyframes appSearchAppear{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}@keyframes appSearchAppearRTL{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}\n"] }]
775
+ }], ctorParameters: () => [{ type: i1.AppSearchService }, { type: i2.YvcOverlayService }, { type: i3.SearchService }, { type: i3.SystemService }, { type: i3.NotificationsService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i3.StoredQueriesService }, { type: i3.CapabilitiesService }, { type: i3.UserService }, { type: i3.Logger }, { type: i3.LocalStorageService }], propDecorators: { tplSearch: [{
776
+ type: ViewChild,
777
+ args: ['tplSearch', { read: TemplateRef }]
778
+ }], searchInput: [{
779
+ type: ViewChild,
780
+ args: ['searchInput']
781
+ }], expertInput: [{
782
+ type: ViewChild,
783
+ args: ['xpinput']
784
+ }], indexdataForm: [{
785
+ type: ViewChild,
786
+ args: ['idxform']
787
+ }], contextForm: [{
788
+ type: ViewChild,
789
+ args: ['ctxform']
790
+ }], onExecuteSearch: [{
791
+ type: Output
792
+ }] } });
793
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLElBQUksa0JBQWtCLEVBQUUsSUFBSSxJQUFJLGNBQWMsRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN2SCxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUdaLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFFcEYsT0FBTyxFQVFMLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUlYLFdBQVcsRUFJWCxLQUFLLEVBQ04sTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFDLFdBQVcsRUFBWSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzlELE1BQU0sT0FBTyxrQkFBa0I7SUF3RDdCLElBQUksUUFBUSxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0QsQ0FBQztJ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c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRixXQUFXO3NCQUFoQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsYUFBYTtzQkFBbEMsU0FBUzt1QkFBQyxTQUFTO2dCQUNFLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkE4Q2IsZUFBZTtzQkFEckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLCBmcm9tIGFzIG9ic2VydmFibGVGcm9tLCBvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3BsdWNrLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRm9ybVN0YXR1c0NoYW5nZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9pbmRleCc7XG5pbXBvcnQge05nRm9ybX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtMb2NhbGVEYXRlUGlwZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGlwZXMvbG9jYWxlLWRhdGUucGlwZSc7XG5pbXBvcnQge0FwcFNlYXJjaFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3NlYXJjaC9hcHAtc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2FwYWJpbGl0aWVzLFxuICBDYXBhYmlsaXRpZXNTZXJ2aWNlLFxuICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICBMb2dnZXIsXG4gIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICBPYmplY3RUeXBlLFxuICBRdWVyeVNjb3BlLFxuICBSYW5nZVZhbHVlLFxuICBTZWFyY2hGaWx0ZXIsXG4gIFNlYXJjaFF1ZXJ5LFxuICBTZWFyY2hTZXJ2aWNlLFxuICBTZWFyY2hTdGF0ZSxcbiAgU3RvcmVkUXVlcmllc1NlcnZpY2UsXG4gIFN0b3JlZFF1ZXJ5LFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVc2VyU2VydmljZSxcbiAgVXRpbHNcbn0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7QXV0b0NvbXBsZXRlfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7Q29udGV4dFR5cGUsIElkeFNlYXJjaH0gZnJvbSAnLi9hcHAtc2VhcmNoLmludGVyZmFjZSc7XG5pbXBvcnQgeyBZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYXBwLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG4gIC8vIHRvZG86IGFwcGx5IG9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uIChhZ2cgc2VhcmNoIHJlc3VsdCByaWdodCBub3cgZG9lc24ndCB1cGRhdGUpXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFwcFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgUEFSQU1TID0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVM7XG4gIE9QRVJBVE9SID0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SO1xuICBxdWVyeVNjb3BlOiBRdWVyeVNjb3BlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RwbFNlYXJjaCcsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pIHRwbFNlYXJjaDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogQXV0b0NvbXBsZXRlO1xuICBAVmlld0NoaWxkKCd4cGlucHV0JykgZXhwZXJ0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lkeGZvcm0nKSBpbmRleGRhdGFGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjdHhmb3JtJykgY29udGV4dEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG4gIHByaXZhdGUgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHF1ZXJ5OiBTZWFyY2hRdWVyeTtcbiAgcXVlcnlTdGF0ZTogU2VhcmNoU3RhdGU7XG4gIGNhcGFiaWxpdGllczogQ2FwYWJpbGl0aWVzO1xuICBhY3RpdmVUYWJJZD86IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBpc1N0b3JlZFF1ZXJ5OiBib29sZWFuO1xuICBpc093blF1ZXJ5ID0gZmFsc2U7XG4gIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgdHlwZUdyb3VwVHJlZSA9IFtdO1xuICBhdXRvY29tcGxldGVSZXN1bHRzOiBzdHJpbmdbXTtcblxuICBpZHhTZWFyY2g6IElkeFNlYXJjaDtcbiAgY3VycmVudENvbnRleHRGb2xkZXJOYW1lO1xuXG4gIGV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIGV4cGVydE1vZGVTdXBwb3J0ID0ge1xuICAgIGJhc2VQYXJhbXM6IFtdLFxuICAgIHNlbGVjdGVkR3JvdXA6IG51bGwsXG4gICAgc2VsZWN0ZWRUeXBlOiBudWxsXG4gIH07XG5cbiAgZmlsdGVyc01vZGVsID0ge307XG4gIGFnZ3JlZ2F0aW9uc01vZGVsID0ge307XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgc3lzUm9vdENvbnRleHQgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgbmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCxcbiAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWRkLnRpdGxlLmxvY2F0aW9uLmNvbW1vbicpLFxuICAgIHNpdHVhdGlvbjogJ1NFQVJDSCcsXG4gICAgbW9kZTogJ0NPTlRFWFQnLFxuICAgIGNvbnRleHRGb3JtT3B0aW9uczoge1xuICAgICAgZm9ybU1vZGVsOiB7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdGVkOiBudW1iZXIgPSBudWxsO1xuXG4gIG9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5ID0gJ2VvLmFwcC5zZWFyY2gub2JqZWN0LnR5cGUuZ3JvdXAuc29ydGVkTGlzdCc7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4ZWN1dGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNldCBzZWxlY3RlZChpbmRleCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIGdldCBzdG9yZWRRdWVyeSgpOiBTdG9yZWRRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkgYXMgU3RvcmVkUXVlcnk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFNlYXJjaFNlcnZpY2U6IEFwcFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBZdmNPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JlZFF1ZXJpZXNTZXJ2aWNlOiBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdHlTZXJ2aWNlOiBDYXBhYmlsaXRpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZVxuICApIHtcblxuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcblxuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtcyA9IE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5tYXAoayA9PiB7XG4gICAgICBsZXQgZGF0YSA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmdsb2JhbC5iYXNlcGFyYW0uJyArIGRhdGEpLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURdID0gT2JqZWN0LmtleXMoXG4gICAgICBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS4nICsgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTW2tdXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRV0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLmZpbGVzaXplLicgKyBTZWFyY2hRdWVyeS5GSUxFX1NJWkVfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgb25UYWJDaGFuZ2UodGFiSWQ6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDtcbiAgICBpZiAodGFiSWQgPT09ICdyZXN0cmljdFR5cGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RDcmVhdGVkJykge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7fSxcbiAgICAgICAgY3JlYXRlZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdE1vZGlmaWNhdGlvbicpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1vZGlmaWVkOiB7fVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0RmlsZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1pbWV0eXBlZ3JvdXA6IHt9LFxuICAgICAgICBmaWxlc2l6ZToge31cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeShxdWVyeTogU2VhcmNoUXVlcnkpIHtcbiAgICAvLyBJTVBPUlRBTlQ6IG5ldmVyIGNoYW5nZSB0aGUgbG9jYWwgcXVlcnkgZGlyZWN0bHlcbiAgICAvLyB1c2Ugc2VhcmNoU2VydmljZSwgc28gZXZlcnkgY29tcG9uZW50cyBzdWJzY3JpYmVkIHRvIHRoZSBxdWVyeVxuICAgIC8vIHdpbGwgZ2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcbiAgICAgID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0ubmFtZVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuaXNTdG9yZWRRdWVyeSA9IHF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnk7XG5cbiAgICBpZiAodGhpcy5pc1N0b3JlZFF1ZXJ5KSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy5pc093blF1ZXJ5ID1cbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS51c2VyLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5mb3JFYWNoKGsgPT4gdGhpcy5wcm9jZXNzRmlsdGVycyhrKSk7XG4gICAgLy8gaWYgd2UgaGF2ZSBhbiBpbmRleGRhdGEgc2VhcmNoIHVzaW5nIGEgY29udGV4dCBidXQgdGhlIGNvbnRleHQgd2FzIHJlbW92ZWRcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoICYmXG4gICAgICB0aGlzLmlkeFNlYXJjaCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXG4gICAgKSB7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgPSBudWxsO1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gc2V0dXAgYW4gaW5kZXhkYXRhIHNlYXJjaFxuICAgIGNvbnN0IHVwZGF0ZUNhdXNlZEJ5VHlwZVRvZ2dsZSA9IHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9PT0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRPR0dMRURfVFlQRTtcbiAgICBpZiAodGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiYgIXVwZGF0ZUNhdXNlZEJ5VHlwZVRvZ2dsZSkge1xuICAgICAgLy8gaGF2aW5nIGp1c3Qgb25lIHRhcmdldCB0eXBlIGFuZCBhIGNvbnRleHQgdHlwZSBzZXR1cCBtZWFucywgdGhhdCB3ZSBhcmUgdXNpbmcgaW5kZXhkYXRhIHNlYXJjaFxuICAgICAgdGhpcy5pbmRleGRhdGFTZWFyY2goXG4gICAgICAgIHRoaXMucXVlcnkudHlwZXNbMF0sXG4gICAgICAgIHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlc1swXSA6IG51bGxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnModGhpcy5xdWVyeSkubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gaGF2aW5nIGp1c3Qgb25lIHRhcmdldCB0eXBlIGFuZCBpbmRleGRhdGEgZmlsdGVycyBhbHNvIG1lYW5zLCB0aGF0IHdlIGFyZSB1c2luZyBpbmRleGRhdGEgc2VhcmNoXG4gICAgICB0aGlzLmluZGV4ZGF0YVNlYXJjaCh0aGlzLnF1ZXJ5LnR5cGVzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gcmVzZXQgaW5kZXhkYXRhIHNlYXJjaCBvdGhlcndpc2UsIGJlY2F1c2UgdGhlIGN1cnJlbnQgcXVlcnkgbWF5IGJlIHJlc2V0IGZyb20gb3V0IHNpZGUgKGUuZy4gYnkgYSBzdG9yZWQgcXVlcnkpXG4gICAgICB0aGlzLmlkeFNlYXJjaCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIHRoaXMudHlwZUdyb3VwVHJlZSA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5idWlsZFR5cGVHcm91cFRyZWUoKTtcbiAgICB9XG4gICAgdGhpcy5xdWVyeVNjb3BlID0gcXVlcnkuc2NvcGU7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0T2JqZWN0VHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgLyoqIHNldCB1cCB0aGUgcmlnaHQgdHlwZSBmaWx0ZXIgaWYgbm90IGFscmVhZHkgZG9uZSAqL1xuICAgIGNvbnN0IHF1ZXJ5VHlwZXNMZW5ndGggPVxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxIHx8IHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IHF1ZXJ5VHlwZXNMZW5ndGhBbmROYW1lID1cbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmIHRoaXMucXVlcnkudHlwZXNbMF0ubmFtZSAhPT0gdHlwZS5uYW1lO1xuICAgIGlmIChxdWVyeVR5cGVzTGVuZ3RoIHx8IHF1ZXJ5VHlwZXNMZW5ndGhBbmROYW1lKSB7XG4gICAgICAvLyBzZXR0aW5nIG9iamVjdCB0eXBlcyB3aWxsIGVtaXQgYSBuZXcgcXVlcnkuIFRoaXMgd2lsbCB0aGVuIHRha2UgY2FyZSBvZlxuICAgICAgLy8gc2V0dGluZyB1cCB0aGUgaW5kZXhkYXRhIGZvcm1cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRRdWVyeVR5cGVzKFt0eXBlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgaW5kZXhkYXRhIHNlYXJjaCBmb3IgYSBnaXZlbiBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gdHlwZSAtIGFuIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSBjb250ZXh0Rm9sZGVyVHlwZSAtIGNvbnRleHQgZm9sZGVyIHR5cGVcbiAgICovXG4gIHB1YmxpYyBpbmRleGRhdGFTZWFyY2godHlwZTogT2JqZWN0VHlwZSwgY29udGV4dEZvbGRlclR5cGU/OiBPYmplY3RUeXBlKSB7XG4gICAgaWYgKCF0eXBlIHx8IHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5xdWVyeS50eXBlc1swXS5uYW1lID09PSB0eXBlLm5hbWUpIHtcbiAgICAgIC8qKiBldmVuIGlmIHdlIHNlbGVjdCBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkLCB3ZSBuZWVkIHRvIGNhbGwgYWdncmVnYXRlIGFzIHRoZXJlIG1heSBiZSBjb250ZXh0IHR5cGVzIGludm9sdmVkICovXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICBzdWI6IHtcbiAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNSb290VHlwZSA9ICEhdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdC5maW5kKHJUID0+IHJULnFuYW1lID09PSB0eXBlLnFuYW1lKTtcblxuICAgIHRoaXMuaWR4U2VhcmNoID0ge1xuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRGb2xkZXJUeXBlLFxuICAgICAgY29udGV4dE1vZGVsczogaXNSb290VHlwZSA/IFt0aGlzLnN5c1Jvb3RDb250ZXh0XSA6IFtdLFxuICAgICAgZm9ybU9wdGlvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgLyoqIGZldGNoIGNvbnRleHQgdHlwZSBtb2RlbHMgKi9cbiAgICBpZiAodHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdG9GZXRjaCA9IFtdO1xuICAgICAgdHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmZvckVhY2goY29udGV4dFR5cGUgPT4ge1xuICAgICAgICBjb25zdCBvYmpUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dFR5cGUubmFtZSk7XG4gICAgICAgIGlmIChvYmpUeXBlKSB7XG4gICAgICAgICAgdG9GZXRjaC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGVGb3JtKFxuICAgICAgICAgICAgICBjb250ZXh0VHlwZS5uYW1lLFxuICAgICAgICAgICAgICAnU0VBUkNIJyxcbiAgICAgICAgICAgICAgJ0NPTlRFWFQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodG9GZXRjaC5sZW5ndGgpIHtcbiAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRvRmV0Y2gpLnN1YnNjcmliZShmb3JtTW9kZWxzID0+IHtcbiAgICAgICAgICAvKiogYWJzdHJhY3QgY29udGV4dCB0eXBlcyBzaG91bGQgbm90IGJlIHVzZWQgKi9cbiAgICAgICAgICB0aGlzLmFkZENvbnRleHRNb2RlbChmb3JtTW9kZWxzKTtcbiAgICAgICAgICAvKiogaWYgdGhlcmUgd2FzIGEgY29udGV4dCB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBxdWVyeSwgd2UnbGwgc2V0dXAgdGhlIHJpZ2h0IG1vZGVsIGFzIHdlbGwgKi9cbiAgICAgICAgICBpZiAoY29udGV4dEZvbGRlclR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5maW5kKFxuICAgICAgICAgICAgICBtID0+IG0ubmFtZSA9PT0gY29udGV4dEZvbGRlclR5cGUubmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29udGV4dChtb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRGb2xkZXJUeXBlLm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb250ZXh0KHRoaXMuc3lzUm9vdENvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLyoqIHRoZSBwcm92aWRlZCBjb250ZXh0IHR5cGUgZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHNvIGp1c3QgcmVtb3ZlIGl0ICovXG4gICAgICAgICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtRGF0YTtcbiAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gc2V0IHVwIGZvcm0gZGF0YSBmcm9tIGluZGV4ZGF0YSBxdWVyeSBmaWx0ZXJzXG4gICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHR5cGUubmFtZSk7XG4gICAgaWYgKG9iamVjdFR5cGUpIHtcbiAgICAgIHRoaXMuc3lzdGVtU2VydmljZVxuICAgICAgICAuZ2V0T2JqZWN0VHlwZUZvcm0odHlwZS5uYW1lLCAnU0VBUkNIJylcbiAgICAgICAgLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmb3JtTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgZGF0YTogZm9ybURhdGFcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5xdWVyeVN0YXRlID0gcXVlcnlTdGF0ZTtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB7fTtcbiAgICAgIGlmIChxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZS5zaXplKSB7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB0aGlzLmJ1aWxkQ29udGV4dEFnZ3JlZ2F0aW9ucyhxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2F2ZSBhZ2dyZWdhdGlvbnMgdmFsdWVzXG4gICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdIHx8ICF0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCB8fCBxdWVyeVN0YXRlLmxhc3RDaGFuZ2UgIT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0gPSBuZXcgTWFwKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVELCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRVNJWkUsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gIH1cblxuICBidWlsZENvbnRleHRBZ2dyZWdhdGlvbnMoY29udGV4dFR5cGUpIHtcbiAgICBsZXQgY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHt9O1xuICAgIGNvbnRleHRUeXBlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGNvbnRleHRBZ2dyZWdhdGlvbnNba2V5XSA9IHZhbHVlKTtcbiAgICByZXR1cm4gY29udGV4dEFnZ3JlZ2F0aW9ucztcbiAgfVxuXG4gIHByb2Nlc3NGaWx0ZXJzKGs6IHN0cmluZykge1xuICAgIGxldCBmOiBTZWFyY2hGaWx0ZXIgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba10pO1xuICAgIGlmICghZikge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba11dID0ge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgbXVsdGlWYWx1ZTogW10sXG4gICAgICAgIGlubmVyVmFsdWU6IFtdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gfHxcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciAhPT0gZlxuICAgICkge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciA9IGY7XG4gICAgICBsZXQgdmFsdWU6IGFueSA9XG4gICAgICAgIHR5cGVvZiBmLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZi5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGYuZmlyc3RWYWx1ZSlcbiAgICAgICAgICA6IHR5cGVvZiBmLmZpcnN0VmFsdWUgIT09ICdib29sZWFuJyA/IFtmLmZpcnN0VmFsdWVdIDogZi5maXJzdFZhbHVlO1xuICAgICAgaWYgKGYub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSkge1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5tdWx0aVZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEIHx8XG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBuZXcgUmFuZ2VWYWx1ZShmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLm11bHRpVmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZSA9XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbCA9IFtdO1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZS5mb3JFYWNoKCh2OiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRPUiB8fFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVSXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsW2ldID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbFtpXSA9IG9ic2VydmFibGVPZihcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmlsdGVyKGYsIHYpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3luY0FnZ3JlZ2F0aW9ucyhuYW1lLCBvcGVyYXRvcikge1xuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbbmFtZV0uZm9yRWFjaChhZ2cgPT4ge1xuICAgICAgbGV0IGEgPSB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zW25hbWVdLmZpbmQoYWEgPT4gYWEua2V5ID09PSBhZ2cua2V5KTtcbiAgICAgIGlmIChhICYmIGEudmFsdWUgIT09IGFnZy52YWx1ZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSBhLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICghYSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSAhPT0gbmFtZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIGFnZy5zZWxlY3RlZCA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUobmFtZSwgb3BlcmF0b3IsIGFnZy5rZXkpO1xuICAgICAgYWdnLnNhdmVkID0gIWEgJiYgdGhpcy5xdWVyeVN0YXRlLmxhc3RDaGFuZ2UgPT09IG5hbWU7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldKSB7XG4gICAgICBsZXQgYWdnID0gdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldLmZpbmQoYSA9PiBhLmtleSA9PT0gdmFsdWUpO1xuICAgICAgcmV0dXJuIGFnZy5sYWJlbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY3JlYXRlRGF0ZVJlc3RyaWN0aW9uKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFOlxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgZW8uc2VhcmNoLmFnZy50aW1lLiR7ZmlsdGVyLmZpcnN0VmFsdWV9YCk7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTDpcbiAgICAgICAgcmV0dXJuIGA9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEg6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX0gLSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5zZWNvbmRWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuR1JFQVRFUl9PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnNpbmNlJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkxFU1NfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi51bnRpbCcpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCgke2ZpbHRlci5vcGVyYXRvcn0pICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlTGFiZWwobW9kZWw6IGFueSwgdmFsdWU6IGFueVtdKSB7XG4gICAgbW9kZWwubGFiZWwuZm9yRWFjaCgobCwgaSkgPT4gbC5uZXh0KHZhbHVlW2ldLnRpdGxlKSk7XG4gIH1cblxuICByZXNvbHZlU2VsZWN0aW9uKGFnZ3M6IGFueVtdLCBrZXk6IHN0cmluZywgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYWdnc1xuICAgICAgLmZpbHRlcihhID0+IHNlbGVjdGVkID8gYS5rZXkgIT09IGtleSAmJiBhLnNlbGVjdGVkIDogYS5rZXkgPT09IGtleSB8fCBhLnNlbGVjdGVkKVxuICAgICAgLm1hcChhID0+IGEua2V5KTtcbiAgfVxuXG4gIHJlc2V0RXhwZXJ0TW9kZUlucHV0KCkge1xuICAgIHRoaXMucXVlcnkudGVybSA9ICcnO1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFeHBlcnRNb2RlKCkge1xuICAgIGlmICh0aGlzLnR5cGVHcm91cFRyZWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVFeHBlcnRNb2RlKCk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jaGFuZ2VTZWFyY2hJbnB1dEZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UXVlcnlTY29wZShzY29wZTogUXVlcnlTY29wZSkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRRdWVyeVNjb3BlKHNjb3BlKTtcbiAgfVxuXG4gIHB1YmxpYyB4cFNlbGVjdEdyb3VwKGdyb3VwKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIHhwU2VsZWN0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIHhwQWRkVG9UZXJtKHN0cikge1xuICAgIGxldCB0ZXJtO1xuICAgIGlmICghdGhpcy5xdWVyeS50ZXJtKSB7XG4gICAgICB0ZXJtID0gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtID0gdGhpcy5xdWVyeS50ZXJtICsgJyAnICsgc3RyO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSB0ZXJtICsgJzonO1xuICAgIHRoaXMuZXhwZXJ0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVR5cGUoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvLyBkbyBub3QgZGlyZWN0bHkgdG9nZ2xlIF90eXBlIG9uIHRoZSBxdWVyeSwgaW5zdGVhZCB1c2UgdGhlXG4gICAgLy8gc2VhcmNoU2VydmljZSB0byB1cGRhdGUgdGhlIHF1ZXJ5IHN0b3JlXG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5VHlwZShfdHlwZSk7XG4gIH1cblxuICBwdWJsaWMgaXNUeXBlQWN0aXZlKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVyeS50eXBlcy5maW5kKHQgPT4gdC5pZCA9PT0gX3R5cGUuaWQpO1xuICB9XG5cbiAgcHVibGljIGlzVHlwZVNhdmVkKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuICghdGhpcy5xdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlLmdldChfdHlwZS5uYW1lKSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGlvbkNvdW50KF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuICgodGhpcy5pc1R5cGVTYXZlZChfdHlwZSkgPyB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdLmdldChfdHlwZS5uYW1lKSA6IHRoaXMucXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMudHlwZS5nZXQoX3R5cGUubmFtZSkpIHx8ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBrZXkub3BlcmF0b3IsIGtleS5maXJzdFZhbHVlLCBrZXkuc2Vjb25kVmFsdWUsIHt0aW1lOiBrZXkub3BlcmF0b3IgIT09IHRoaXMuT1BFUkFUT1IuRVFVQUwsIHRpbWV6b25lOiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIGZvcm0/OiBOZ0Zvcm0pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBsZXQgZW1wdHkgPSB0aGlzLmlzRW1wdHkoZmlsdGVyKTtcbiAgICBsZXQgYWN0aXZlRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgbGV0IGR1cGxpY2F0ZSA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG5cbiAgICBpZiAoZW1wdHkgJiYgYWN0aXZlRmlsdGVyICYmIGFjdGl2ZUZpbHRlci5vcGVyYXRvciAhPT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKCFlbXB0eSAmJiAhZHVwbGljYXRlKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IHRoaXMuUEFSQU1TLkZJTEVTSVpFKSB7XG4gICAgICBsZXQgZm9sZGVyRmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcignZm9sZGVyJywgJ2VxJywgZmFsc2UpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5RmlsdGVycyhbZmlsdGVyLCBmb2xkZXJGaWx0ZXJdLCAhc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXIoZmlsdGVyLCAhc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZWFyY2hGaWx0ZXIpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5maXJzdFZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzRW1wdHkodmFsdWUuc2Vjb25kVmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSkge1xuICAgIGxldCBmID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5tYXRjaChmLnByb3BlcnR5LCBmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlcihtb2RlbDogYW55LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG1vZGVsLmlubmVyVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbC5pbm5lclZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKG1vZGVsLmZpbHRlci5wcm9wZXJ0eSwgbW9kZWwuZmlsdGVyLm9wZXJhdG9yLCBtb2RlbC5pbm5lclZhbHVlLmZpbHRlcihmID0+IGYgIT09IHZhbHVlKSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKG1vZGVsLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGF1dG9jb21wbGV0ZVN1Z2dlc3QoZXZ0Pykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGV0IHYgPSBbXTtcbiAgICAgIC8vIGFsc28gdHJpZ2dlciBhZ2dyZWdhdGlvbnMgc2VhcmNoXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdCgpO1xuICAgICAgaWYgKGV2dCkge1xuICAgICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAuYXV0b2NvbXBsZXRlKGV2dClcbiAgICAgICAgICAucGlwZShzd2l0Y2hNYXAocmVzID0+IG9ic2VydmFibGVGcm9tKHJlcykucGlwZShwbHVjaygndmFsdWUnKSkpKVxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHYucHVzaChyZXMpLCAoKSA9PiB7IH0sICgpID0+ICh0aGlzLmF1dG9jb21wbGV0ZVJlc3VsdHMgPSB2KVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBleHBlcnRUZXJtQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlU2VsZWN0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIGF1dG9jb21wbGV0ZVBhc3RlKGUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucXVlcnkudGVybSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjdXRlU2VhcmNoKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5xdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICAvLyBpbiBleHBlcnQgc2VhcmNoIG1vZGUgd2UgcHJlLWZldGNoIHJlc3VsdHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0dWFsIHNlYXJjaFxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldFNlYXJjaFN0YXRlKHthZ2dzOiB7dHlwZToge319LCAuLi50aGlzLnF1ZXJ5LmdldFF1ZXJ5SnNvbigpfSkuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgICAvLyBvbmx5IGV4ZWN1dGUgdGhlIGFjdHVhbCBxdWVyeSB3aGVuIHdlJ3ZlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICBpZiAoIXF1ZXJ5U3RhdGUuaXNFbXB0eSkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LCBVdGlscy50aHJvdygoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBmZXRjaGluZyBzZWFyY2ggcmVzdWx0Jyk7XG4gICAgICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSB0cnVlO1xuICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4ZWN1dGUgdGhlIGFjdHVhbCBzZWFyY2ggYnkgcm91dGluZyB0byB0aGUgcmVzdWx0IHN0YXRlIHdoaWNoIHRoZW4gd2lsbCBleGVjdXRlIHRoZVxuICAvLyBxdWVyeSBhbmQgZGlzcGxheSB0aGUgcmVzdWx0c1xuICBwcml2YXRlIHRyaWdnZXJTZWFyY2goKSB7XG4gICAgdGhpcy5xdWVyeS5yZXNvbHZlUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICBjb25zdCB1cmlQYXJhbSA9IGVuY29kZVVSSUNvbXBvbmVudChVdGlscy5mb3JtRGF0YVN0cmluZ2lmeSh0aGlzLnF1ZXJ5LmdldFF1ZXJ5SnNvbigpKSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHVyaVBhcmFtUXVlcnk6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXM6IHtxdWVyeTogdXJpUGFyYW19fTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Jlc3VsdCddLCB1cmlQYXJhbVF1ZXJ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUZXJtKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRUZXJtKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlUeXBlKHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb250ZXh0VHlwZSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gaW5kZXNkYXRhIHNlYXJjaCBtb2RlLCByZW1vdmluZyBhIGZpbHRlciB0aGF0IGlzIG5vIGJhc2VwYXJhbSBmaWx0ZXJcbiAgICAvLyByZXF1aXJlcyB0aGUgZnJvbSBtb2RlbCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoICYmICF0aGlzLmFwcFNlYXJjaFNlcnZpY2UuaXNCYXNlUGFyYW1GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgLy8gdG9kbzogdXBkYXRlIGZvcm0gbW9kZWwvZGF0YVxuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBzZXQgdXAgZm9ybSBkYXRhIGZyb20gaW5kZXhkYXRhIHF1ZXJ5IGZpbHRlcnNcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5zZXRGb3JtRGF0YShpZHhGaWx0ZXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIG5vIGZpbHRlcnMgYXJlIHByZXNlbnQgcmVzZXQgdGhlIGZvcm1cbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmluZGV4ZGF0YUZvcm0ucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQ29udGV4dE1vZGVsKGZvcm1Nb2RlbHMpOiB2b2lkIHtcbiAgICBsZXQgbW9kZWxzID0gWy4uLmZvcm1Nb2RlbHNdO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMucHVzaCguLi5tb2RlbHMpO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgfVxuXG4gIHB1YmxpYyBleGl0SW5kZXhkYXRhU2VhcmNoKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICB9XG5cbiAgc2V0Q29udGV4dChjb250ZXh0Rm9sZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lICYmIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjb250ZXh0Rm9sZGVyTmFtZSkge1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBjb250ZXh0Rm9sZGVyTmFtZTtcbiAgICAgIGNvbnN0IGNvbnRleHRUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dEZvbGRlck5hbWUpO1xuICAgICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZSh7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCwgbGFiZWw6IENvbnRleHRUeXBlLnN5c3Jvb3R9IGFzIE9iamVjdFR5cGUpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZSkge1xuICAgICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYENvbnRleHQgdHlwZSAnJHtjb250ZXh0Rm9sZGVyTmFtZX0nIG5vdCBmb3VuZC5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKG51bGwpO1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29udGV4dCB0eXBlIGZvciB0aGUgY3VycmVudCBzZWFyY2hcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBmb3JtIG1vZGVsXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdENvbnRleHQoY3R4KSB7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyAmJiB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMuZm9ybU1vZGVsLm5hbWUgPT09IGN0eC5uYW1lKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250ZXh0O1xuICAgICAgaWYgKGN0eC5uYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIGNvbnRleHQgPSBjdHg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0ID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY3R4Lm5hbWUpO1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IGNvbnRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dCk7XG5cbiAgICAgIGxldCBmb3JtRGF0YSA9IHt9O1xuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyA9IHtmb3JtTW9kZWw6IGN0eCwgZGF0YTogZm9ybURhdGF9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkluZGV4RGF0YUNoYW5nZWQoZXZlbnQ6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQpIHtcbiAgICAvLyBvbmx5IHRyaWdnZXIgd2hlbiB2YWx1ZXMgYXJlIGNoYW5nZWQgYXMgY2hhbmdlcyBtYXkgYWxzbyBhcHBlYXIgd2hlbiBzY3JpcHRzXG4gICAgLy8gY2hhbmdlIG90aGVyIGZvcm0gZWxlbWVudCBwcm9wZXJ0aWVzIChlZy4gcmVhZG9ubHksIHJlcXVpcmVkIGZsYWcpXG4gICAgaWYgKGV2ZW50LmluZGV4ZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKSB7XG4gICAgaWYgKCF0aGlzLmluZGV4ZGF0YUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgbWV0YWRhdGEgZmlsdGVycyBmb3IgZWFjaCBmb3JtIGRhdGEgZW50cnlcbiAgICBsZXQgaWR4RmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSBbXTtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmluZGV4ZGF0YUZvcm0uZ2V0Rm9ybURhdGEoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0Rm9ybSkge1xuICAgICAgZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKGZvcm1EYXRhLCB0aGlzLmNvbnRleHRGb3JtLmdldEZvcm1EYXRhKCkpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmb3JtRGF0YSkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaEZpbHRlcih0aGlzLnF1ZXJ5LnR5cGVzLCBrZXksIGZvcm1EYXRhW2tleV0pLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAvLyB0aGUgc2VhcmNoIHNlcnZpY2UgZG9lcyBub3QgbGlrZSBuZXdsaW5lIGNoYXJzIGluIGNhc2Ugb2YgbXVsdGlsaW5lIGZpZWxkc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIuZmlyc3RWYWx1ZSkpIHtcbiAgICAgICAgICBmaWx0ZXIuZmlyc3RWYWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlLm1hcCh2YWx1ZSA9PiB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlci5maXJzdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUucmVwbGFjZSgvXFxuL2csICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH0pO1xuICAgICAgZmlsdGVycy5mb3JFYWNoKGYgPT4gaWR4RmlsdGVycy5wdXNoKGYpKTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKGlkeEZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yIGEgZmlsdGVyLCB0byBiZSBhYmxlIHRvIHNob3cgdGhlXG4gICAqIGxhYmVsIGZvciBhIGZpbHRlciBpbiB0aGUgc2VhcmNoIHN1bW1hcnkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGZldGNoIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0T2JqZWN0VHlwZUVsZW1lbnRMYWJlbChmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIGxldCBvdCA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRUYXJnZXRUeXBlRWxlbWVudEJ5TmFtZShmaWx0ZXIucHJvcGVydHkpO1xuICAgIHJldHVybiBvdCA/IG90LmxhYmVsIDogZmlsdGVyLnByb3BlcnR5ICsgJyAtICcgKyBmaWx0ZXIuZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUXVlcnkoKSB7XG4gICAgLy8gY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZyA6ICdwcmVzZXJ2ZSd9O1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB0aGlzLnJvdXRlclxuICAgICAgLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zdG9yZWQtcXVlcmllcyddLCB7cXVlcnlQYXJhbXM6IHtjcmVhdGU6IHRydWV9fSkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0b3JlZFF1ZXJ5KCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pO1xuICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5zYXZlU3RvcmVkUXVlcnkodGhpcy5xdWVyeSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuc3VjY2VzcycpKTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLmVycm9yJykpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRRdWVyeSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmlzT3duUXVlcnkgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoKSB7XG4gICAgICB0aGlzLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVNlYXJjaE1lbnUoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICB9XG5cbiAgbW92ZU9iamVjdFR5cGVHcm91cChncm91cExhYmVsLCBkaXJlY3Rpb246IHN0cmluZykge1xuICAgIGxldCBpbmRleCA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5maW5kSW5kZXgoZ3JvdXAgPT4gZ3JvdXBMYWJlbCA9PT0gZ3JvdXAubGFiZWwpO1xuICAgIGxldCBuZXdJbmRleCA9IGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gaW5kZXggLSAxIDogaW5kZXggKyAxO1xuICAgIHdoaWxlIChpbmRleCA8IDApIHtcbiAgICAgIGluZGV4ICs9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7XG4gICAgfVxuICAgIHdoaWxlIChuZXdJbmRleCA8IDApIHtcbiAgICAgIG5ld0luZGV4ICs9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChuZXdJbmRleCA+PSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoKSB7XG4gICAgICBsZXQgayA9IG5ld0luZGV4IC0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCArIDE7XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5zcGxpY2UoaW5kZXgsIDEpWzBdKTtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5vYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLm1hcChncm91cCA9PiBncm91cC5sYWJlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1NlYXJjaElucHV0KCkge1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICAvLyBUT0RPOiB0aGlzLnNlYXJjaElucHV0LmlucHV0RUwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VTZWFyY2hJbnB1dEZvY3VzKCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoJy5leHBlcnQtc2VhcmNoX19pbnB1dCcpLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNTZWFyY2hJbnB1dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdGhpcy5jYXBhYmlsaXR5U2VydmljZS5nZXRDYXBhYmlsaXRpZXMoKTtcbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uub2JqZWN0VHlwZUdyb3VwcztcbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHNbMF0udHlwZXMgPSB0aGlzLm9iamVjdFR5cGVHcm91cHNbMF0udHlwZXMuZmlsdGVyKHR5cGUgPT4gdHlwZS5xbmFtZSAhPT0gJ3N5c2ZvbGRlcicgJiYgdHlwZS5xbmFtZSAhPT0gJ3N5c2RvY3VtZW50JyAmJiB0eXBlLnFuYW1lICE9PSAnc3lzb2JqZWN0Jyk7XG4gICAgbGV0IHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLm9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5KTtcbiAgICBsZXQgc3luY2VkID0gdHJ1ZTtcbiAgICBpZiAoc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzICYmIHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5sZW5ndGggPT09IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMub2JqZWN0VHlwZUdyb3Vwc1tpXS5sYWJlbCkpIHtcbiAgICAgICAgICBzeW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN5bmNlZCkge1xuICAgICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMgPSBbLi4udGhpcy5vYmplY3RUeXBlR3JvdXBzXS5zb3J0KFxuICAgICAgICAgIChhLCBiKSA9PiBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuaW5kZXhPZihhLmxhYmVsKSAtIHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5pbmRleE9mKGIubGFiZWwpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucXVlcnkkLnN1YnNjcmliZShcbiAgICAgIChxdWVyeTogU2VhcmNoUXVlcnkpID0+IHRoaXMucHJvY2Vzc1F1ZXJ5KHF1ZXJ5KSk7XG4gICAgLy8gc3Vic2NyaWJlIHRvIHF1ZXJ5IHN0YXRlIGFzIHdlbGwgdG8gZmV0Y2ggcmVzdWx0IGNvdW50IGFuZCBhZ2dyZWdhdGlvbnMgYXMgdGhleSBjaGFuZ2VcbiAgICB0aGlzLnF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucXVlcnlTdGF0ZSQuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4gdGhpcy5wcm9jZXNzUXVlcnlTdGF0ZShxdWVyeVN0YXRlKSk7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5mb2N1c0lucHV0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKHRoaXMudHBsU2VhcmNoLCBudWxsLCB7XG4gICAgICBjZW50ZXJlZDogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmFmdGVyQ2xvc2VkJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHF1ZXJ5UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZXNldEFnZ3MoKTtcbiAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjwhLS0gPGVvLWRpYWxvZyBbdmlzaWJsZV09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2VvLWFwcC1zZWFyY2gtZGlhbG9nJ1wiIFthbGlnbl09XCInc3RhcnQnXCIgW21pbldpZHRoXT1cIic4MHZ3J1wiXG4gIFttaW5IZWlnaHRdPVwiJzEwMHZoJ1wiIChoaWRlKT1cImNsb3NlU2VhcmNoTWVudSgkZXZlbnQpXCI+IC0tPlxuPCEtLSA8eXZjLWRpYWxvZyBbb3B0aW9uc109XCJ7bGlnaHREaXNtaXNzOiB0cnVlfVwiIFt0ZW1wbGF0ZV09XCJ0cGxTZWFyY2hcIiAoY2xvc2VkKT1cImNsb3NlU2VhcmNoTWVudSgpXCI+PC95dmMtZGlhbG9nPiAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsU2VhcmNoPlxuXG4gIDxkaXYgY2xhc3M9XCJlby1hcHAtc2VhcmNoXCIgW25nQ2xhc3NdPVwie2V4cGVydDogcXVlcnkuZXhwZXJ0TW9kZX1cIiBlb1J0bEF3YXJlPVwiZnVsbFwiICpuZ0lmPVwicXVlcnlcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJoZWFkXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hcIj5cbiAgICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJleGVjdXRlU2VhcmNoKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoPC9kaXY+XG5cbiAgICAgICAgICA8ZW8tcXVlcnktc2NvcGUtc2VsZWN0IFtzZWxlY3Rpb25dPVwicXVlcnlTY29wZVwiIChzZWxlY3QpPVwic2V0UXVlcnlTY29wZSgkZXZlbnQpXCI+PC9lby1xdWVyeS1zY29wZS1zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiPlxuXG4gICAgICAgICAgICA8eXZjLWF1dG9jb21wbGV0ZSAqbmdJZj1cIiFxdWVyeS5leHBlcnRNb2RlOyBlbHNlIGV4cGVydElucHV0XCIgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiBbKG5nTW9kZWwpXT1cInF1ZXJ5LnRlcm1cIlxuICAgICAgICAgICAgICAoYXV0b2NvbXBsZXRlRm5jKT1cImF1dG9jb21wbGV0ZVN1Z2dlc3QoJGV2ZW50KVwiIFthdXRvY29tcGxldGVWYWx1ZXNdPVwiYXV0b2NvbXBsZXRlUmVzdWx0c1wiXG4gICAgICAgICAgICAgIChzdWdnZXN0aW9uU2VsZWN0KT1cImF1dG9jb21wbGV0ZVNlbGVjdCgpXCIgW21pbkxlbmd0aF09XCIzXCIgKGtleWRvd24uZW50ZXIpPVwiZXhlY3V0ZVNlYXJjaCgpXCIgKHBhc3RlKT1cImF1dG9jb21wbGV0ZVBhc3RlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwveXZjLWF1dG9jb21wbGV0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBlcnRJbnB1dD5cbiAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cz1cImF1dG9mb2N1c1wiIGNsYXNzPVwiZXhwZXJ0LXNlYXJjaF9faW5wdXRcIiAjeHBpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZXhwZXJ0VGVybUNoYW5nZWQoKVwiIFsobmdNb2RlbCldPVwicXVlcnkudGVybVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGVydE1vZGUoKVwiPlxuICAgICAgICAgICAgICA8IS0tPHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj4tLT5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXhwZXJ0LXNlYXJjaC5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0JyB8IHRyYW5zbGF0ZSlcIiAqbmdJZj1cIiFxdWVyeT8uZXhwZXJ0TW9kZTsgZWxzZSBjbG9zZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjbG9zZT5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5tb2RlLmV4cGVydC5jbG9zZScgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGV4cGVydC1tb2RlIGV4cGVydC1tb2RlX19yZXNldFwiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHF1ZXJ5LnRlcm19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RXhwZXJ0TW9kZUlucHV0KClcIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5jbGVhci5zZWFyY2gnIHwgdHJhbnNsYXRlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdFwiICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2Ugc3Bpbm5lclwiPnt7cXVlcnlTdGF0ZS50b3RhbENvdW50IHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgY2xhc3M9XCJzZWFyY2gtYWdncmVnYXRvcl9fbG9hZGVyXCIgW3NpemVdPVwiJ21lZGl1bSdcIiBbbW9kZV09XCInZGFyaydcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBjbG9zZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIlxuICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsb3NlJyB8IHRyYW5zbGF0ZSlcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2hNZW51KClcIj48L2VvLWljb24+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJib2R5XCIgKm5nSWY9XCIhcXVlcnkuZXhwZXJ0TW9kZTsgZWxzZSBleHBlcnRcIj5cblxuICAgICAgPHl2Yy10YWJzICh0YWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiPlxuXG4gICAgICAgIDwhLS0gb2JqZWN0IHR5cGUgc2VsZWN0IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdFR5cGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC50eXBlJyB8IHRyYW5zbGF0ZX1cIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZXMgcmVzdC1ib3gtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2lkeGVuYWJsZWQ6IHF1ZXJ5LnR5cGVzLmxlbmd0aCA8IDF9XCJcbiAgICAgICAgICAgICpuZ0lmPVwib2JqZWN0VHlwZUdyb3VwcyAmJiAhaWR4U2VhcmNoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgcmVzdC1ib3hcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygb2JqZWN0VHlwZUdyb3VwczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwiZ3JvdXAubGFiZWwgIT09ICcwJ1wiPnt7Z3JvdXAubGFiZWx9fTwvaDM+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiIHRyYW5zbGF0ZT57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCd9fTwvaDM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwibW92ZS1sZWZ0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ2xlZnQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xlZnQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gb2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJtb3ZlLXJpZ2h0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ3JpZ2h0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19yaWdodC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBncm91cC50eXBlc1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2NvbnRleHQ6IHR5cGUuaXNDb250ZXh0Rm9sZGVyLCBmb2xkZXI6IHR5cGUuaXNGb2xkZXIsIGFic3RyYWN0OiB0eXBlLmlzQWJzdHJhY3QsIHNlbGVjdGVkOiBpc1R5cGVBY3RpdmUodHlwZSksIHNhdmVkOiBpc1R5cGVTYXZlZCh0eXBlKX1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIChjbGljayk9XCJ0b2dnbGVUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gW29iamVjdFR5cGVdPVwidHlwZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19IHt7dHlwZS5pc0Fic3RyYWN0ID8gJygnKyAoJ2VvLnNlYXJjaC50eXBlLmFic3RyYWN0JyB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAnKScgOiAnJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2dldEFnZ3JlZ2F0aW9uQ291bnQodHlwZSkgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRleGRhdGEtc2VhcmNoXCIgKm5nSWY9XCJpZHhTZWFyY2hcIj5cbiAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidXR0b25cIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19iYWNrLnN2ZydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleGl0SW5kZXhkYXRhU2VhcmNoKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBpZHhTZWFyY2gudHlwZS5sYWJlbH1cIj5lby5zZWFyY2gub2JqZWN0dHlwZS5mb3JtPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHRcIiAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLmxlbmd0aFwiPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgdHJhbnNsYXRlPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm0uY29udGV4dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxlby1jb250ZXh0LXNlYXJjaCAqbmdGb3I9XCJsZXQgY3R4IG9mIGlkeFNlYXJjaC5jb250ZXh0TW9kZWxzOyBpbmRleCBhcyBpXCIgW2N0eF09XCJjdHhcIiBbcXVlcnldPVwicXVlcnlcIlxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9PT0gY3R4Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgJiYgY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjdHgubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgW2lkeFNlYXJjaF09XCJpZHhTZWFyY2hcIiAoc2V0Q29udGV4dCk9XCJzZXRDb250ZXh0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWNvbnRleHQtc2VhcmNoPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRleHQgZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1vYmplY3QtZm9ybSBjbGFzcz1cImRhcmtcIiAjY3R4Zm9ybVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIGlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnM/LmZvcm1Nb2RlbD8uZWxlbWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbZm9ybU9wdGlvbnNdPVwiaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1wiIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJvYmplY3QtdHlwZSBmb3JtXCIgKm5nSWY9XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtICNpZHhmb3JtIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCIgKG9uRm9ybVJlYWR5KT1cImlkeGZvcm0uZm9jdXNGb3JtKClcIj5cbiAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIGNyZWF0ZWQgdGFiIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdENyZWF0ZWQnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbicgfCB0cmFuc2xhdGUgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLkNSRUFURURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5DUkVBVEVELCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW4tY3VzdG9tXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uY3VzdG9tPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2NyZWF0ZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjY3JlYXRlZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZVwiIG5hbWU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRvcl09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cImNyZWF0ZWRGaWVsZC5zZWFyY2hPcHRpb24gJiYgY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGNyZWF0ZWRGb3JtKVwiPlxuICAgICAgICAgICAgICAgICAgPC9lby1kYXRldGltZS1yYW5nZT5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWNyZWF0b3JcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLmNyZWF0b3I8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjY3JlYXRvckZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cuY3JlYXRlZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVE9SXS52YWx1ZVwiIG5hbWU9XCJjcmVhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVSZXNvbHZlZCk9XCJyZXNvbHZlTGFiZWwoZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVE9SXSwgJGV2ZW50KVwiIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFUT1IsIE9QRVJBVE9SLklOLCAkZXZlbnQsIGNyZWF0b3JGb3JtKVwiPjwvZW8tb3JnYW5pemF0aW9uPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdE1vZGlmaWNhdGlvbicsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbicgfCB0cmFuc2xhdGV9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGlmaWVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1PRElGSUVEXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLlJBTkdFLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3Bhbi1jdXN0b21cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5jdXN0b208L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjbW9kaWZpZWRGaWVsZCBbKG5nTW9kZWwpXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlXCIgbmFtZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdG9yXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUub3BlcmF0b3IgOiBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIFt3aXRoVGltZV09XCJtb2RpZmllZEZpZWxkLnNlYXJjaE9wdGlvbiAmJiBtb2RpZmllZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVELCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBtb2RpZmllZEZvcm0pXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbW9kaWZpZXJcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLm1vZGlmaWVyPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI21vZGlmaWVyRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5tb2RpZmllZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJcIiAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVSLCBPUEVSQVRPUi5JTiwgJGV2ZW50LCBtb2RpZmllckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdEZpbGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5maWxlJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZSByZXN0LWJveC1jb250YWluZXJcIiAqbmdJZj1cInF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbWltZXR5cGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubWltZXR5cGVncm91cDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlcihQQVJBTVMuTUlNRVRZUEVHUk9VUCwgT1BFUkFUT1IuSU4sIHJlc29sdmVTZWxlY3Rpb24oYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZXNpemVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZXNpemU8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5GSUxFU0laRSwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2ZpbGVuYW1lRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLXN0cmluZyBbYXV0b2NvbXBsZXRlXT1cInRydWVcIiBbcW5hbWVdPVwiJ2ZpbGVuYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0udmFsdWVcIiBuYW1lPVwiZmlsZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkZJTEVOQU1FLCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBmaWxlbmFtZUZvcm0pXCI+PC9lby1zdHJpbmc+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwveXZjLXRhYnM+XG5cbiAgICAgIDwhLS0gc3VtbWFyeSBvZiB0aGUgY3VycmVudCBzZWFyY2ggZmlsdGVycyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXBhbmVsXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lIHN0b3JlZC1xdWVyeVwiICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdoZWFkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlSW5iZXR3ZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZFNlYXJjaEljb25cIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfc2F2ZWRfc2VhcmNoLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnN0b3JlZHF1ZXJ5PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZWQtcXVlcnktbmFtZVwiPnt7c3RvcmVkUXVlcnkubmFtZX19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdoZWFkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkbGluZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwicXVlcnktdHlwZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLXNlYXJjaHRlcm1cIiAqbmdJZj1cInF1ZXJ5LnRlcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50ZXJtPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7cXVlcnkudGVybX19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVGVybSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLWNvbnRleHR0eXBlXCIgKm5nSWY9XCJxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuY29udGV4dGZvbGRlcnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkuY29udGV4dEZvbGRlclR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlQ29udGV4dFR5cGUoKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1vYmplY3R0eXBlXCIgKm5nSWY9XCJxdWVyeS50eXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50eXBlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXJ5LnR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVHlwZSh0eXBlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC10cmFuc2xhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIGZpbHRlci5pbm5lclZhbHVlOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3tmaWx0ZXIubGFiZWxbaV0gfCBhc3luY319PC9kaXY+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZXNldEZpbHRlcihmaWx0ZXIsIHZhbClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY3JlYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLmlubmVyVmFsdWU/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1tb2RpZmljYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS5pbm5lclZhbHVlPy5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1pbWV0eXBlZ3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGU8L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIiAqbmdJZj1cInF1ZXJ5LnRlcm0gfHwgcXVlcnkuZmlsdGVycy5sZW5ndGggfHwgcXVlcnkudHlwZXMubGVuZ3RoOyBlbHNlIGVtcHR5U2VhcmNoXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdhY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5IGJ0bi1yZXNldFwiIChjbGljayk9XCJyZXNldFF1ZXJ5KClcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LmNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi11cGRhdGVcIiAoY2xpY2spPVwidXBkYXRlU3RvcmVkUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkudXBkYXRlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi1zYXZlXCIgKGNsaWNrKT1cInNhdmVRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiAhaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXN1Ym1pdFwiIChjbGljayk9XCJleGVjdXRlU2VhcmNoKClcIiBbZGlzYWJsZWRdPVwicXVlcnlTdGF0ZS5pc0VtcHR5XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVnYWN0aW9ucz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zZWFyY2hcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1bW1hcnkuZW1wdHk8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBleHBlcnQgbW9kZSBib2R5IHBhbmVsIGNvbnRhaW5pbmcgZXhwbGFuYXRpb25zIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZXhwZXJ0PlxuICAgICAgPGRpdiBjbGFzcz1cImJvZHkgZXhwZXJ0XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5XCIgKm5nSWY9XCJleHBlcnRNb2RlUXVlcnlFbXB0eVwiPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQucmVzdWx0LmVtcHR5PC9zcGFuPjwvZGl2PlxuXG4gICAgICAgIDwhLS1cbiAgICAgICAgPGgyPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQ8L3NwYW4+PC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludHJvXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5pbnRybzwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXNlLXBhcmFtcyBmaWVsZHNcIj5cbiAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmJhc2VwYXJhbXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZWwgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtc1wiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhXCI+e3tlbC5kYXRhfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic3lzdGVtLXR5cGVzIGZpZWxkc1wiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZ3JvdXA8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHR5cGVHcm91cFRyZWVcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cCAmJiBncm91cC5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC5pZH1cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ4cFNlbGVjdEdyb3VwKGdyb3VwKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJzAnXCI+e3tncm91cC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIj57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCcgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tdHlwZVwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC50eXBlPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkR3JvdXAudHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgJiYgdHlwZS5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gc2VjdGlvbi1maWVsZFwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmZpZWxkPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuY2hpbGRyZW5cIiAoY2xpY2spPVwieHBBZGRUb1Rlcm0oZWwuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0eXBlXCI+e3tlbC50eXBlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDwhLS0gPC9lby1kaWFsb2c+IC0tPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==