barsa-sap-ui 2.2.1 → 2.2.3

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 (242) hide show
  1. package/esm2022/barsa-sap-ui.mjs +5 -0
  2. package/esm2022/lib/apply-conditional-formmatings.directive.mjs +90 -0
  3. package/esm2022/lib/avatar-size.pipe.mjs +41 -0
  4. package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +41 -0
  5. package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +145 -0
  6. package/esm2022/lib/barsa-bar-download-file/barsa-bar-download-file.component.mjs +23 -0
  7. package/esm2022/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +23 -0
  8. package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +29 -0
  9. package/esm2022/lib/barsa-breadcrumbs/barsa-breadcrumbs.component.mjs +24 -0
  10. package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +24 -0
  11. package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +31 -0
  12. package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +41 -0
  13. package/esm2022/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +24 -0
  14. package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +242 -0
  15. package/esm2022/lib/barsa-chat/chat.model.mjs +8 -0
  16. package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +13 -0
  17. package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +22 -0
  18. package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +66 -0
  19. package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +78 -0
  20. package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +22 -0
  21. package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +13 -0
  22. package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +15 -0
  23. package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +72 -0
  24. package/esm2022/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +23 -0
  25. package/esm2022/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +14 -0
  26. package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +14 -0
  27. package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +26 -0
  28. package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
  29. package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +40 -0
  30. package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +61 -0
  31. package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +45 -0
  32. package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +58 -0
  33. package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +27 -0
  34. package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +94 -0
  35. package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +22 -0
  36. package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +37 -0
  37. package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +41 -0
  38. package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +29 -0
  39. package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +23 -0
  40. package/esm2022/lib/barsa-modal/barsa-modal.component.mjs +43 -0
  41. package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +83 -0
  42. package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +57 -0
  43. package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +159 -0
  44. package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +17 -0
  45. package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +30 -0
  46. package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +14 -0
  47. package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +34 -0
  48. package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +46 -0
  49. package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +79 -0
  50. package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +30 -0
  51. package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +31 -0
  52. package/esm2022/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +28 -0
  53. package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +102 -0
  54. package/esm2022/lib/barsa-row-inline-actionlist/barsa-row-inline-actionlist.component.mjs +26 -0
  55. package/esm2022/lib/barsa-sap-ui-routing.module.mjs +18 -0
  56. package/esm2022/lib/barsa-sap-ui.module.mjs +377 -0
  57. package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
  58. package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +170 -0
  59. package/esm2022/lib/barsa-tab-route-manager/barsa-tab-route-manager.component.mjs +18 -0
  60. package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +29 -0
  61. package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +222 -0
  62. package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +87 -0
  63. package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +60 -0
  64. package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +26 -0
  65. package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +23 -0
  66. package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +37 -0
  67. package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +418 -0
  68. package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +36 -0
  69. package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +153 -0
  70. package/esm2022/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +20 -0
  71. package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +216 -0
  72. package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +74 -0
  73. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +50 -0
  74. package/esm2022/lib/captcha-field/captcha-field.component.mjs +28 -0
  75. package/esm2022/lib/card-item/card-item.component.mjs +74 -0
  76. package/esm2022/lib/card-view-content/card-view-content.component.mjs +46 -0
  77. package/esm2022/lib/col-renderer.directive.mjs +47 -0
  78. package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
  79. package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +61 -0
  80. package/esm2022/lib/column-renderer/column-renderer.component.mjs +97 -0
  81. package/esm2022/lib/constants.mjs +450 -0
  82. package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +41 -0
  83. package/esm2022/lib/device-info-field-base.mjs +24 -0
  84. package/esm2022/lib/dialog-handler.directive.mjs +29 -0
  85. package/esm2022/lib/download-files.directive.mjs +34 -0
  86. package/esm2022/lib/dynamic-page-size.pipe.mjs +27 -0
  87. package/esm2022/lib/file-in-dialog/file-in-dialog.component.mjs +44 -0
  88. package/esm2022/lib/file-viewer/file-viewer.component.mjs +47 -0
  89. package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +71 -0
  90. package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +37 -0
  91. package/esm2022/lib/form-dialog/form-dialog.component.mjs +171 -0
  92. package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +50 -0
  93. package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +62 -0
  94. package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +45 -0
  95. package/esm2022/lib/form-wizard/form-wizard.component.mjs +21 -0
  96. package/esm2022/lib/fullscreen-dialog.directive.mjs +60 -0
  97. package/esm2022/lib/fullscreen-files.directive.mjs +43 -0
  98. package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +217 -0
  99. package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +215 -0
  100. package/esm2022/lib/global-search/global-search.component.mjs +27 -0
  101. package/esm2022/lib/global-search-module/global-search-module.component.mjs +29 -0
  102. package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +25 -0
  103. package/esm2022/lib/header-avatar/header-avatar.component.mjs +18 -0
  104. package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +48 -0
  105. package/esm2022/lib/hyperlink/hyperlink.component.mjs +23 -0
  106. package/esm2022/lib/index.mjs +549 -0
  107. package/esm2022/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -0
  108. package/esm2022/lib/layout-actions/layout-actions.component.mjs +70 -0
  109. package/esm2022/lib/layout-control/layout-control.component.mjs +302 -0
  110. package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +180 -0
  111. package/esm2022/lib/list-item/list-item.component.mjs +34 -0
  112. package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +42 -0
  113. package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +82 -0
  114. package/esm2022/lib/ly-label/ly-label.component.mjs +37 -0
  115. package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
  116. package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
  117. package/esm2022/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -0
  118. package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +83 -0
  119. package/esm2022/lib/ly-line/ly-line.component.mjs +56 -0
  120. package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +22 -0
  121. package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +44 -0
  122. package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +44 -0
  123. package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +51 -0
  124. package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +43 -0
  125. package/esm2022/lib/mask/mask.component.mjs +22 -0
  126. package/esm2022/lib/message-strip/message-strip.component.mjs +28 -0
  127. package/esm2022/lib/models/grid-data-provider.mjs +114 -0
  128. package/esm2022/lib/models/grid-view.mjs +2 -0
  129. package/esm2022/lib/models/index.mjs +2 -0
  130. package/esm2022/lib/no-data/no-data.component.mjs +31 -0
  131. package/esm2022/lib/notification-item/notification-item.component.mjs +57 -0
  132. package/esm2022/lib/notification-item-actions/notification-item-actions.component.mjs +79 -0
  133. package/esm2022/lib/notification-popup.service.mjs +92 -0
  134. package/esm2022/lib/object-status-icon.pipe.mjs +27 -0
  135. package/esm2022/lib/progress-indicator/progress-indicator.component.mjs +18 -0
  136. package/esm2022/lib/report-navigator/report-navigator.component.mjs +68 -0
  137. package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
  138. package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
  139. package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +97 -0
  140. package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +88 -0
  141. package/esm2022/lib/report-tree-base.mjs +387 -0
  142. package/esm2022/lib/report-view-renderer.directive.mjs +392 -0
  143. package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
  144. package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
  145. package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +72 -0
  146. package/esm2022/lib/sap-font-class.pipe.mjs +30 -0
  147. package/esm2022/lib/sap-font.pipe.mjs +30 -0
  148. package/esm2022/lib/sap-size.pipe.mjs +28 -0
  149. package/esm2022/lib/sap-ui-report-base.component.mjs +809 -0
  150. package/esm2022/lib/search-panel/search-panel.component.mjs +63 -0
  151. package/esm2022/lib/static-text/static-text.component.mjs +15 -0
  152. package/esm2022/lib/table-th.directive.mjs +87 -0
  153. package/esm2022/lib/title/title.component.mjs +15 -0
  154. package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +34 -0
  155. package/esm2022/lib/ui-bpmn-viewer/ui-bpmn-viewer.component.mjs +33 -0
  156. package/esm2022/lib/ui-button/ui-button.component.mjs +32 -0
  157. package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +53 -0
  158. package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +58 -0
  159. package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +42 -0
  160. package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +39 -0
  161. package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
  162. package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +38 -0
  163. package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +191 -0
  164. package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +150 -0
  165. package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +108 -0
  166. package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +53 -0
  167. package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +124 -0
  168. package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +103 -0
  169. package/esm2022/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -0
  170. package/esm2022/lib/ui-graph/ui-graph.component.mjs +17 -0
  171. package/esm2022/lib/ui-grid/ui-grid.component.mjs +25 -0
  172. package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +43 -0
  173. package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +66 -0
  174. package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +75 -0
  175. package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +58 -0
  176. package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +123 -0
  177. package/esm2022/lib/ui-html-viewer/ui-html-viewer.component.mjs +16 -0
  178. package/esm2022/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -0
  179. package/esm2022/lib/ui-label/ui-label.component.mjs +12 -0
  180. package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +379 -0
  181. package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +84 -0
  182. package/esm2022/lib/ui-map/ui-map.component.mjs +68 -0
  183. package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +124 -0
  184. package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
  185. package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +14 -0
  186. package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +55 -0
  187. package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +429 -0
  188. package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +28 -0
  189. package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +37 -0
  190. package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +59 -0
  191. package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +93 -0
  192. package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +36 -0
  193. package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +56 -0
  194. package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +28 -0
  195. package/esm2022/lib/ui-notification-view/ui-notification-view.component.mjs +47 -0
  196. package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +33 -0
  197. package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +27 -0
  198. package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -0
  199. package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +268 -0
  200. package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +101 -0
  201. package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +261 -0
  202. package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +48 -0
  203. package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +36 -0
  204. package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +46 -0
  205. package/esm2022/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -0
  206. package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +55 -0
  207. package/esm2022/lib/ui-single-picture/ui-single-picture.component.mjs +36 -0
  208. package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
  209. package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +296 -0
  210. package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +49 -0
  211. package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +52 -0
  212. package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +48 -0
  213. package/esm2022/lib/ui-time-span/ui-time-span.component.mjs +24 -0
  214. package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
  215. package/esm2022/lib/ui-tree/ui-tree.component.mjs +114 -0
  216. package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +100 -0
  217. package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +23 -0
  218. package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +310 -0
  219. package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +25 -0
  220. package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +93 -0
  221. package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +119 -0
  222. package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +32 -0
  223. package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +48 -0
  224. package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +53 -0
  225. package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +116 -0
  226. package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
  227. package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +196 -0
  228. package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
  229. package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +84 -0
  230. package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +65 -0
  231. package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +116 -0
  232. package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +54 -0
  233. package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +177 -0
  234. package/esm2022/lib/upload-file-status.pipe.mjs +29 -0
  235. package/esm2022/lib/util-chat-time-badge.pipe.mjs +18 -0
  236. package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +23 -0
  237. package/esm2022/lib/wizard-layout.directive.mjs +104 -0
  238. package/esm2022/public-api.mjs +236 -0
  239. package/fesm2022/barsa-sap-ui.mjs +6 -13
  240. package/fesm2022/barsa-sap-ui.mjs.map +1 -1
  241. package/lib/layout-wizard/layout-wizard.component.d.ts +0 -1
  242. package/package.json +3 -1
@@ -0,0 +1,55 @@
1
+ import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core';
2
+ import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "barsa-novin-ray-core";
5
+ export class UiMoInfoSubFormUiComponent extends DeviceInfoFieldBaseComponent {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.disabled = false;
9
+ this.readonly = false;
10
+ }
11
+ ngOnInit() {
12
+ super.ngOnInit();
13
+ this.customFormPanelUi = this.context.formControl;
14
+ this._listenTitleChanged();
15
+ this.context.on({
16
+ AddFormControlUi: this._addFormControl.bind(this)
17
+ });
18
+ // this.disable$.subscribe((disable) => {
19
+ // this.disabled = disable;
20
+ // });
21
+ // this.readonly$.subscribe((readonly) => {
22
+ // this.readonly = readonly;
23
+ // });
24
+ }
25
+ ngOnDestroy() {
26
+ super.ngOnDestroy();
27
+ this.context.un('AddFormControl', this._addFormControl);
28
+ }
29
+ _listenTitleChanged() {
30
+ if (!this.customFormPanelUi) {
31
+ return;
32
+ }
33
+ this.customFormPanelUi.on({
34
+ TitleChanged: this._titleChanged.bind(this)
35
+ });
36
+ }
37
+ _titleChanged() { }
38
+ _addFormControl(formControl) {
39
+ this.customFormPanelUi = formControl;
40
+ this._cdr.detectChanges();
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiMoInfoSubFormUiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiMoInfoSubFormUiComponent, selector: "bsu-ui-mo-info-sub-form-ui", host: { properties: { "class.control-disabled": "this.disabled", "class.control-readonly": "this.readonly" } }, usesInheritance: true, ngImport: i0, template: "@if (customFormPanelUi) {\r\n<bnrc-form *untilInView=\"el\" [customFormPanelUi]=\"customFormPanelUi\"></bnrc-form>\r\n}\r\n", styles: [":host{display:block;height:auto}:host ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:0}:host ::ng-deep bsu-barsa-simple-form>fd-layout-grid>div>div.fd-col{padding:0}:host ::ng-deep bsu-barsa-simple-form>fd-layout-grid>div>div.fd-col bsu-ly-horizontal-layout bnrc-field-ui:first-child{padding-right:0}:host ::ng-deep bsu-barsa-simple-form>fd-layout-grid>div>div.fd-col bsu-ly-horizontal-layout bnrc-field-ui:last-child{padding-left:0}\n"], dependencies: [{ kind: "component", type: i1.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "directive", type: i1.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiMoInfoSubFormUiComponent, decorators: [{
46
+ type: Component,
47
+ args: [{ selector: 'bsu-ui-mo-info-sub-form-ui', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (customFormPanelUi) {\r\n<bnrc-form *untilInView=\"el\" [customFormPanelUi]=\"customFormPanelUi\"></bnrc-form>\r\n}\r\n", styles: [":host{display:block;height:auto}:host ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:0}:host ::ng-deep bsu-barsa-simple-form>fd-layout-grid>div>div.fd-col{padding:0}:host ::ng-deep bsu-barsa-simple-form>fd-layout-grid>div>div.fd-col bsu-ly-horizontal-layout bnrc-field-ui:first-child{padding-right:0}:host ::ng-deep bsu-barsa-simple-form>fd-layout-grid>div>div.fd-col bsu-ly-horizontal-layout bnrc-field-ui:last-child{padding-left:0}\n"] }]
48
+ }], propDecorators: { disabled: [{
49
+ type: HostBinding,
50
+ args: ['class.control-disabled']
51
+ }], readonly: [{
52
+ type: HostBinding,
53
+ args: ['class.control-readonly']
54
+ }] } });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbW8taW5mby1zdWItZm9ybS11aS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1tby1pbmZvLXN1Yi1mb3JtLXVpL3VpLW1vLWluZm8tc3ViLWZvcm0tdWkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby1zdWItZm9ybS11aS91aS1tby1pbmZvLXN1Yi1mb3JtLXVpLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVuRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBUXpFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSw0QkFBNEI7SUFQNUU7O1FBUTJDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztLQWtDM0Q7SUEvQkcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDcEQsQ0FBQyxDQUFDO1FBQ0gseUNBQXlDO1FBQ3pDLDRCQUE0QjtRQUM1QixNQUFNO1FBQ04sMkNBQTJDO1FBQzNDLDZCQUE2QjtRQUM3QixPQUFPO0lBQ1gsQ0FBQztJQUNELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDUyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUN0QixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzlDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDUyxhQUFhLEtBQVUsQ0FBQztJQUN4QixlQUFlLENBQUMsV0FBVztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0FuQ1EsMEJBQTBCO21HQUExQiwwQkFBMEIseU1DVnZDLDZIQUdBOzs0RkRPYSwwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLEtBQUs7OEJBR3NCLFFBQVE7c0JBQTlDLFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNFLFFBQVE7c0JBQTlDLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBEZXZpY2VJbmZvRmllbGRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGV2aWNlLWluZm8tZmllbGQtYmFzZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktbW8taW5mby1zdWItZm9ybS11aScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbW8taW5mby1zdWItZm9ybS11aS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1tby1pbmZvLXN1Yi1mb3JtLXVpLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaU1vSW5mb1N1YkZvcm1VaUNvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbnRyb2wtZGlzYWJsZWQnKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb250cm9sLXJlYWRvbmx5JykgcmVhZG9ubHkgPSBmYWxzZTtcclxuXHJcbiAgICBjdXN0b21Gb3JtUGFuZWxVaTogYW55O1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZvcm1QYW5lbFVpID0gdGhpcy5jb250ZXh0LmZvcm1Db250cm9sO1xyXG4gICAgICAgIHRoaXMuX2xpc3RlblRpdGxlQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5vbih7XHJcbiAgICAgICAgICAgIEFkZEZvcm1Db250cm9sVWk6IHRoaXMuX2FkZEZvcm1Db250cm9sLmJpbmQodGhpcylcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0aGlzLmRpc2FibGUkLnN1YnNjcmliZSgoZGlzYWJsZSkgPT4ge1xyXG4gICAgICAgIC8vICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB0aGlzLnJlYWRvbmx5JC5zdWJzY3JpYmUoKHJlYWRvbmx5KSA9PiB7XHJcbiAgICAgICAgLy8gIHRoaXMucmVhZG9ubHkgPSByZWFkb25seTtcclxuICAgICAgICAvLyAgfSk7XHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignQWRkRm9ybUNvbnRyb2wnLCB0aGlzLl9hZGRGb3JtQ29udHJvbCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2xpc3RlblRpdGxlQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tRm9ybVBhbmVsVWkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1c3RvbUZvcm1QYW5lbFVpLm9uKHtcclxuICAgICAgICAgICAgVGl0bGVDaGFuZ2VkOiB0aGlzLl90aXRsZUNoYW5nZWQuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF90aXRsZUNoYW5nZWQoKTogdm9pZCB7fVxyXG4gICAgcHJvdGVjdGVkIF9hZGRGb3JtQ29udHJvbChmb3JtQ29udHJvbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybVBhbmVsVWkgPSBmb3JtQ29udHJvbDtcclxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG59XHJcbiIsIkBpZiAoY3VzdG9tRm9ybVBhbmVsVWkpIHtcclxuPGJucmMtZm9ybSAqdW50aWxJblZpZXc9XCJlbFwiIFtjdXN0b21Gb3JtUGFuZWxVaV09XCJjdXN0b21Gb3JtUGFuZWxVaVwiPjwvYm5yYy1mb3JtPlxyXG59XHJcbiJdfQ==
@@ -0,0 +1,429 @@
1
+ import { Component, HostListener, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';
2
+ import { of, Subject } from 'rxjs';
3
+ import { debounceTime, filter, distinctUntilChanged, tap, takeUntil, switchMap } from 'rxjs/operators';
4
+ import { ComboboxComponent } from '@fundamental-ngx/core';
5
+ import { FieldBaseComponent, BarsaApi, PreventDefaulEvent, getUniqueId } from 'barsa-novin-ray-core';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "barsa-novin-ray-core";
9
+ import * as i3 from "@fundamental-ngx/core/button";
10
+ import * as i4 from "@fundamental-ngx/core/combobox";
11
+ import * as i5 from "@fundamental-ngx/core/icon";
12
+ import * as i6 from "@fundamental-ngx/core/input-group";
13
+ import * as i7 from "@fundamental-ngx/core/list";
14
+ import * as i8 from "../ulv-paging/ulv-paging.component";
15
+ import * as i9 from "../mask/mask.component";
16
+ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.smartChange = new Subject();
20
+ this.allColumns = [];
21
+ this._openPopupFormSelectionSource = new Subject();
22
+ this._closeDialogSource = new Subject();
23
+ this._loadingSource = new Subject();
24
+ this.displayFunc = (obj) => {
25
+ if (obj) {
26
+ const colName = this.getFirstColumnName();
27
+ return this.getMoValueCaption(obj, colName, obj.$Caption);
28
+ }
29
+ return '';
30
+ };
31
+ /* eslint-disable */
32
+ this.IsExpanded = (type) => {
33
+ if (type === 'Dd') {
34
+ return false;
35
+ }
36
+ return this.fdComboRef?.popoverComponent?.isOpen;
37
+ };
38
+ // return this.comboRef.nativeElement.responsivePopover.isOpen();
39
+ /* eslint-disable */
40
+ this.Collapse = (type) => { };
41
+ /* eslint-disable */
42
+ this.Expand = (type) => {
43
+ this.ulvAdapter = this.UlvMainCtrlr[type];
44
+ };
45
+ /* eslint-disable */
46
+ this.on = () => { };
47
+ /* eslint-disable */
48
+ this.Focus = () => { };
49
+ this.SetUlvAdapter = (type, ulvAdapter) => {
50
+ this.ulvAdapter = ulvAdapter;
51
+ this._setColumns();
52
+ /* eslint-disable */
53
+ };
54
+ this.IsUiCreated = (type) => {
55
+ return true;
56
+ /* eslint-disable */
57
+ };
58
+ this.Mask = (type) => {
59
+ this._loadingSource.next(true);
60
+ /* eslint-disable */
61
+ };
62
+ this.hide = (type) => {
63
+ if (this.formSelectionDialog) {
64
+ this.formSelectionDialog.close();
65
+ }
66
+ /* eslint-disable */
67
+ };
68
+ this.show = (type) => {
69
+ if (this.UlvUi && !this.isOpenSelectionDialog && this.context._showPopup) {
70
+ this._openPopupFormSelectionSource.next(); // rabete taki general info .popup baz mishod ke baiad dropdown bashe.
71
+ }
72
+ else {
73
+ this.fdComboRef && (this.fdComboRef.open = true);
74
+ }
75
+ this._cdr.detectChanges();
76
+ /* eslint-disable */
77
+ };
78
+ this.Unmask = (type) => {
79
+ this._loadingSource.next(false);
80
+ /* eslint-disable */
81
+ };
82
+ this.getRawValue = () => {
83
+ return this.rawValue;
84
+ /* eslint-disable */
85
+ };
86
+ }
87
+ set UlvUi(value) {
88
+ this._UlvUi = value;
89
+ if (value) {
90
+ value.viewerControl.on({
91
+ MoDataListChanged: () => {
92
+ this._cdr.detectChanges();
93
+ }
94
+ });
95
+ }
96
+ }
97
+ get UlvUi() {
98
+ return this._UlvUi;
99
+ }
100
+ onKeyDown(e) {
101
+ e = new BarsaApi.Ext.EventObjectImpl(e);
102
+ const k = e.getKey();
103
+ if (e.keyCode === e.ENTER || k === BarsaApi.Ext.EventObject.TAB) {
104
+ this.context.fireEvent('keydown', this.context, e);
105
+ }
106
+ }
107
+ onAlt(e) {
108
+ e.stopPropagation();
109
+ e.preventDefault();
110
+ }
111
+ ngOnInit() {
112
+ this.comboboxId = getUniqueId(3);
113
+ this._checkHasValue(this.value);
114
+ this.loading$ = this._loadingSource.asObservable().pipe(takeUntil(this._onDestroy$));
115
+ this.loading$.subscribe(() => {
116
+ this.isDataLoadedFirstTime =
117
+ typeof this.ulvAdapter?.Setting?.Data?.MoDataList === 'object' ||
118
+ typeof this.UlvUi?.Setting?.Data?.MoDataList === 'object';
119
+ });
120
+ this.smartChange
121
+ .pipe(takeUntil(this._onDestroy$), debounceTime(200), filter((value) => this._filterSmartChange(value)), distinctUntilChanged(), tap((value) => (this.rawValue = value)))
122
+ .subscribe((value) => {
123
+ this.context.fireEvent('SmartChange', this.context, value);
124
+ });
125
+ this._openPopupFormSelectionSource
126
+ .asObservable()
127
+ .pipe(takeUntil(this._closeDialogSource), takeUntil(this._onDestroy$), switchMap(() => this._openPopupFormSelection()))
128
+ .subscribe();
129
+ super.ngOnInit();
130
+ this.originalValue = this.value;
131
+ this.hasReport = this.Setting.RelationViewType === 'ReportView' || this.Setting.ReportName === 'Hierarchical';
132
+ this.Control = this;
133
+ setTimeout(() => {
134
+ this._setValueText(this.value);
135
+ });
136
+ }
137
+ onPagingClick(e) {
138
+ PreventDefaulEvent(e);
139
+ }
140
+ onPageChange(e) {
141
+ this._loadingSource.next(true);
142
+ if (this.UlvUi) {
143
+ this.UlvUi.fireEvent('PageChange', this.UlvUi, e);
144
+ return;
145
+ }
146
+ this.ulvAdapter.DataCtrlr.MoveToPage(e, () => {
147
+ this._loadingSource.next(false);
148
+ });
149
+ }
150
+ onItemClick(e, moDataList) {
151
+ this._handleItemSelect(moDataList, e.item);
152
+ }
153
+ onPageChange2(pageSetting, e) {
154
+ PreventDefaulEvent(e);
155
+ if (!this.ulvAdapter) {
156
+ this.UlvUi.fireEvent('PageChange', this.UlvUi, pageSetting.Page + 1);
157
+ return;
158
+ }
159
+ this._loadingSource.next(true);
160
+ const ulvAdapter = this.ulvAdapter;
161
+ const temp1 = ulvAdapter.Setting.Data.MoDataList;
162
+ temp1.splice(temp1.length - 1, 1);
163
+ const moDataListOld = [...temp1];
164
+ moDataListOld.forEach((c) => (c.$__IsLast = false));
165
+ this.ulvAdapter.DataCtrlr.MoveToPage(pageSetting.Page + 1, () => {
166
+ const moDataList = ulvAdapter.Setting.Data.MoDataList;
167
+ moDataList.splice(0, 0, ...moDataListOld);
168
+ this._loadingSource.next(false);
169
+ });
170
+ }
171
+ onOpenChange(fdCombobox, isOpen) {
172
+ if (isOpen) {
173
+ this._focus();
174
+ // fdCombobox.open = false; // it close popup when click on dropdown button in component
175
+ }
176
+ else {
177
+ const inputText = this.fdComboRef?.inputTextValue;
178
+ if (!this.value && inputText) {
179
+ this._raiseSmartChange(inputText);
180
+ }
181
+ }
182
+ }
183
+ onInputChange(e) {
184
+ this._raiseSmartChange(e);
185
+ }
186
+ onInputChange2(e) {
187
+ this._raiseSmartChange(e.target.value);
188
+ }
189
+ onValueChange(e) {
190
+ this._raiseValueChanged(e.target.value);
191
+ }
192
+ onNew() {
193
+ this._triggerClick('New');
194
+ }
195
+ onClear() {
196
+ this._triggerClick('Delete');
197
+ }
198
+ onEdit() {
199
+ this._triggerClick('Edit');
200
+ }
201
+ onSearch() {
202
+ this._triggerClick('Popup');
203
+ }
204
+ /* eslint-disable */
205
+ customFilter(content, searchTerm) {
206
+ return content;
207
+ }
208
+ getMoValueCaption(valueMo, colName, defaultValue) {
209
+ if (valueMo === null) {
210
+ return defaultValue;
211
+ }
212
+ let captionValueMo;
213
+ const molist = BarsaApi.Common.Util.TryGetValue(this.ulvAdapter, 'Setting.Data.MoDataList', []);
214
+ const foundedMo = molist.find((c) => c.Id === valueMo.Id);
215
+ if (colName && foundedMo && foundedMo[colName]) {
216
+ if (foundedMo[colName + '$Caption']) {
217
+ captionValueMo = foundedMo[colName + '$Caption'];
218
+ }
219
+ else if (foundedMo[colName].$Caption) {
220
+ captionValueMo = foundedMo[colName].$Caption;
221
+ }
222
+ else {
223
+ captionValueMo = foundedMo[colName];
224
+ }
225
+ }
226
+ return this._bbbPipe.transform(captionValueMo || defaultValue);
227
+ }
228
+ getFirstColumnName() {
229
+ let colName = '$Caption';
230
+ if (this.UlvMainCtrlr && this.UlvMainCtrlr?.Dd?.Setting?.View) {
231
+ if (this.UlvMainCtrlr.Dd.Setting.View.Columns) {
232
+ const firstCol = this.UlvMainCtrlr.Dd.Setting.View.Columns.find((c) => !c.Name.startsWith('$') && c.Name !== 'Id');
233
+ if (firstCol?.Name) {
234
+ colName = firstCol.Name;
235
+ }
236
+ }
237
+ }
238
+ return colName;
239
+ }
240
+ _handleItemSelect(moDataList, mo) {
241
+ moDataList.forEach((c) => (c.$IsChecked = false));
242
+ this._fireValueChange(mo);
243
+ }
244
+ _setValue(value) {
245
+ this._setValueText(value);
246
+ this._checkHasValue(value);
247
+ super._setValue(value);
248
+ // this._setComboText(value);
249
+ }
250
+ _checkHasValue(value) {
251
+ this.hasValue = typeof value !== 'undefined' && value !== null && value !== '';
252
+ }
253
+ _setValueText(value) {
254
+ this.valueText = this._getValueText(value);
255
+ this._setComboText(this.valueText);
256
+ }
257
+ _getValueText(value) {
258
+ if (!value) {
259
+ return '';
260
+ }
261
+ else if (typeof value === 'string') {
262
+ return value;
263
+ }
264
+ else if (typeof value === 'object') {
265
+ return value.$Caption;
266
+ }
267
+ if (typeof value !== 'string' && value && this.UlvMainCtrlr && this.UlvMainCtrlr.Dd) {
268
+ const view = this.UlvMainCtrlr.Dd.Setting.View;
269
+ let colName = '$Caption';
270
+ if (view.Columns) {
271
+ const firstCol = view.Columns.find((c) => !c.Name.startsWith('$') && c.Name !== 'Id');
272
+ colName = firstCol?.Name ? firstCol.Name : '$Caption';
273
+ }
274
+ return this._bbbPipe.transform(value);
275
+ }
276
+ }
277
+ _setComboText(value) {
278
+ // if (value === null || typeof value === 'undefined') {
279
+ // this._valueMo = null;
280
+ //this.fdComboRef.inputTextValue = '';
281
+ //this.fdComboRef._cdRef.detectChanges();
282
+ // }
283
+ const fdComboRef = this.fdComboRef;
284
+ const inputText = fdComboRef?.inputTextValue;
285
+ if (fdComboRef && value != inputText) {
286
+ // const UlvMainCtrlr = this.UlvMainCtrlr;
287
+ // if (UlvMainCtrlr && UlvMainCtrlr.Dd) {
288
+ // const view = UlvMainCtrlr.Dd.Setting.View;
289
+ // let colName = '$Caption';
290
+ // if (view.Columns) {
291
+ // const firstCol = view.Columns.find((c) => !c.Name.startsWith('$') && c.Name !== 'Id');
292
+ // colName = firstCol?.Name ? firstCol.Name : '$Caption';
293
+ // }
294
+ // value = this.getMoValueCaption(this._valueMo, colName, value);
295
+ // }
296
+ fdComboRef.inputText = value ? this._bbbPipe.transform(value) + '' : '';
297
+ this._cdr.detectChanges();
298
+ }
299
+ }
300
+ _openPopupFormSelection() {
301
+ this.isOpenSelectionDialog = true;
302
+ this.UlvUi.viewerControl.ShowOkCancelButtons = true; // this is useful to ulv manage toolbar buttons.for example move in tree does not shown
303
+ this.formSelectionDialog = BarsaApi.Bw.UlvFormMultiSelect.Show(this.context, {
304
+ ulv1: this.UlvUi,
305
+ title: this._bbbPipe.transform('Select'),
306
+ IsLoaded: true
307
+ });
308
+ setTimeout(() => {
309
+ this.isOpenSelectionDialog = false;
310
+ }, 500);
311
+ return of(true);
312
+ }
313
+ _filterSmartChange(value) {
314
+ let canRequest = (this.ulvAdapter || this.UlvUi) && value !== this.value;
315
+ // if (canRequest) {
316
+ // const molist: MetaobjectDataModel[] = BarsaApi.Common.Util.TryGetValue(
317
+ // this.ulvAdapter,
318
+ // 'Setting.Data.MoDataList',
319
+ // []
320
+ // );
321
+ // if (!molist) {
322
+ // return true;
323
+ // }
324
+ // const colName = this.getFirstColumnName();
325
+ // const findMo = molist.find((mo) => {
326
+ // const caption = this.getMoValueCaption(mo, colName, mo.$Caption);
327
+ // return caption === value;
328
+ // });
329
+ // if (findMo) {
330
+ // canRequest = false;
331
+ // //this._fireValueChange(findMo);
332
+ // }
333
+ // }
334
+ return canRequest;
335
+ }
336
+ _setColumns() {
337
+ const ulvAdapter = this.ulvAdapter;
338
+ const view = ulvAdapter?.Setting?.View;
339
+ if (view && view.Columns?.length && this.allColumns.length === 0) {
340
+ this.allColumns = view.Columns.filter((c) => Number(c.MetaFieldTypeId) > 0);
341
+ }
342
+ }
343
+ _focus() {
344
+ this._triggerClick('Normal');
345
+ this._setColumns();
346
+ }
347
+ _raiseSmartChange(value) {
348
+ this.smartChange.next(value);
349
+ }
350
+ _triggerClick(eventName, value = null) {
351
+ this.context.fireEvent('TriggerClick', this.context, eventName, value);
352
+ }
353
+ _raiseValueChanged(caption) {
354
+ const inputValue = caption;
355
+ const molist = BarsaApi.Common.Util.TryGetValue(this.ulvAdapter, 'Setting.Data.MoDataList', []);
356
+ if (!molist || molist.length === 0) {
357
+ return;
358
+ }
359
+ //const colName = this.getFirstColumnName();
360
+ const mo = molist.find((c) => c.$Caption === inputValue);
361
+ if (!mo) {
362
+ return;
363
+ }
364
+ molist.forEach((c) => (c.$IsChecked = false));
365
+ this._fireValueChange(mo);
366
+ }
367
+ _fireValueChange(mo) {
368
+ this.value = mo;
369
+ mo.$IsChecked = true;
370
+ this._setValueText(this.value);
371
+ // this._setComboText(mo.$Caption);
372
+ // this._cdr.detectChanges();
373
+ if (this.UlvUi) {
374
+ this.UlvUi.viewerControl.fireEvent('rowclick', this.UlvUi, 0, mo);
375
+ }
376
+ else if (this.ulvAdapter) {
377
+ this.ulvAdapter.ViewerAdapter.fireEvent(BarsaApi.Ul.UlvMainCtrlr.EventEnum.ItemClick, this.ulvAdapter.ViewerAdapter);
378
+ }
379
+ // this._triggerClick('ItemSelect', this.value);
380
+ }
381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiMoInfoUlvComboComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
382
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiMoInfoUlvComboComponent, selector: "bsu-ui-mo-info-ulv-combo", inputs: { ulvAdapter: "ulvAdapter", Control: "Control", UlvMainCtrlr: "UlvMainCtrlr", UlvUi: "UlvUi", IsExpanded: "IsExpanded", Collapse: "Collapse", Expand: "Expand", on: "on", Focus: "Focus", SetUlvAdapter: "SetUlvAdapter", IsUiCreated: "IsUiCreated", Mask: "Mask", hide: "hide", show: "show", Unmask: "Unmask", getRawValue: "getRawValue" }, host: { listeners: { "keydown": "onKeyDown($event)", "keydown.alt": "onAlt($event)" } }, viewQueries: [{ propertyName: "fdComboRef", first: true, predicate: ComboboxComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\r\n *ngTemplateOutlet=\"\r\n comboTemplate;\r\n context: {\r\n $implicit:\r\n (loading$ | async) === true\r\n | moInfoUlvMoList\r\n : isDataLoadedFirstTime\r\n : ulvAdapter?.Setting?.Data?.MoDataList\r\n : UlvUi?.Setting?.Data?.MoDataList\r\n : ulvAdapter?.Setting?.Data?.Paging\r\n : UlvUi?.Setting?.Data?.Paging,\r\n deviceSize: deviceSize$ | async,\r\n disableOrReadonly: disableOrReadonly$ | async,\r\n disable: disable$ | async,\r\n readonly: readonly$ | async,\r\n isSearch: context._showPopup || context._showDropDown === false\r\n }\r\n \"\r\n>\r\n</ng-container>\r\n\r\n<ng-template #btnsTpl let-disableOrReadonly=\"disableOrReadonly\">\r\n <div class=\"extra-buttons fd-input-group fd-input-group--control\">\r\n @if (hasValue && disableOrReadonly !== true) {\r\n <span class=\"fd-input-group__addon--button combo-popup-btn\" fd-input-group-addon>\r\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\r\n </span>\r\n } @if (!hasValue && disableOrReadonly !== true && Setting.ShowNewButton) {\r\n <span fd-input-group-addon class=\"fd-input-group__addon--button combo-popup-btn\">\r\n <button fd-button fdType=\"transparent\" glyph=\"add\" (click)=\"onNew()\"></button>\r\n </span>\r\n } @if (hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType !== 'Hide') {\r\n <span fd-input-group-addon class=\"fd-input-group__addon--button combo-popup-btn\">\r\n <button fd-button fdType=\"transparent\" glyph=\"edit\" (click)=\"onEdit()\"></button>\r\n </span>\r\n } @if (context._showPopup && !value && disableOrReadonly !== true) {\r\n <span fd-input-group-addon class=\"fd-input-group__addon--button combo-popup-btn\">\r\n <button fd-button fdType=\"transparent\" glyph=\"search\" (click)=\"onSearch()\"></button>\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template\r\n #comboTemplate\r\n let-moDataList\r\n let-deviceSize=\"deviceSize\"\r\n let-disableOrReadonly=\"disableOrReadonly\"\r\n let-disable=\"disable\"\r\n let-readonly=\"readonly\"\r\n let-isSearch=\"isSearch\"\r\n>\r\n <div class=\"simple-combo-wrapper\">\r\n <fd-combobox\r\n #fdCombobox\r\n class=\"combo-mo-ulv\"\r\n [class.canAdd]=\"!hasValue && disableOrReadonly !== true && Setting.ShowNewButton\"\r\n [class.canEdit]=\"hasValue && disableOrReadonly !== true\"\r\n [class.disableorreadonly]=\"disableOrReadonly === true\"\r\n [comboboxId]=\"comboboxId\"\r\n [class.has-Value]=\"hasValue\"\r\n [placeholder]=\"'Select' | bbbTranslate\"\r\n [mobile]=\"deviceSize === 's'\"\r\n [mobileConfig]=\"mobileConfig\"\r\n [fillOnSelect]=\"true\"\r\n [readOnly]=\"readonly === true ? true : false\"\r\n [disabled]=\"disable === true ? true : false\"\r\n [dropdownValues]=\"moDataList\"\r\n [filterFn]=\"customFilter\"\r\n [openOnKeyboardEvent]=\"true\"\r\n [byline]=\"allColumns.length > 0\"\r\n [isSearch]=\"false\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [displayFn]=\"displayFunc\"\r\n [showDropdownButton]=\"context._showDropDown !== false && disableOrReadonly !== true\"\r\n (itemClicked)=\"onItemClick($event, moDataList)\"\r\n (inputTextChange)=\"onInputChange($event)\"\r\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\r\n >\r\n </fd-combobox>\r\n <ng-container\r\n *ngTemplateOutlet=\"btnsTpl; context: { disableOrReadonly: this.disableOrReadonly }\"\r\n ></ng-container>\r\n </div>\r\n <ng-template #itemTemplate let-item>\r\n @if (item.$isLoading) {\r\n <div fd-list-content style=\"width: 100%; height: 20px\">\r\n <bsu-mask [size]=\"'s'\" [top]=\"'10px'\"></bsu-mask>\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"item.$LoadMore ? loadMoreButton : showItem; context: { ulv: ulvAdapter || UlvUi }\"\r\n >\r\n </ng-container>\r\n }\r\n <ng-template #loadMoreButton let-ulv=\"ulv\">\r\n @if (ulv) {\r\n <bsu-ulv-paging\r\n (click)=\"onPagingClick($event)\"\r\n (pageChange)=\"onPageChange($event)\"\r\n [pagingSetting]=\"ulv.Setting.Data.Paging\"\r\n >\r\n </bsu-ulv-paging>\r\n }\r\n <!-- <button\r\n style=\"width: 100%\"\r\n *ngIf=\"ulv && ulv.Setting.Data.Paging.Page + 1 < ulv.Setting.Data.Paging.TotalPages\"\r\n fd-button\r\n (click)=\"onPageChange2(ulv.Setting.Data.Paging, $event)\"\r\n [label]=\"'More' | bbbTranslate\"\r\n ></button> -->\r\n </ng-template>\r\n <ng-template #showItem>\r\n @if (allColumns?.length && !item.isEmpty) { @if (!item.$__IsLast) {\r\n <div class=\"moinfoulv devider\"></div>\r\n } @if (item.$Icon) {\r\n <span fd-list-thumbnail><fd-icon [glyph]=\"item.$Icon\"></fd-icon></span>\r\n }\r\n <div fd-list-content class=\"moinfoulv hasColumns\">\r\n <div fd-list-title class=\"title\">{{ allColumns[0].Alias | rval: item:allColumns:true }}</div>\r\n @if (allColumns[1]) {\r\n <div fd-list-byline class=\"byline\">\r\n {{ allColumns[1].Alias | rval: item:allColumns:true }}\r\n </div>\r\n }\r\n <div style=\"display: flex; column-gap: 8px; flex-wrap: wrap\">\r\n @for (column of allColumns; track column; let index = $index) { @if (index > 1) { @if (column.Alias\r\n | rval: item:allColumns:true; as value) {\r\n <span> {{ column.Alias }}:{{ value }}</span>\r\n } } }\r\n </div>\r\n </div>\r\n } @else {\r\n <span fd-list-title [class.list-empty-item]=\"item.isEmpty\"\r\n >{{ item.isEmpty ? ('NoData' | bbbTranslate) : (item.$MoCaption || item.$Caption | bbbTranslate) }}\r\n </span>\r\n }\r\n </ng-template>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [":host{display:block}.combo-mo-ulv{width:100%}.combo-mo-ulv ::ng-deep .fd-popover-custom{width:100%}.fd-input-group{min-width:fit-content}.simple-combo-wrapper{display:flex;align-items:center;position:relative}.simple-combo-wrapper ::ng-deep .combo-mo-ulv[class*=has-]:not(.disableorreadonly) .fd-input-group,.simple-combo-wrapper ::ng-deep .combo-mo-ulv.canAdd:not(.disableorreadonly) .fd-input-group,.simple-combo-wrapper ::ng-deep .combo-mo-ulv.canEdit:not(.disableorreadonly) .fd-input-group{border-left:none;border-bottom-left-radius:unset;border-top-left-radius:unset}.combo-wrapper{display:flex;align-items:center;border:var(--sapField_BorderWidth, .0625rem) solid var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .125rem)}::ng-deep .combo-popup-btn{border:none;background:transparent}::ng-deep .combo-popup-btn button{border-color:transparent!important;border:none}::ng-deep .fd-combobox-count-list-results{display:none}.extra-buttons{width:auto;border-right:none;border-left:none;margin:0}.extra-buttons>span{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.MobileDirective, selector: "[mobile]" }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.ComboboxComponent, selector: "fd-combobox", inputs: ["comboboxId", "inputId", "ariaLabel", "ariaLabelledBy", "required", "dropdownValues", "filterFn", "disabled", "placeholder", "isSearch", "glyph", "glyphFont", "showClearButton", "triggers", "closeOnOutsideClick", "openOnKeyboardEvent", "state", "itemTemplate", "groupFn", "maxHeight", "width", "searchFn", "highlighting", "closeOnSelect", "fillOnSelect", "autoComplete", "fillControlMode", "communicateByObject", "displayFn", "buttonFocusable", "clearButtonFocusable", "readOnly", "mobile", "mobileConfig", "showDropdownButton", "includes", "title", "byline", "tabOutStrategy"], outputs: ["itemClicked", "openChange", "inputTextChange"] }, { kind: "component", type: i5.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: i6.InputGroupAddOnDirective, selector: "[fdInputGroupAddon], [fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i7.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i7.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i7.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "component", type: i8.UlvPagingComponent, selector: "bsu-ulv-paging", inputs: ["pagingSetting"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i9.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.MoInfoUlvMoListPipe, name: "moInfoUlvMoList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
383
+ }
384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiMoInfoUlvComboComponent, decorators: [{
385
+ type: Component,
386
+ args: [{ selector: 'bsu-ui-mo-info-ulv-combo', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-container\r\n *ngTemplateOutlet=\"\r\n comboTemplate;\r\n context: {\r\n $implicit:\r\n (loading$ | async) === true\r\n | moInfoUlvMoList\r\n : isDataLoadedFirstTime\r\n : ulvAdapter?.Setting?.Data?.MoDataList\r\n : UlvUi?.Setting?.Data?.MoDataList\r\n : ulvAdapter?.Setting?.Data?.Paging\r\n : UlvUi?.Setting?.Data?.Paging,\r\n deviceSize: deviceSize$ | async,\r\n disableOrReadonly: disableOrReadonly$ | async,\r\n disable: disable$ | async,\r\n readonly: readonly$ | async,\r\n isSearch: context._showPopup || context._showDropDown === false\r\n }\r\n \"\r\n>\r\n</ng-container>\r\n\r\n<ng-template #btnsTpl let-disableOrReadonly=\"disableOrReadonly\">\r\n <div class=\"extra-buttons fd-input-group fd-input-group--control\">\r\n @if (hasValue && disableOrReadonly !== true) {\r\n <span class=\"fd-input-group__addon--button combo-popup-btn\" fd-input-group-addon>\r\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\r\n </span>\r\n } @if (!hasValue && disableOrReadonly !== true && Setting.ShowNewButton) {\r\n <span fd-input-group-addon class=\"fd-input-group__addon--button combo-popup-btn\">\r\n <button fd-button fdType=\"transparent\" glyph=\"add\" (click)=\"onNew()\"></button>\r\n </span>\r\n } @if (hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType !== 'Hide') {\r\n <span fd-input-group-addon class=\"fd-input-group__addon--button combo-popup-btn\">\r\n <button fd-button fdType=\"transparent\" glyph=\"edit\" (click)=\"onEdit()\"></button>\r\n </span>\r\n } @if (context._showPopup && !value && disableOrReadonly !== true) {\r\n <span fd-input-group-addon class=\"fd-input-group__addon--button combo-popup-btn\">\r\n <button fd-button fdType=\"transparent\" glyph=\"search\" (click)=\"onSearch()\"></button>\r\n </span>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template\r\n #comboTemplate\r\n let-moDataList\r\n let-deviceSize=\"deviceSize\"\r\n let-disableOrReadonly=\"disableOrReadonly\"\r\n let-disable=\"disable\"\r\n let-readonly=\"readonly\"\r\n let-isSearch=\"isSearch\"\r\n>\r\n <div class=\"simple-combo-wrapper\">\r\n <fd-combobox\r\n #fdCombobox\r\n class=\"combo-mo-ulv\"\r\n [class.canAdd]=\"!hasValue && disableOrReadonly !== true && Setting.ShowNewButton\"\r\n [class.canEdit]=\"hasValue && disableOrReadonly !== true\"\r\n [class.disableorreadonly]=\"disableOrReadonly === true\"\r\n [comboboxId]=\"comboboxId\"\r\n [class.has-Value]=\"hasValue\"\r\n [placeholder]=\"'Select' | bbbTranslate\"\r\n [mobile]=\"deviceSize === 's'\"\r\n [mobileConfig]=\"mobileConfig\"\r\n [fillOnSelect]=\"true\"\r\n [readOnly]=\"readonly === true ? true : false\"\r\n [disabled]=\"disable === true ? true : false\"\r\n [dropdownValues]=\"moDataList\"\r\n [filterFn]=\"customFilter\"\r\n [openOnKeyboardEvent]=\"true\"\r\n [byline]=\"allColumns.length > 0\"\r\n [isSearch]=\"false\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [displayFn]=\"displayFunc\"\r\n [showDropdownButton]=\"context._showDropDown !== false && disableOrReadonly !== true\"\r\n (itemClicked)=\"onItemClick($event, moDataList)\"\r\n (inputTextChange)=\"onInputChange($event)\"\r\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\r\n >\r\n </fd-combobox>\r\n <ng-container\r\n *ngTemplateOutlet=\"btnsTpl; context: { disableOrReadonly: this.disableOrReadonly }\"\r\n ></ng-container>\r\n </div>\r\n <ng-template #itemTemplate let-item>\r\n @if (item.$isLoading) {\r\n <div fd-list-content style=\"width: 100%; height: 20px\">\r\n <bsu-mask [size]=\"'s'\" [top]=\"'10px'\"></bsu-mask>\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"item.$LoadMore ? loadMoreButton : showItem; context: { ulv: ulvAdapter || UlvUi }\"\r\n >\r\n </ng-container>\r\n }\r\n <ng-template #loadMoreButton let-ulv=\"ulv\">\r\n @if (ulv) {\r\n <bsu-ulv-paging\r\n (click)=\"onPagingClick($event)\"\r\n (pageChange)=\"onPageChange($event)\"\r\n [pagingSetting]=\"ulv.Setting.Data.Paging\"\r\n >\r\n </bsu-ulv-paging>\r\n }\r\n <!-- <button\r\n style=\"width: 100%\"\r\n *ngIf=\"ulv && ulv.Setting.Data.Paging.Page + 1 < ulv.Setting.Data.Paging.TotalPages\"\r\n fd-button\r\n (click)=\"onPageChange2(ulv.Setting.Data.Paging, $event)\"\r\n [label]=\"'More' | bbbTranslate\"\r\n ></button> -->\r\n </ng-template>\r\n <ng-template #showItem>\r\n @if (allColumns?.length && !item.isEmpty) { @if (!item.$__IsLast) {\r\n <div class=\"moinfoulv devider\"></div>\r\n } @if (item.$Icon) {\r\n <span fd-list-thumbnail><fd-icon [glyph]=\"item.$Icon\"></fd-icon></span>\r\n }\r\n <div fd-list-content class=\"moinfoulv hasColumns\">\r\n <div fd-list-title class=\"title\">{{ allColumns[0].Alias | rval: item:allColumns:true }}</div>\r\n @if (allColumns[1]) {\r\n <div fd-list-byline class=\"byline\">\r\n {{ allColumns[1].Alias | rval: item:allColumns:true }}\r\n </div>\r\n }\r\n <div style=\"display: flex; column-gap: 8px; flex-wrap: wrap\">\r\n @for (column of allColumns; track column; let index = $index) { @if (index > 1) { @if (column.Alias\r\n | rval: item:allColumns:true; as value) {\r\n <span> {{ column.Alias }}:{{ value }}</span>\r\n } } }\r\n </div>\r\n </div>\r\n } @else {\r\n <span fd-list-title [class.list-empty-item]=\"item.isEmpty\"\r\n >{{ item.isEmpty ? ('NoData' | bbbTranslate) : (item.$MoCaption || item.$Caption | bbbTranslate) }}\r\n </span>\r\n }\r\n </ng-template>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [":host{display:block}.combo-mo-ulv{width:100%}.combo-mo-ulv ::ng-deep .fd-popover-custom{width:100%}.fd-input-group{min-width:fit-content}.simple-combo-wrapper{display:flex;align-items:center;position:relative}.simple-combo-wrapper ::ng-deep .combo-mo-ulv[class*=has-]:not(.disableorreadonly) .fd-input-group,.simple-combo-wrapper ::ng-deep .combo-mo-ulv.canAdd:not(.disableorreadonly) .fd-input-group,.simple-combo-wrapper ::ng-deep .combo-mo-ulv.canEdit:not(.disableorreadonly) .fd-input-group{border-left:none;border-bottom-left-radius:unset;border-top-left-radius:unset}.combo-wrapper{display:flex;align-items:center;border:var(--sapField_BorderWidth, .0625rem) solid var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .125rem)}::ng-deep .combo-popup-btn{border:none;background:transparent}::ng-deep .combo-popup-btn button{border-color:transparent!important;border:none}::ng-deep .fd-combobox-count-list-results{display:none}.extra-buttons{width:auto;border-right:none;border-left:none;margin:0}.extra-buttons>span{overflow:hidden}\n"] }]
387
+ }], propDecorators: { ulvAdapter: [{
388
+ type: Input
389
+ }], Control: [{
390
+ type: Input
391
+ }], UlvMainCtrlr: [{
392
+ type: Input
393
+ }], fdComboRef: [{
394
+ type: ViewChild,
395
+ args: [ComboboxComponent]
396
+ }], UlvUi: [{
397
+ type: Input
398
+ }], onKeyDown: [{
399
+ type: HostListener,
400
+ args: ['keydown', ['$event']]
401
+ }], onAlt: [{
402
+ type: HostListener,
403
+ args: ['keydown.alt', ['$event']]
404
+ }], IsExpanded: [{
405
+ type: Input
406
+ }], Collapse: [{
407
+ type: Input
408
+ }], Expand: [{
409
+ type: Input
410
+ }], on: [{
411
+ type: Input
412
+ }], Focus: [{
413
+ type: Input
414
+ }], SetUlvAdapter: [{
415
+ type: Input
416
+ }], IsUiCreated: [{
417
+ type: Input
418
+ }], Mask: [{
419
+ type: Input
420
+ }], hide: [{
421
+ type: Input
422
+ }], show: [{
423
+ type: Input
424
+ }], Unmask: [{
425
+ type: Input
426
+ }], getRawValue: [{
427
+ type: Input
428
+ }] } });
429
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFHMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFFbkYsT0FBTyxFQUNILGtCQUFrQixFQUNsQixRQUFRLEVBTVIsa0JBQWtCLEVBR2xCLFdBQVcsRUFFZCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7OztBQVM5QixNQUFNLE9BQU8seUJBQTBCLFNBQVEsa0JBQWtCO0lBUGpFOztRQXNDSSxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFhcEMsZUFBVSxHQUF1QixFQUFFLENBQUM7UUFHNUIsa0NBQTZCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQXlI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RFYsS0FBSztnQkFNTixJQUFJO3NCQURILEtBQUs7Z0JBTU4sSUFBSTtzQkFESCxLQUFLO2dCQVFOLElBQUk7c0JBREgsS0FBSztnQkFZTixNQUFNO3NCQURMLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIElucHV0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBBZnRlclZpZXdJbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFwLCB0YWtlVW50aWwsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tYm9ib3hDb21wb25lbnQsIENvbWJvYm94SXRlbSwgRGlhbG9nUmVmIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBGaWVsZEJhc2VDb21wb25lbnQsXHJcbiAgICBCYXJzYUFwaSxcclxuICAgIFJlcG9ydEV4dHJhSW5mbyxcclxuICAgIE1vRm9yUmVwb3J0TW9kZWwsXHJcbiAgICBDbGFzc05hbWVzTW9kZWwsXHJcbiAgICBWaWV3VHlwZXMsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUHJldmVudERlZmF1bEV2ZW50LFxyXG4gICAgUGFnaW5nU2V0dGluZyxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBnZXRVbmlxdWVJZCxcclxuICAgIEdyaWRWaWV3XHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1tby1pbmZvLXVsdi1jb21ibycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpTW9JbmZvVWx2Q29tYm9Db21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gICAgQElucHV0KCkgdWx2QWRhcHRlcjoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICAgICAgICBTZXR0aW5nOiB7XHJcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICAgICAgICAgICAgVmlldzogVmlld1R5cGVzO1xyXG4gICAgICAgICAgICBDbGFzc05hbWVzOiBDbGFzc05hbWVzTW9kZWw7XHJcbiAgICAgICAgICAgIEV4dHJhOiBSZXBvcnRFeHRyYUluZm87XHJcbiAgICAgICAgICAgIERhdGE6IE1vRm9yUmVwb3J0TW9kZWw7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICBASW5wdXQoKSBDb250cm9sOiBhbnk7XHJcbiAgICBASW5wdXQoKSBVbHZNYWluQ3RybHI6IGFueTtcclxuICAgIEBWaWV3Q2hpbGQoQ29tYm9ib3hDb21wb25lbnQpIGZkQ29tYm9SZWY6IENvbWJvYm94Q29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBVbHZVaSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5fVWx2VWkgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUudmlld2VyQ29udHJvbC5vbih7XHJcbiAgICAgICAgICAgICAgICBNb0RhdGFMaXN0Q2hhbmdlZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBVbHZVaSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9VbHZVaTtcclxuICAgIH1cclxuXHJcbiAgICBfVWx2VWk6IGFueTtcclxuICAgIGlzRXhwYW5kOiBib29sZWFuO1xyXG4gICAgc21hcnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHRpY2tSZWY6IGFueTtcclxuICAgIGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlzRmlyc3RMb2FkOiBib29sZWFuO1xyXG4gICAgcG9wb3ZlckVsZW1lbnQ6IGFueTtcclxuICAgIHJhd1ZhbHVlOiBzdHJpbmc7XHJcbiAgICBmb3JtU2VsZWN0aW9uRGlhbG9nOiBEaWFsb2dSZWY7XHJcbiAgICBpc09wZW5TZWxlY3Rpb25EaWFsb2c6IGJvb2xlYW47XHJcbiAgICBoYXNSZXBvcnQ6IGFueTtcclxuICAgIG9yaWdpbmFsVmFsdWU6IGFueTtcclxuICAgIGlzRGF0YUxvYWRlZEZpcnN0VGltZTogYm9vbGVhbjtcclxuICAgIHZhbHVlVGV4dDogc3RyaW5nO1xyXG4gICAgYWxsQ29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdID0gW107XHJcbiAgICBoYXNWYWx1ZTogYm9vbGVhbjtcclxuICAgIGNvbWJvYm94SWQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb25Tb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfY2xvc2VEaWFsb2dTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfbG9hZGluZ1NvdXJjZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5RG93bihlKTogdm9pZCB7XHJcbiAgICAgICAgZSA9IG5ldyBCYXJzYUFwaS5FeHQuRXZlbnRPYmplY3RJbXBsKGUpO1xyXG4gICAgICAgIGNvbnN0IGsgPSBlLmdldEtleSgpO1xyXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IGUuRU5URVIgfHwgayA9PT0gQmFyc2FBcGkuRXh0LkV2ZW50T2JqZWN0LlRBQikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdrZXlkb3duJywgdGhpcy5jb250ZXh0LCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFsdCcsIFsnJGV2ZW50J10pXHJcbiAgICBvbkFsdChlKTogdm9pZCB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbWJvYm94SWQgPSBnZXRVbmlxdWVJZCgzKTtcclxuICAgICAgICB0aGlzLl9jaGVja0hhc1ZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLl9sb2FkaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmckLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGVkRmlyc3RUaW1lID1cclxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVsdkFkYXB0ZXI/LlNldHRpbmc/LkRhdGE/Lk1vRGF0YUxpc3QgPT09ICdvYmplY3QnIHx8XHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5VbHZVaT8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdCA9PT0gJ29iamVjdCc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zbWFydENoYW5nZVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyU21hcnRDaGFuZ2UodmFsdWUpKSxcclxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHZhbHVlKSA9PiAodGhpcy5yYXdWYWx1ZSA9IHZhbHVlKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnU21hcnRDaGFuZ2UnLCB0aGlzLmNvbnRleHQsIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fb3BlblBvcHVwRm9ybVNlbGVjdGlvblNvdXJjZVxyXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fY2xvc2VEaWFsb2dTb3VyY2UpLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb24oKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaGFzUmVwb3J0ID0gdGhpcy5TZXR0aW5nLlJlbGF0aW9uVmlld1R5cGUgPT09ICdSZXBvcnRWaWV3JyB8fCB0aGlzLlNldHRpbmcuUmVwb3J0TmFtZSA9PT0gJ0hpZXJhcmNoaWNhbCc7XHJcbiAgICAgICAgdGhpcy5Db250cm9sID0gdGhpcztcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25QYWdpbmdDbGljayhlKTogdm9pZCB7XHJcbiAgICAgICAgUHJldmVudERlZmF1bEV2ZW50KGUpO1xyXG4gICAgfVxyXG4gICAgb25QYWdlQ2hhbmdlKGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2UubmV4dCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5VbHZVaSkge1xyXG4gICAgICAgICAgICB0aGlzLlVsdlVpLmZpcmVFdmVudCgnUGFnZUNoYW5nZScsIHRoaXMuVWx2VWksIGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudWx2QWRhcHRlci5EYXRhQ3RybHIuTW92ZVRvUGFnZShlLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2UubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbkl0ZW1DbGljayhlOiBDb21ib2JveEl0ZW0sIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUl0ZW1TZWxlY3QobW9EYXRhTGlzdCwgZS5pdGVtKTtcclxuICAgIH1cclxuICAgIG9uUGFnZUNoYW5nZTIocGFnZVNldHRpbmc6IFBhZ2luZ1NldHRpbmcsIGUpOiB2b2lkIHtcclxuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVsdkFkYXB0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5VbHZVaS5maXJlRXZlbnQoJ1BhZ2VDaGFuZ2UnLCB0aGlzLlVsdlVpLCBwYWdlU2V0dGluZy5QYWdlICsgMSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHVsdkFkYXB0ZXIgPSB0aGlzLnVsdkFkYXB0ZXI7XHJcbiAgICAgICAgY29uc3QgdGVtcDEgPSB1bHZBZGFwdGVyLlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0O1xyXG4gICAgICAgIHRlbXAxLnNwbGljZSh0ZW1wMS5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICBjb25zdCBtb0RhdGFMaXN0T2xkID0gWy4uLnRlbXAxXTtcclxuICAgICAgICBtb0RhdGFMaXN0T2xkLmZvckVhY2goKGMpID0+IChjLiRfX0lzTGFzdCA9IGZhbHNlKSk7XHJcbiAgICAgICAgdGhpcy51bHZBZGFwdGVyLkRhdGFDdHJsci5Nb3ZlVG9QYWdlKHBhZ2VTZXR0aW5nLlBhZ2UgKyAxLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IHVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLk1vRGF0YUxpc3Q7XHJcbiAgICAgICAgICAgIG1vRGF0YUxpc3Quc3BsaWNlKDAsIDAsIC4uLm1vRGF0YUxpc3RPbGQpO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25PcGVuQ2hhbmdlKGZkQ29tYm9ib3gsIGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmIChpc09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9jdXMoKTtcclxuICAgICAgICAgICAgLy8gZmRDb21ib2JveC5vcGVuID0gZmFsc2U7IC8vIGl0IGNsb3NlIHBvcHVwIHdoZW4gY2xpY2sgb24gZHJvcGRvd24gYnV0dG9uIGluIGNvbXBvbmVudFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IHRoaXMuZmRDb21ib1JlZj8uaW5wdXRUZXh0VmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSAmJiBpbnB1dFRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JhaXNlU21hcnRDaGFuZ2UoaW5wdXRUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uSW5wdXRDaGFuZ2UoZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JhaXNlU21hcnRDaGFuZ2UoZSk7XHJcbiAgICB9XHJcbiAgICBvbklucHV0Q2hhbmdlMihlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcmFpc2VTbWFydENoYW5nZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvblZhbHVlQ2hhbmdlKGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yYWlzZVZhbHVlQ2hhbmdlZChlLnRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbk5ldygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ05ldycpO1xyXG4gICAgfVxyXG4gICAgb25DbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ0RlbGV0ZScpO1xyXG4gICAgfVxyXG4gICAgb25FZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnRWRpdCcpO1xyXG4gICAgfVxyXG4gICAgb25TZWFyY2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdQb3B1cCcpO1xyXG4gICAgfVxyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIGN1c3RvbUZpbHRlcihjb250ZW50OiBhbnlbXSwgc2VhcmNoVGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlGdW5jID0gKG9iajogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4ge1xyXG4gICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMuZ2V0Rmlyc3RDb2x1bW5OYW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKG9iaiwgY29sTmFtZSwgb2JqLiRDYXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfTtcclxuICAgIGdldE1vVmFsdWVDYXB0aW9uKHZhbHVlTW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLCBjb2xOYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodmFsdWVNbyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2FwdGlvblZhbHVlTW87XHJcbiAgICAgICAgY29uc3QgbW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLFxyXG4gICAgICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZm91bmRlZE1vID0gbW9saXN0LmZpbmQoKGMpID0+IGMuSWQgPT09IHZhbHVlTW8uSWQpO1xyXG4gICAgICAgIGlmIChjb2xOYW1lICYmIGZvdW5kZWRNbyAmJiBmb3VuZGVkTW9bY29sTmFtZV0pIHtcclxuICAgICAgICAgICAgaWYgKGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ10pIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWx1ZU1vID0gZm91bmRlZE1vW2NvbE5hbWUgKyAnJENhcHRpb24nXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZGVkTW9bY29sTmFtZV0uJENhcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWx1ZU1vID0gZm91bmRlZE1vW2NvbE5hbWVdLiRDYXB0aW9uO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbHVlTW8gPSBmb3VuZGVkTW9bY29sTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKGNhcHRpb25WYWx1ZU1vIHx8IGRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBnZXRGaXJzdENvbHVtbk5hbWUoKSB7XHJcbiAgICAgICAgbGV0IGNvbE5hbWUgPSAnJENhcHRpb24nO1xyXG4gICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJscj8uRGQ/LlNldHRpbmc/LlZpZXcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldy5Db2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbCA9IHRoaXMuVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldy5Db2x1bW5zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+ICFjLk5hbWUuc3RhcnRzV2l0aCgnJCcpICYmIGMuTmFtZSAhPT0gJ0lkJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbD8uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbC5OYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2xOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICBASW5wdXQoKSBJc0V4cGFuZGVkID0gKHR5cGUpID0+IHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ0RkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZkQ29tYm9SZWY/LnBvcG92ZXJDb21wb25lbnQ/LmlzT3BlbjtcclxuICAgIH07XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb21ib1JlZi5uYXRpdmVFbGVtZW50LnJlc3BvbnNpdmVQb3BvdmVyLmlzT3BlbigpO1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIENvbGxhcHNlID0gKHR5cGUpID0+IHt9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIEV4cGFuZCA9ICh0eXBlKSA9PiB7XHJcbiAgICAgICAgdGhpcy51bHZBZGFwdGVyID0gdGhpcy5VbHZNYWluQ3RybHJbdHlwZV07XHJcbiAgICB9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIG9uID0gKCkgPT4ge307XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQElucHV0KCkgRm9jdXMgPSAoKSA9PiB7fTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBTZXRVbHZBZGFwdGVyID0gKHR5cGUsIHVsdkFkYXB0ZXIpID0+IHtcclxuICAgICAgICB0aGlzLnVsdkFkYXB0ZXIgPSB1bHZBZGFwdGVyO1xyXG4gICAgICAgIHRoaXMuX3NldENvbHVtbnMoKTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBJc1VpQ3JlYXRlZCA9ICh0eXBlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIH07XHJcbiAgICBASW5wdXQoKVxyXG4gICAgTWFzayA9ICh0eXBlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KHRydWUpO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICB9O1xyXG4gICAgQElucHV0KClcclxuICAgIGhpZGUgPSAodHlwZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1TZWxlY3Rpb25EaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtU2VsZWN0aW9uRGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICB9O1xyXG4gICAgQElucHV0KClcclxuICAgIHNob3cgPSAodHlwZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLlVsdlVpICYmICF0aGlzLmlzT3BlblNlbGVjdGlvbkRpYWxvZyAmJiB0aGlzLmNvbnRleHQuX3Nob3dQb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vcGVuUG9wdXBGb3JtU2VsZWN0aW9uU291cmNlLm5leHQoKTsgLy8gcmFiZXRlIHRha2kgZ2VuZXJhbCBpbmZvIC5wb3B1cCBiYXogbWlzaG9kIGtlIGJhaWFkIGRyb3Bkb3duIGJhc2hlLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmRDb21ib1JlZiAmJiAodGhpcy5mZENvbWJvUmVmLm9wZW4gPSB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIH07XHJcbiAgICBASW5wdXQoKVxyXG4gICAgVW5tYXNrID0gKHR5cGUpID0+IHtcclxuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICB9O1xyXG4gICAgQElucHV0KClcclxuICAgIGdldFJhd1ZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICB9O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaGFuZGxlSXRlbVNlbGVjdChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgbW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcclxuICAgICAgICB0aGlzLl9maXJlVmFsdWVDaGFuZ2UobW8pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLl9jaGVja0hhc1ZhbHVlKHZhbHVlKTtcclxuICAgICAgICBzdXBlci5fc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NoZWNrSGFzVmFsdWUodmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJyc7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlVGV4dCh2YWx1ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0ID0gdGhpcy5fZ2V0VmFsdWVUZXh0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLl9zZXRDb21ib1RleHQodGhpcy52YWx1ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9nZXRWYWx1ZVRleHQodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuJENhcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIHZhbHVlICYmIHRoaXMuVWx2TWFpbkN0cmxyICYmIHRoaXMuVWx2TWFpbkN0cmxyLkRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLlVsdk1haW5DdHJsci5EZC5TZXR0aW5nLlZpZXc7XHJcbiAgICAgICAgICAgIGxldCBjb2xOYW1lID0gJyRDYXB0aW9uJztcclxuICAgICAgICAgICAgaWYgKHZpZXcuQ29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDb2wgPSB2aWV3LkNvbHVtbnMuZmluZCgoYykgPT4gIWMuTmFtZS5zdGFydHNXaXRoKCckJykgJiYgYy5OYW1lICE9PSAnSWQnKTtcclxuICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbD8uTmFtZSA/IGZpcnN0Q29sLk5hbWUgOiAnJENhcHRpb24nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXRDb21ib1RleHQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gdGhpcy5fdmFsdWVNbyA9IG51bGw7XHJcbiAgICAgICAgLy90aGlzLmZkQ29tYm9SZWYuaW5wdXRUZXh0VmFsdWUgPSAnJztcclxuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBjb25zdCBmZENvbWJvUmVmID0gdGhpcy5mZENvbWJvUmVmO1xyXG4gICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IGZkQ29tYm9SZWY/LmlucHV0VGV4dFZhbHVlO1xyXG4gICAgICAgIGlmIChmZENvbWJvUmVmICYmIHZhbHVlICE9IGlucHV0VGV4dCkge1xyXG4gICAgICAgICAgICAvLyBjb25zdCBVbHZNYWluQ3RybHIgPSB0aGlzLlVsdk1haW5DdHJscjtcclxuICAgICAgICAgICAgLy8gaWYgKFVsdk1haW5DdHJsciAmJiBVbHZNYWluQ3RybHIuRGQpIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvbnN0IHZpZXcgPSBVbHZNYWluQ3RybHIuRGQuU2V0dGluZy5WaWV3O1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IGNvbE5hbWUgPSAnJENhcHRpb24nO1xyXG4gICAgICAgICAgICAvLyAgICAgaWYgKHZpZXcuQ29sdW1ucykge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdmlldy5Db2x1bW5zLmZpbmQoKGMpID0+ICFjLk5hbWUuc3RhcnRzV2l0aCgnJCcpICYmIGMuTmFtZSAhPT0gJ0lkJyk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgY29sTmFtZSA9IGZpcnN0Q29sPy5OYW1lID8gZmlyc3RDb2wuTmFtZSA6ICckQ2FwdGlvbic7XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB2YWx1ZSA9IHRoaXMuZ2V0TW9WYWx1ZUNhcHRpb24odGhpcy5fdmFsdWVNbywgY29sTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGZkQ29tYm9SZWYuaW5wdXRUZXh0ID0gdmFsdWUgPyB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSh2YWx1ZSkgKyAnJyA6ICcnO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfb3BlblBvcHVwRm9ybVNlbGVjdGlvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLmlzT3BlblNlbGVjdGlvbkRpYWxvZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5VbHZVaS52aWV3ZXJDb250cm9sLlNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0cnVlOyAvLyB0aGlzIGlzIHVzZWZ1bCB0byB1bHYgbWFuYWdlIHRvb2xiYXIgYnV0dG9ucy5mb3IgZXhhbXBsZSBtb3ZlIGluIHRyZWUgZG9lcyBub3Qgc2hvd25cclxuICAgICAgICB0aGlzLmZvcm1TZWxlY3Rpb25EaWFsb2cgPSBCYXJzYUFwaS5Cdy5VbHZGb3JtTXVsdGlTZWxlY3QuU2hvdyh0aGlzLmNvbnRleHQsIHtcclxuICAgICAgICAgICAgdWx2MTogdGhpcy5VbHZVaSxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKCdTZWxlY3QnKSxcclxuICAgICAgICAgICAgSXNMb2FkZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc09wZW5TZWxlY3Rpb25EaWFsb2cgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZmlsdGVyU21hcnRDaGFuZ2UodmFsdWUpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgY2FuUmVxdWVzdCA9ICh0aGlzLnVsdkFkYXB0ZXIgfHwgdGhpcy5VbHZVaSkgJiYgdmFsdWUgIT09IHRoaXMudmFsdWU7XHJcbiAgICAgICAgLy8gaWYgKGNhblJlcXVlc3QpIHtcclxuICAgICAgICAvLyAgICAgY29uc3QgbW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcclxuICAgICAgICAvLyAgICAgICAgICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsXHJcbiAgICAgICAgLy8gICAgICAgICBbXVxyXG4gICAgICAgIC8vICAgICApO1xyXG4gICAgICAgIC8vICAgICBpZiAoIW1vbGlzdCkge1xyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMuZ2V0Rmlyc3RDb2x1bW5OYW1lKCk7XHJcblxyXG4gICAgICAgIC8vICAgICBjb25zdCBmaW5kTW8gPSBtb2xpc3QuZmluZCgobW8pID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKG1vLCBjb2xOYW1lLCBtby4kQ2FwdGlvbik7XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gY2FwdGlvbiA9PT0gdmFsdWU7XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgICBpZiAoZmluZE1vKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBjYW5SZXF1ZXN0ID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgICAvL3RoaXMuX2ZpcmVWYWx1ZUNoYW5nZShmaW5kTW8pO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHJldHVybiBjYW5SZXF1ZXN0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXRDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHVsdkFkYXB0ZXIgPSB0aGlzLnVsdkFkYXB0ZXI7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IDxHcmlkVmlldz51bHZBZGFwdGVyPy5TZXR0aW5nPy5WaWV3O1xyXG4gICAgICAgIGlmICh2aWV3ICYmIHZpZXcuQ29sdW1ucz8ubGVuZ3RoICYmIHRoaXMuYWxsQ29sdW1ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGxDb2x1bW5zID0gdmlldy5Db2x1bW5zLmZpbHRlcigoYykgPT4gTnVtYmVyKGMuTWV0YUZpZWxkVHlwZUlkKSA+IDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZm9jdXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdOb3JtYWwnKTtcclxuICAgICAgICB0aGlzLl9zZXRDb2x1bW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9yYWlzZVNtYXJ0Q2hhbmdlKHZhbHVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zbWFydENoYW5nZS5uZXh0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RyaWdnZXJDbGljayhldmVudE5hbWUsIHZhbHVlID0gbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1RyaWdnZXJDbGljaycsIHRoaXMuY29udGV4dCwgZXZlbnROYW1lLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9yYWlzZVZhbHVlQ2hhbmdlZChjYXB0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGNhcHRpb247XHJcbiAgICAgICAgY29uc3QgbW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLFxyXG4gICAgICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFtb2xpc3QgfHwgbW9saXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc3QgY29sTmFtZSA9IHRoaXMuZ2V0Rmlyc3RDb2x1bW5OYW1lKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vID0gbW9saXN0LmZpbmQoKGMpID0+IGMuJENhcHRpb24gPT09IGlucHV0VmFsdWUpO1xyXG4gICAgICAgIGlmICghbW8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb2xpc3QuZm9yRWFjaCgoYykgPT4gKGMuJElzQ2hlY2tlZCA9IGZhbHNlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZpcmVWYWx1ZUNoYW5nZShtbyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2ZpcmVWYWx1ZUNoYW5nZShtbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBtbztcclxuICAgICAgICBtby4kSXNDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9zZXRWYWx1ZVRleHQodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgLy8gdGhpcy5fc2V0Q29tYm9UZXh0KG1vLiRDYXB0aW9uKTtcclxuICAgICAgICAvLyB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLlVsdlVpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVWx2VWkudmlld2VyQ29udHJvbC5maXJlRXZlbnQoJ3Jvd2NsaWNrJywgdGhpcy5VbHZVaSwgMCwgbW8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy51bHZBZGFwdGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlci5WaWV3ZXJBZGFwdGVyLmZpcmVFdmVudChcclxuICAgICAgICAgICAgICAgIEJhcnNhQXBpLlVsLlVsdk1haW5DdHJsci5FdmVudEVudW0uSXRlbUNsaWNrLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLlZpZXdlckFkYXB0ZXJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5fdHJpZ2dlckNsaWNrKCdJdGVtU2VsZWN0JywgdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICBjb21ib1RlbXBsYXRlO1xyXG4gICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgJGltcGxpY2l0OlxyXG4gICAgICAgICAgICAgICAgKGxvYWRpbmckIHwgYXN5bmMpID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICB8IG1vSW5mb1Vsdk1vTGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIDogaXNEYXRhTG9hZGVkRmlyc3RUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgOiB1bHZBZGFwdGVyPy5TZXR0aW5nPy5EYXRhPy5Nb0RhdGFMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgOiBVbHZVaT8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIDogdWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uUGFnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgOiBVbHZVaT8uU2V0dGluZz8uRGF0YT8uUGFnaW5nLFxyXG4gICAgICAgICAgICBkZXZpY2VTaXplOiBkZXZpY2VTaXplJCB8IGFzeW5jLFxyXG4gICAgICAgICAgICBkaXNhYmxlT3JSZWFkb25seTogZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgIGRpc2FibGU6IGRpc2FibGUkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgIHJlYWRvbmx5OiByZWFkb25seSQgfCBhc3luYyxcclxuICAgICAgICAgICAgaXNTZWFyY2g6IGNvbnRleHQuX3Nob3dQb3B1cCB8fCBjb250ZXh0Ll9zaG93RHJvcERvd24gPT09IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgXCJcclxuPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnRuc1RwbCBsZXQtZGlzYWJsZU9yUmVhZG9ubHk9XCJkaXNhYmxlT3JSZWFkb25seVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImV4dHJhLWJ1dHRvbnMgZmQtaW5wdXQtZ3JvdXAgZmQtaW5wdXQtZ3JvdXAtLWNvbnRyb2xcIj5cclxuICAgICAgICBAaWYgKGhhc1ZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvbiBjb21iby1wb3B1cC1idG5cIiBmZC1pbnB1dC1ncm91cC1hZGRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwib25DbGVhcigpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH0gQGlmICghaGFzVmFsdWUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWUgJiYgU2V0dGluZy5TaG93TmV3QnV0dG9uKSB7XHJcbiAgICAgICAgPHNwYW4gZmQtaW5wdXQtZ3JvdXAtYWRkb24gY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvbiBjb21iby1wb3B1cC1idG5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImFkZFwiIChjbGljayk9XCJvbk5ldygpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH0gQGlmIChoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiBTZXR0aW5nLlZpZXdSZWxhdGVkRm9ybVR5cGUgIT09ICdIaWRlJykge1xyXG4gICAgICAgIDxzcGFuIGZkLWlucHV0LWdyb3VwLWFkZG9uIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b24gY29tYm8tcG9wdXAtYnRuXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgZ2x5cGg9XCJlZGl0XCIgKGNsaWNrKT1cIm9uRWRpdCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH0gQGlmIChjb250ZXh0Ll9zaG93UG9wdXAgJiYgIXZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlKSB7XHJcbiAgICAgICAgPHNwYW4gZmQtaW5wdXQtZ3JvdXAtYWRkb24gY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvbiBjb21iby1wb3B1cC1idG5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cInNlYXJjaFwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGVcclxuICAgICNjb21ib1RlbXBsYXRlXHJcbiAgICBsZXQtbW9EYXRhTGlzdFxyXG4gICAgbGV0LWRldmljZVNpemU9XCJkZXZpY2VTaXplXCJcclxuICAgIGxldC1kaXNhYmxlT3JSZWFkb25seT1cImRpc2FibGVPclJlYWRvbmx5XCJcclxuICAgIGxldC1kaXNhYmxlPVwiZGlzYWJsZVwiXHJcbiAgICBsZXQtcmVhZG9ubHk9XCJyZWFkb25seVwiXHJcbiAgICBsZXQtaXNTZWFyY2g9XCJpc1NlYXJjaFwiXHJcbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtY29tYm8td3JhcHBlclwiPlxyXG4gICAgICAgIDxmZC1jb21ib2JveFxyXG4gICAgICAgICAgICAjZmRDb21ib2JveFxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbWJvLW1vLXVsdlwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5jYW5BZGRdPVwiIWhhc1ZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlICYmIFNldHRpbmcuU2hvd05ld0J1dHRvblwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5jYW5FZGl0XT1cImhhc1ZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVvcnJlYWRvbmx5XT1cImRpc2FibGVPclJlYWRvbmx5ID09PSB0cnVlXCJcclxuICAgICAgICAgICAgW2NvbWJvYm94SWRdPVwiY29tYm9ib3hJZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5oYXMtVmFsdWVdPVwiaGFzVmFsdWVcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbbW9iaWxlXT1cImRldmljZVNpemUgPT09ICdzJ1wiXHJcbiAgICAgICAgICAgIFttb2JpbGVDb25maWddPVwibW9iaWxlQ29uZmlnXCJcclxuICAgICAgICAgICAgW2ZpbGxPblNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5ID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2VcIlxyXG4gICAgICAgICAgICBbZHJvcGRvd25WYWx1ZXNdPVwibW9EYXRhTGlzdFwiXHJcbiAgICAgICAgICAgIFtmaWx0ZXJGbl09XCJjdXN0b21GaWx0ZXJcIlxyXG4gICAgICAgICAgICBbb3Blbk9uS2V5Ym9hcmRFdmVudF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2J5bGluZV09XCJhbGxDb2x1bW5zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICBbaXNTZWFyY2hdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbaXRlbVRlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiZGlzcGxheUZ1bmNcIlxyXG4gICAgICAgICAgICBbc2hvd0Ryb3Bkb3duQnV0dG9uXT1cImNvbnRleHQuX3Nob3dEcm9wRG93biAhPT0gZmFsc2UgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWVcIlxyXG4gICAgICAgICAgICAoaXRlbUNsaWNrZWQpPVwib25JdGVtQ2xpY2soJGV2ZW50LCBtb0RhdGFMaXN0KVwiXHJcbiAgICAgICAgICAgIChpbnB1dFRleHRDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKGZkQ29tYm9ib3gsICRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2ZkLWNvbWJvYm94PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidG5zVHBsOyBjb250ZXh0OiB7IGRpc2FibGVPclJlYWRvbmx5OiB0aGlzLmRpc2FibGVPclJlYWRvbmx5IH1cIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LWl0ZW0+XHJcbiAgICAgICAgQGlmIChpdGVtLiRpc0xvYWRpbmcpIHtcclxuICAgICAgICA8ZGl2IGZkLWxpc3QtY29udGVudCBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDIwcHhcIj5cclxuICAgICAgICAgICAgPGJzdS1tYXNrIFtzaXplXT1cIidzJ1wiIFt0b3BdPVwiJzEwcHgnXCI+PC9ic3UtbWFzaz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS4kTG9hZE1vcmUgPyBsb2FkTW9yZUJ1dHRvbiA6IHNob3dJdGVtOyBjb250ZXh0OiB7IHVsdjogdWx2QWRhcHRlciB8fCBVbHZVaSB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZE1vcmVCdXR0b24gbGV0LXVsdj1cInVsdlwiPlxyXG4gICAgICAgICAgICBAaWYgKHVsdikge1xyXG4gICAgICAgICAgICA8YnN1LXVsdi1wYWdpbmdcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBhZ2luZ0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2luZ1NldHRpbmddPVwidWx2LlNldHRpbmcuRGF0YS5QYWdpbmdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvYnN1LXVsdi1wYWdpbmc+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgKm5nSWY9XCJ1bHYgJiYgdWx2LlNldHRpbmcuRGF0YS5QYWdpbmcuUGFnZSArIDEgPCB1bHYuU2V0dGluZy5EYXRhLlBhZ2luZy5Ub3RhbFBhZ2VzXCJcclxuICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAoY2xpY2spPVwib25QYWdlQ2hhbmdlMih1bHYuU2V0dGluZy5EYXRhLlBhZ2luZywgJGV2ZW50KVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidNb3JlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgID48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dJdGVtPlxyXG4gICAgICAgICAgICBAaWYgKGFsbENvbHVtbnM/Lmxlbmd0aCAmJiAhaXRlbS5pc0VtcHR5KSB7IEBpZiAoIWl0ZW0uJF9fSXNMYXN0KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2luZm91bHYgZGV2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICB9IEBpZiAoaXRlbS4kSWNvbikge1xyXG4gICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRodW1ibmFpbD48ZmQtaWNvbiBbZ2x5cGhdPVwiaXRlbS4kSWNvblwiPjwvZmQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdiBmZC1saXN0LWNvbnRlbnQgY2xhc3M9XCJtb2luZm91bHYgaGFzQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LXRpdGxlIGNsYXNzPVwidGl0bGVcIj57eyBhbGxDb2x1bW5zWzBdLkFsaWFzIHwgcnZhbDogaXRlbTphbGxDb2x1bW5zOnRydWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIEBpZiAoYWxsQ29sdW1uc1sxXSkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LWJ5bGluZSBjbGFzcz1cImJ5bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGFsbENvbHVtbnNbMV0uQWxpYXMgfCBydmFsOiBpdGVtOmFsbENvbHVtbnM6dHJ1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgY29sdW1uLWdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgYWxsQ29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHsgQGlmIChpbmRleCA+IDEpIHsgQGlmIChjb2x1bW4uQWxpYXNcclxuICAgICAgICAgICAgICAgICAgICB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlOyBhcyB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBjb2x1bW4uQWxpYXMgfX06e3sgdmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgfSB9IH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGUgW2NsYXNzLmxpc3QtZW1wdHktaXRlbV09XCJpdGVtLmlzRW1wdHlcIlxyXG4gICAgICAgICAgICAgICAgPnt7IGl0ZW0uaXNFbXB0eSA/ICgnTm9EYXRhJyB8IGJiYlRyYW5zbGF0ZSkgOiAoaXRlbS4kTW9DYXB0aW9uIHx8IGl0ZW0uJENhcHRpb24gfCBiYmJUcmFuc2xhdGUpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=