keevo-components 1.8.127 → 1.8.129

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 (445) hide show
  1. package/esm2022/keevo-components.mjs +5 -0
  2. package/esm2022/lib/api/base-components/base-component-button.mjs +39 -0
  3. package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -0
  4. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +298 -0
  5. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +79 -0
  6. package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -0
  7. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -0
  8. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +169 -0
  9. package/esm2022/lib/api/base-components/base-component-input.mjs +94 -0
  10. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -0
  11. package/esm2022/lib/api/base-components/base-component.mjs +51 -0
  12. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -0
  13. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -0
  14. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -0
  15. package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -0
  16. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -0
  17. package/esm2022/lib/api/components/table/action-item.mjs +2 -0
  18. package/esm2022/lib/api/components/table/kv-menuitem.mjs +46 -0
  19. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -0
  20. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -0
  21. package/esm2022/lib/api/components/table/table.config.mjs +2 -0
  22. package/esm2022/lib/api/components/table/table.paginate.mjs +9 -0
  23. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -0
  24. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -0
  25. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +3 -0
  26. package/esm2022/lib/api/directives/template/template.directive.mjs +24 -0
  27. package/esm2022/lib/api/helpers/component-providers.mjs +16 -0
  28. package/esm2022/lib/api/helpers/keevo-validators.mjs +82 -0
  29. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -0
  30. package/esm2022/lib/api/modules/primeng.module.mjs +263 -0
  31. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +28 -0
  32. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -0
  33. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -0
  34. package/esm2022/lib/api/pipes/pipes.module.mjs +39 -0
  35. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -0
  36. package/esm2022/lib/api/services/base.api.service.mjs +74 -0
  37. package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -0
  38. package/esm2022/lib/api/services/component.service.mjs +27 -0
  39. package/esm2022/lib/api/services/docs.service.mjs +129 -0
  40. package/esm2022/lib/api/services/form.service.mjs +85 -0
  41. package/esm2022/lib/api/services/imagens.service.mjs +28 -0
  42. package/esm2022/lib/api/services/notification.service.mjs +67 -0
  43. package/esm2022/lib/api/services/object.service.mjs +39 -0
  44. package/esm2022/lib/api/types/severity.mjs +2 -0
  45. package/esm2022/lib/components/keevo-components.module.mjs +151 -0
  46. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +78 -0
  47. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +32 -0
  48. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +31 -0
  49. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +37 -0
  50. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -0
  51. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -0
  52. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -0
  53. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +32 -0
  54. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -0
  55. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +145 -0
  56. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +32 -0
  57. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -0
  58. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -0
  59. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +83 -0
  60. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +18 -0
  61. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +26 -0
  62. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +37 -0
  63. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +92 -0
  64. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +89 -0
  65. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +29 -0
  66. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -0
  67. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -0
  68. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +25 -0
  69. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +42 -0
  70. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -0
  71. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -0
  72. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +117 -0
  73. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +44 -0
  74. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +53 -0
  75. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +46 -0
  76. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +34 -0
  77. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -0
  78. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -0
  79. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +17 -0
  80. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -0
  81. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -0
  82. package/esm2022/lib/components/kv-login/kv-login.component.mjs +52 -0
  83. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -0
  84. package/esm2022/lib/components/kv-menu/kv-menu.component.mjs +198 -0
  85. package/esm2022/lib/components/kv-menu/kv-menu.module.mjs +47 -0
  86. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +98 -0
  87. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +31 -0
  88. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +100 -0
  89. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +24 -0
  90. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +176 -0
  91. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +38 -0
  92. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +54 -0
  93. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +32 -0
  94. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +58 -0
  95. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -0
  96. package/esm2022/lib/components/kv-report/kv-report.component.mjs +53 -0
  97. package/esm2022/lib/components/kv-report/kv-report.module.mjs +24 -0
  98. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +49 -0
  99. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +32 -0
  100. package/esm2022/lib/components/kv-table/kv-table.component.mjs +498 -0
  101. package/esm2022/lib/components/kv-table/kv-table.module.mjs +36 -0
  102. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +614 -0
  103. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +41 -0
  104. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +291 -0
  105. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +28 -0
  106. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +30 -0
  107. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -0
  108. package/esm2022/lib/components/kv-workspace/kv-workspace.component.mjs +167 -0
  109. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +51 -0
  110. package/esm2022/public-api.mjs +183 -0
  111. package/fesm2022/keevo-components.mjs +6276 -0
  112. package/fesm2022/keevo-components.mjs.map +1 -0
  113. package/index.d.ts +5 -0
  114. package/lib/api/base-components/base-component-button.d.ts +15 -0
  115. package/lib/api/base-components/base-component-chart.d.ts +40 -0
  116. package/lib/api/base-components/base-component-crud-form.d.ts +145 -0
  117. package/lib/api/base-components/base-component-crud-list.d.ts +64 -0
  118. package/lib/api/base-components/base-component-crud.d.ts +36 -0
  119. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -0
  120. package/lib/api/base-components/base-component-dropdown.d.ts +44 -0
  121. package/lib/api/base-components/base-component-input.d.ts +31 -0
  122. package/lib/api/base-components/base-component-multi-select.d.ts +35 -0
  123. package/lib/api/base-components/base-component.d.ts +22 -0
  124. package/lib/api/components/chart/chart.config.d.ts +11 -0
  125. package/lib/api/components/chart/chart.model.d.ts +9 -0
  126. package/lib/api/components/chart/orchart.config.d.ts +35 -0
  127. package/lib/api/components/chart/orchart.item.d.ts +26 -0
  128. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -0
  129. package/lib/api/components/table/action-item.d.ts +11 -0
  130. package/lib/api/components/table/kv-menuitem.d.ts +152 -0
  131. package/lib/api/components/table/table-dropdown-control.d.ts +6 -0
  132. package/lib/api/components/table/table.config.column.d.ts +25 -0
  133. package/lib/api/components/table/table.config.d.ts +31 -0
  134. package/lib/api/components/table/table.paginate.d.ts +6 -0
  135. package/lib/api/components/table/tabledit.config.d.ts +8 -0
  136. package/lib/api/components/table/tableedit.config.column.d.ts +10 -0
  137. package/lib/api/components/tree-table/tree-table.config.d.ts +28 -0
  138. package/lib/api/directives/template/template.directive.d.ts +11 -0
  139. package/lib/api/helpers/component-providers.d.ts +2 -0
  140. package/lib/api/helpers/keevo-validators.d.ts +12 -0
  141. package/lib/api/helpers/translate-primeng.d.ts +4 -0
  142. package/lib/api/modules/primeng.module.d.ts +64 -0
  143. package/lib/api/pipes/capitalize.pipe.d.ts +8 -0
  144. package/lib/api/pipes/cpfcnpj.pipe.d.ts +7 -0
  145. package/lib/api/pipes/mask.pipe.d.ts +7 -0
  146. package/lib/api/pipes/pipes.module.d.ts +11 -0
  147. package/lib/api/pipes/telefone.pipe.d.ts +7 -0
  148. package/lib/api/services/base.api.service.d.ts +25 -0
  149. package/lib/api/services/breadcrumbs.service.d.ts +15 -0
  150. package/lib/api/services/component.service.d.ts +11 -0
  151. package/lib/api/services/docs.service.d.ts +12 -0
  152. package/lib/api/services/form.service.d.ts +28 -0
  153. package/lib/api/services/imagens.service.d.ts +10 -0
  154. package/lib/api/services/notification.service.d.ts +25 -0
  155. package/lib/api/services/object.service.d.ts +9 -0
  156. package/{src/lib/api/types/severity.ts → lib/api/types/severity.d.ts} +2 -3
  157. package/lib/components/keevo-components.module.d.ts +26 -0
  158. package/lib/components/kv-avatar/kv-avatar.component.d.ts +22 -0
  159. package/lib/components/kv-avatar/kv-avatar.module.d.ts +10 -0
  160. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +13 -0
  161. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +15 -0
  162. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +7 -0
  163. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +7 -0
  164. package/lib/components/kv-buttons/kv-button.module.d.ts +11 -0
  165. package/lib/components/kv-carousel/kv-carousel.component.d.ts +14 -0
  166. package/lib/components/kv-carousel/kv-carousel.module.d.ts +9 -0
  167. package/lib/components/kv-chart/kv-chart.component.d.ts +56 -0
  168. package/lib/components/kv-chart/kv-chart.module.d.ts +10 -0
  169. package/lib/components/kv-error/kv-error.component.d.ts +12 -0
  170. package/lib/components/kv-error/kv-error.module.d.ts +10 -0
  171. package/lib/components/kv-image-upload/kv-image-upload.component.d.ts +24 -0
  172. package/lib/components/kv-image-upload/kv-image-upload.module.d.ts +8 -0
  173. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +11 -0
  174. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +14 -0
  175. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +21 -0
  176. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +27 -0
  177. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +12 -0
  178. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +19 -0
  179. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +13 -0
  180. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +10 -0
  181. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +16 -0
  182. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +16 -0
  183. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +10 -0
  184. package/lib/components/kv-inputs/kv-inputs.module.d.ts +27 -0
  185. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +15 -0
  186. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +18 -0
  187. package/lib/components/kv-inputs/kv-select-button/kv-select-button.component.d.ts +19 -0
  188. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +14 -0
  189. package/lib/components/kv-label/kv-label.component.d.ts +7 -0
  190. package/lib/components/kv-label/kv-label.module.d.ts +8 -0
  191. package/lib/components/kv-loader/kv-loader.component.d.ts +8 -0
  192. package/lib/components/kv-loader/kv-loader.module.d.ts +9 -0
  193. package/lib/components/kv-loader/kv-loader.service.d.ts +10 -0
  194. package/lib/components/kv-login/kv-login.component.d.ts +30 -0
  195. package/lib/components/kv-login/kv-login.module.d.ts +13 -0
  196. package/lib/components/kv-menu/kv-menu.component.d.ts +59 -0
  197. package/lib/components/kv-menu/kv-menu.module.d.ts +13 -0
  198. package/lib/components/kv-modal/kv-modal.component.d.ts +28 -0
  199. package/lib/components/kv-modal/kv-modal.module.d.ts +10 -0
  200. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +27 -0
  201. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +9 -0
  202. package/lib/components/kv-page-form/kv-page-form.component.d.ts +87 -0
  203. package/lib/components/kv-page-form/kv-page-form.module.d.ts +11 -0
  204. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +22 -0
  205. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +10 -0
  206. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +67 -0
  207. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +9 -0
  208. package/lib/components/kv-report/kv-report.component.d.ts +20 -0
  209. package/lib/components/kv-report/kv-report.module.d.ts +8 -0
  210. package/lib/components/kv-stepper/kv-stepper.component.d.ts +21 -0
  211. package/lib/components/kv-stepper/kv-stepper.module.d.ts +10 -0
  212. package/lib/components/kv-table/kv-table.component.d.ts +113 -0
  213. package/lib/components/kv-table/kv-table.module.d.ts +11 -0
  214. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +127 -0
  215. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +14 -0
  216. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +61 -0
  217. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +9 -0
  218. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +14 -0
  219. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +9 -0
  220. package/lib/components/kv-workspace/kv-workspace.component.d.ts +65 -0
  221. package/lib/components/kv-workspace/kv-workspace.module.d.ts +14 -0
  222. package/package.json +43 -30
  223. package/{src/public-api.ts → public-api.d.ts} +179 -209
  224. package/ng-package.json +0 -7
  225. package/src/assets/.gitkeep +0 -0
  226. package/src/assets/images/LogoEvo.png +0 -0
  227. package/src/assets/images/LogoPequenaEvo.png +0 -0
  228. package/src/assets/images/background.png +0 -0
  229. package/src/assets/images/keepass-logo.png +0 -0
  230. package/src/assets/images/keepass-logo.svg +0 -74
  231. package/src/assets/images/keevo-logo.png +0 -0
  232. package/src/assets/images/logokeevo_2.png +0 -0
  233. package/src/index.ts +0 -1
  234. package/src/lib/api/base-components/base-component-button.ts +0 -29
  235. package/src/lib/api/base-components/base-component-chart.ts +0 -105
  236. package/src/lib/api/base-components/base-component-crud-form.ts +0 -361
  237. package/src/lib/api/base-components/base-component-crud-list.ts +0 -122
  238. package/src/lib/api/base-components/base-component-crud.ts +0 -70
  239. package/src/lib/api/base-components/base-component-dropdown-external.ts +0 -29
  240. package/src/lib/api/base-components/base-component-dropdown-new.ts +0 -112
  241. package/src/lib/api/base-components/base-component-dropdown.ts +0 -170
  242. package/src/lib/api/base-components/base-component-input.ts +0 -107
  243. package/src/lib/api/base-components/base-component-multi-select.ts +0 -136
  244. package/src/lib/api/base-components/base-component.ts +0 -47
  245. package/src/lib/api/components/chart/chart.config.ts +0 -12
  246. package/src/lib/api/components/chart/chart.model.ts +0 -9
  247. package/src/lib/api/components/chart/orchart.config.ts +0 -41
  248. package/src/lib/api/components/chart/orchart.item.ts +0 -33
  249. package/src/lib/api/components/dropdown/filtro.combo.ts +0 -4
  250. package/src/lib/api/components/table/action-item.ts +0 -11
  251. package/src/lib/api/components/table/kv-menuitem.ts +0 -198
  252. package/src/lib/api/components/table/table-dropdown-control.ts +0 -6
  253. package/src/lib/api/components/table/table.config.column.ts +0 -27
  254. package/src/lib/api/components/table/table.config.ts +0 -34
  255. package/src/lib/api/components/table/table.paginate.ts +0 -6
  256. package/src/lib/api/components/table/tabledit.config.ts +0 -10
  257. package/src/lib/api/components/table/tableedit.config.column.ts +0 -12
  258. package/src/lib/api/components/tree-table/tree-table.config.ts +0 -30
  259. package/src/lib/api/directives/directives.module.ts +0 -16
  260. package/src/lib/api/directives/drag/drag.directive.ts +0 -40
  261. package/src/lib/api/directives/template/template.directive.ts +0 -15
  262. package/src/lib/api/helpers/component-providers.ts +0 -16
  263. package/src/lib/api/helpers/keevo-validators.ts +0 -97
  264. package/src/lib/api/helpers/severity-color.ts +0 -77
  265. package/src/lib/api/helpers/translate-primeng.ts +0 -25
  266. package/src/lib/api/modules/primeng.module.ts +0 -134
  267. package/src/lib/api/pipes/capitalize.pipe.ts +0 -23
  268. package/src/lib/api/pipes/cpfcnpj.pipe.ts +0 -21
  269. package/src/lib/api/pipes/mask.pipe.ts +0 -24
  270. package/src/lib/api/pipes/pipes.module.ts +0 -26
  271. package/src/lib/api/pipes/telefone.pipe.ts +0 -38
  272. package/src/lib/api/services/base.api.service.ts +0 -115
  273. package/src/lib/api/services/breadcrumbs.service.ts +0 -58
  274. package/src/lib/api/services/component.service.ts +0 -32
  275. package/src/lib/api/services/docs.service.ts +0 -129
  276. package/src/lib/api/services/form.service.ts +0 -115
  277. package/src/lib/api/services/imagens.service.ts +0 -28
  278. package/src/lib/api/services/notification.service.ts +0 -85
  279. package/src/lib/api/services/object.service.ts +0 -33
  280. package/src/lib/api/types/stimulsoft.reports.d.ts +0 -67463
  281. package/src/lib/components/keevo-components-styles.scss +0 -11
  282. package/src/lib/components/keevo-components.module.ts +0 -72
  283. package/src/lib/components/kv-avatar/kv-avatar.component.html +0 -12
  284. package/src/lib/components/kv-avatar/kv-avatar.component.scss +0 -45
  285. package/src/lib/components/kv-avatar/kv-avatar.component.spec.ts +0 -23
  286. package/src/lib/components/kv-avatar/kv-avatar.component.ts +0 -72
  287. package/src/lib/components/kv-avatar/kv-avatar.module.ts +0 -21
  288. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.html +0 -16
  289. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.scss +0 -3
  290. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.ts +0 -34
  291. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.html +0 -12
  292. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.scss +0 -31
  293. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.ts +0 -40
  294. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.html +0 -12
  295. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.scss +0 -14
  296. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.ts +0 -14
  297. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.html +0 -11
  298. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.scss +0 -13
  299. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.ts +0 -14
  300. package/src/lib/components/kv-buttons/kv-button.module.ts +0 -26
  301. package/src/lib/components/kv-carousel/kv-carousel.component.html +0 -8
  302. package/src/lib/components/kv-carousel/kv-carousel.component.scss +0 -32
  303. package/src/lib/components/kv-carousel/kv-carousel.component.spec.ts +0 -23
  304. package/src/lib/components/kv-carousel/kv-carousel.component.ts +0 -31
  305. package/src/lib/components/kv-carousel/kv-carousel.module.ts +0 -19
  306. package/src/lib/components/kv-chart/kv-chart.component.html +0 -38
  307. package/src/lib/components/kv-chart/kv-chart.component.scss +0 -0
  308. package/src/lib/components/kv-chart/kv-chart.component.spec.ts +0 -28
  309. package/src/lib/components/kv-chart/kv-chart.component.ts +0 -153
  310. package/src/lib/components/kv-chart/kv-chart.module.ts +0 -21
  311. package/src/lib/components/kv-error/kv-error.component.html +0 -3
  312. package/src/lib/components/kv-error/kv-error.component.scss +0 -5
  313. package/src/lib/components/kv-error/kv-error.component.ts +0 -27
  314. package/src/lib/components/kv-error/kv-error.module.ts +0 -26
  315. package/src/lib/components/kv-image-upload/kv-image-upload.component.html +0 -62
  316. package/src/lib/components/kv-image-upload/kv-image-upload.component.scss +0 -0
  317. package/src/lib/components/kv-image-upload/kv-image-upload.component.ts +0 -82
  318. package/src/lib/components/kv-image-upload/kv-image-upload.module.ts +0 -10
  319. package/src/lib/components/kv-inputs/kv-check/kv-check.component.html +0 -12
  320. package/src/lib/components/kv-inputs/kv-check/kv-check.component.scss +0 -13
  321. package/src/lib/components/kv-inputs/kv-check/kv-check.component.ts +0 -32
  322. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.html +0 -91
  323. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.scss +0 -21
  324. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.ts +0 -40
  325. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.html +0 -100
  326. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.scss +0 -8
  327. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.ts +0 -113
  328. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.html +0 -30
  329. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.scss +0 -0
  330. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.ts +0 -84
  331. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.html +0 -22
  332. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.scss +0 -0
  333. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.ts +0 -35
  334. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.html +0 -23
  335. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.scss +0 -0
  336. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.ts +0 -61
  337. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.html +0 -23
  338. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.scss +0 -0
  339. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.ts +0 -26
  340. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.html +0 -22
  341. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.scss +0 -18
  342. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.ts +0 -27
  343. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.html +0 -35
  344. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.scss +0 -0
  345. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.spec.ts +0 -23
  346. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.ts +0 -43
  347. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.html +0 -22
  348. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.scss +0 -0
  349. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.ts +0 -40
  350. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.html +0 -23
  351. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.scss +0 -0
  352. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.ts +0 -27
  353. package/src/lib/components/kv-inputs/kv-inputs.module.ts +0 -75
  354. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.html +0 -45
  355. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.scss +0 -13
  356. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.ts +0 -44
  357. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.html +0 -19
  358. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.scss +0 -15
  359. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.ts +0 -59
  360. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.html +0 -26
  361. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.scss +0 -5
  362. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.spec.ts +0 -21
  363. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.ts +0 -30
  364. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.html +0 -13
  365. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.scss +0 -3
  366. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.ts +0 -41
  367. package/src/lib/components/kv-label/kv-label.component.html +0 -6
  368. package/src/lib/components/kv-label/kv-label.component.scss +0 -9
  369. package/src/lib/components/kv-label/kv-label.component.spec.ts +0 -23
  370. package/src/lib/components/kv-label/kv-label.component.ts +0 -14
  371. package/src/lib/components/kv-label/kv-label.module.ts +0 -17
  372. package/src/lib/components/kv-loader/kv-loader.component.html +0 -1
  373. package/src/lib/components/kv-loader/kv-loader.component.ts +0 -15
  374. package/src/lib/components/kv-loader/kv-loader.module.ts +0 -17
  375. package/src/lib/components/kv-loader/kv-loader.service.ts +0 -31
  376. package/src/lib/components/kv-login/kv-login.component.html +0 -108
  377. package/src/lib/components/kv-login/kv-login.component.scss +0 -76
  378. package/src/lib/components/kv-login/kv-login.component.spec.ts +0 -23
  379. package/src/lib/components/kv-login/kv-login.component.ts +0 -81
  380. package/src/lib/components/kv-login/kv-login.module.ts +0 -33
  381. package/src/lib/components/kv-menu/kv-menu.component.html +0 -292
  382. package/src/lib/components/kv-menu/kv-menu.component.scss +0 -214
  383. package/src/lib/components/kv-menu/kv-menu.component.spec.ts +0 -23
  384. package/src/lib/components/kv-menu/kv-menu.component.ts +0 -195
  385. package/src/lib/components/kv-menu/kv-menu.module.ts +0 -33
  386. package/src/lib/components/kv-modal/kv-modal.component.html +0 -20
  387. package/src/lib/components/kv-modal/kv-modal.component.scss +0 -84
  388. package/src/lib/components/kv-modal/kv-modal.component.spec.ts +0 -21
  389. package/src/lib/components/kv-modal/kv-modal.component.ts +0 -114
  390. package/src/lib/components/kv-modal/kv-modal.module.ts +0 -21
  391. package/src/lib/components/kv-orgchart/kv-orgchart.component.html +0 -58
  392. package/src/lib/components/kv-orgchart/kv-orgchart.component.scss +0 -21
  393. package/src/lib/components/kv-orgchart/kv-orgchart.component.ts +0 -110
  394. package/src/lib/components/kv-orgchart/kv-orgchart.module.ts +0 -14
  395. package/src/lib/components/kv-page-form/kv-page-form.component.html +0 -117
  396. package/src/lib/components/kv-page-form/kv-page-form.component.scss +0 -76
  397. package/src/lib/components/kv-page-form/kv-page-form.component.spec.ts +0 -28
  398. package/src/lib/components/kv-page-form/kv-page-form.component.ts +0 -152
  399. package/src/lib/components/kv-page-form/kv-page-form.module.ts +0 -31
  400. package/src/lib/components/kv-pick-list/kv-pick-list.component.html +0 -19
  401. package/src/lib/components/kv-pick-list/kv-pick-list.component.scss +0 -0
  402. package/src/lib/components/kv-pick-list/kv-pick-list.component.spec.ts +0 -26
  403. package/src/lib/components/kv-pick-list/kv-pick-list.component.ts +0 -37
  404. package/src/lib/components/kv-pick-list/kv-pick-list.module.ts +0 -21
  405. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.html +0 -38
  406. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.scss +0 -110
  407. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.spec.ts +0 -21
  408. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.ts +0 -79
  409. package/src/lib/components/kv-progress-bar/kv-progress-bar.module.ts +0 -19
  410. package/src/lib/components/kv-report/kv-report.component.html +0 -12
  411. package/src/lib/components/kv-report/kv-report.component.scss +0 -21
  412. package/src/lib/components/kv-report/kv-report.component.spec.ts +0 -28
  413. package/src/lib/components/kv-report/kv-report.component.ts +0 -50
  414. package/src/lib/components/kv-report/kv-report.module.ts +0 -18
  415. package/src/lib/components/kv-stepper/kv-stepper.component.html +0 -44
  416. package/src/lib/components/kv-stepper/kv-stepper.component.scss +0 -41
  417. package/src/lib/components/kv-stepper/kv-stepper.component.spec.ts +0 -23
  418. package/src/lib/components/kv-stepper/kv-stepper.component.ts +0 -41
  419. package/src/lib/components/kv-stepper/kv-stepper.module.ts +0 -20
  420. package/src/lib/components/kv-table/kv-table.component.html +0 -482
  421. package/src/lib/components/kv-table/kv-table.component.scss +0 -265
  422. package/src/lib/components/kv-table/kv-table.component.spec.ts +0 -28
  423. package/src/lib/components/kv-table/kv-table.component.ts +0 -535
  424. package/src/lib/components/kv-table/kv-table.module.ts +0 -23
  425. package/src/lib/components/kv-table-edit/kv-table-edit.component.html +0 -659
  426. package/src/lib/components/kv-table-edit/kv-table-edit.component.scss +0 -701
  427. package/src/lib/components/kv-table-edit/kv-table-edit.component.ts +0 -700
  428. package/src/lib/components/kv-table-edit/kv-table-edit.module.ts +0 -28
  429. package/src/lib/components/kv-tree-table/kv-tree-table.component.html +0 -556
  430. package/src/lib/components/kv-tree-table/kv-tree-table.component.scss +0 -145
  431. package/src/lib/components/kv-tree-table/kv-tree-table.component.spec.ts +0 -21
  432. package/src/lib/components/kv-tree-table/kv-tree-table.component.ts +0 -294
  433. package/src/lib/components/kv-tree-table/kv-tree-table.module.ts +0 -18
  434. package/src/lib/components/kv-tree-view/kv-tree-view.component.html +0 -9
  435. package/src/lib/components/kv-tree-view/kv-tree-view.component.scss +0 -0
  436. package/src/lib/components/kv-tree-view/kv-tree-view.component.spec.ts +0 -23
  437. package/src/lib/components/kv-tree-view/kv-tree-view.component.ts +0 -31
  438. package/src/lib/components/kv-tree-view/kv-tree-view.module.ts +0 -19
  439. package/src/lib/components/kv-workspace/kv-workspace.component.html +0 -53
  440. package/src/lib/components/kv-workspace/kv-workspace.component.scss +0 -117
  441. package/src/lib/components/kv-workspace/kv-workspace.component.ts +0 -201
  442. package/src/lib/components/kv-workspace/kv-workspace.module.ts +0 -35
  443. package/tsconfig.lib.json +0 -14
  444. package/tsconfig.lib.prod.json +0 -10
  445. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,41 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { NgModule } from '@angular/core';
4
+ import { KvButtonsModule, KvInputsModule, PipesModule, PrimeNgModule } from '../../../public-api';
5
+ import { KvTableEditComponent } from './kv-table-edit.component';
6
+ import { SelectButtonModule } from 'primeng/selectbutton';
7
+ import * as i0 from "@angular/core";
8
+ export class KvTableEditModule {
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditModule, declarations: [KvTableEditComponent], imports: [CommonModule,
11
+ PrimeNgModule,
12
+ FormsModule,
13
+ KvInputsModule,
14
+ KvButtonsModule,
15
+ PipesModule,
16
+ SelectButtonModule], exports: [KvTableEditComponent] }); }
17
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditModule, imports: [CommonModule,
18
+ PrimeNgModule,
19
+ FormsModule,
20
+ KvInputsModule,
21
+ KvButtonsModule,
22
+ PipesModule,
23
+ SelectButtonModule] }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ declarations: [KvTableEditComponent],
29
+ imports: [
30
+ CommonModule,
31
+ PrimeNgModule,
32
+ FormsModule,
33
+ KvInputsModule,
34
+ KvButtonsModule,
35
+ PipesModule,
36
+ SelectButtonModule
37
+ ],
38
+ exports: [KvTableEditComponent]
39
+ }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZWRpdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1lZGl0L2t2LXRhYmxlLWVkaXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxXQUFXLEVBQ1gsYUFBYSxFQUNkLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBZTFELE1BQU0sT0FBTyxpQkFBaUI7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLGlCQVpiLG9CQUFvQixhQUVqQyxZQUFZO1lBQ1osYUFBYTtZQUNiLFdBQVc7WUFDWCxjQUFjO1lBQ2QsZUFBZTtZQUNmLFdBQVc7WUFDWCxrQkFBa0IsYUFFVixvQkFBb0I7K0dBRW5CLGlCQUFpQixZQVYxQixZQUFZO1lBQ1osYUFBYTtZQUNiLFdBQVc7WUFDWCxjQUFjO1lBQ2QsZUFBZTtZQUNmLFdBQVc7WUFDWCxrQkFBa0I7OzJGQUlULGlCQUFpQjtrQkFiN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDcEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixXQUFXO3dCQUNYLGtCQUFrQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEt2QnV0dG9uc01vZHVsZSxcclxuICBLdklucHV0c01vZHVsZSxcclxuICBQaXBlc01vZHVsZSxcclxuICBQcmltZU5nTW9kdWxlXHJcbn0gZnJvbSAnLi4vLi4vLi4vcHVibGljLWFwaSc7XHJcblxyXG5pbXBvcnQgeyBLdlRhYmxlRWRpdENvbXBvbmVudCB9IGZyb20gJy4va3YtdGFibGUtZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdGJ1dHRvbic7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0t2VGFibGVFZGl0Q29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBQcmltZU5nTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBLdklucHV0c01vZHVsZSxcclxuICAgIEt2QnV0dG9uc01vZHVsZSxcclxuICAgIFBpcGVzTW9kdWxlLFxyXG4gICAgU2VsZWN0QnV0dG9uTW9kdWxlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbS3ZUYWJsZUVkaXRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdlRhYmxlRWRpdE1vZHVsZSB7IH1cclxuIl19
@@ -0,0 +1,291 @@
1
+ import { Component, ContentChildren, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import { getOrExecute, mapToMenuItem } from '../../api/components/table/kv-menuitem';
3
+ import { TemplateDirective } from '../../api/directives/template/template.directive';
4
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "primeng/api";
8
+ import * as i3 from "primeng/autofocus";
9
+ import * as i4 from "primeng/tooltip";
10
+ import * as i5 from "primeng/button";
11
+ import * as i6 from "primeng/inputtext";
12
+ import * as i7 from "primeng/menu";
13
+ import * as i8 from "@angular/cdk/drag-drop";
14
+ import * as i9 from "primeng/table";
15
+ import * as i10 from "primeng/treetable";
16
+ export class KvTreetableComponent {
17
+ constructor() {
18
+ this.menuItems = [];
19
+ this.gridLines = false;
20
+ this.tableCaptalized = false;
21
+ this.selectedItems = [];
22
+ this.paginator = false;
23
+ this.rows = 10;
24
+ this.pageLinks = 2;
25
+ this.showFirstLastIcon = false;
26
+ this.treeTableDraggable = false;
27
+ this.transferArrayItem = false;
28
+ this.textoEmptyMessage = 'Nenhum registro encontrado';
29
+ this.onFilter = new EventEmitter();
30
+ this.onPaginate = new EventEmitter();
31
+ this.onActiveItem = new EventEmitter();
32
+ this.onActiveItemLote = new EventEmitter();
33
+ this.doubleClickEvent = new EventEmitter();
34
+ this.onNodeSelect = new EventEmitter();
35
+ this.onNodeUnselect = new EventEmitter();
36
+ this.onDropItem = new EventEmitter();
37
+ }
38
+ ngOnInit() {
39
+ this.tamanhoTela = window.innerWidth;
40
+ if (this.ordenacao) {
41
+ this.dataSource = this.sortTreeNodes(this.dataSource);
42
+ }
43
+ }
44
+ onWindowResize() {
45
+ this.tamanhoTela = window.innerWidth;
46
+ }
47
+ activeItem(rowData) {
48
+ this.onActiveItem.emit(rowData);
49
+ }
50
+ activeItemLote(rowData) {
51
+ this.onActiveItemLote.emit(rowData);
52
+ }
53
+ getOrExecute(action, data) {
54
+ return getOrExecute(action, data);
55
+ }
56
+ onGlobalFilter(table, event) {
57
+ this.onFilter.emit(event.target.value);
58
+ table.filterGlobal(event.target.value, 'contains');
59
+ }
60
+ paginate($event) {
61
+ if ($event) {
62
+ let paginaInicial = ($event?.first > 0 ? $event.first / $event.rows : $event.first) + 1;
63
+ let termoPesquisa = '';
64
+ let ordenacao = '';
65
+ if ($event.globalFilter)
66
+ termoPesquisa = $event.globalFilter;
67
+ if ($event.sortField)
68
+ ordenacao = `${$event.sortField} ${$event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
69
+ const objeto = {
70
+ paginaInicial: paginaInicial,
71
+ tamanhoPagina: $event.rows,
72
+ termoPesquisa: termoPesquisa,
73
+ ordenacao: ordenacao,
74
+ };
75
+ this.onPaginate.emit(objeto);
76
+ }
77
+ }
78
+ drop(event) {
79
+ const draggedNode = event.item.data;
80
+ const draggedChildData = draggedNode.node.data;
81
+ if (draggedNode.level === 0) {
82
+ moveItemInArray(this.dataSource, event.previousIndex, event.currentIndex);
83
+ }
84
+ else if (draggedNode.level >= 1) {
85
+ const parentNode = draggedNode.node.parent;
86
+ if (parentNode) {
87
+ const parentChildren = parentNode.children.map((child) => child.data);
88
+ const previousChildIndex = parentChildren.indexOf(draggedChildData);
89
+ const relativeCurrentIndex = previousChildIndex + (event.currentIndex - event.previousIndex);
90
+ const targetChildIndex = Math.max(0, Math.min(parentChildren.length - 1, relativeCurrentIndex));
91
+ if (previousChildIndex !== -1 && targetChildIndex !== -1) {
92
+ moveItemInArray(parentNode.children, previousChildIndex, targetChildIndex);
93
+ }
94
+ const dropInfo = {
95
+ previousChildIndex: previousChildIndex + 1,
96
+ targetChildIndex: targetChildIndex + 1
97
+ };
98
+ this.onDropItem.emit({ event: event, dropChildInfo: dropInfo });
99
+ }
100
+ }
101
+ this.dataSource = [...this.dataSource];
102
+ if (draggedNode.level === 0) {
103
+ this.onDropItem.emit(event);
104
+ }
105
+ }
106
+ sortTreeNodes(nodes) {
107
+ return nodes.sort((a, b) => a.data[this.ordenacao] - b.data[this.ordenacao]).map(node => {
108
+ if (node.children) {
109
+ node.children = this.sortTreeNodes(node.children);
110
+ }
111
+ return node;
112
+ });
113
+ }
114
+ calculateTargetChildIndex(event, parentChildren, previousChildIndex) {
115
+ const targetChildIndex = previousChildIndex + (event.currentIndex - event.previousIndex);
116
+ if (targetChildIndex < 0) {
117
+ return 0;
118
+ }
119
+ else if (targetChildIndex >= parentChildren.length) {
120
+ return parentChildren.length - 1;
121
+ }
122
+ else {
123
+ return targetChildIndex;
124
+ }
125
+ }
126
+ returnStyleRow(col, rowNode) {
127
+ const isFirstColumn = col.field === this.config.columns[0].field;
128
+ const baseOpacity = 1;
129
+ const maxLevels = 4;
130
+ if (isFirstColumn && rowNode.level >= 0) {
131
+ const opacity = baseOpacity - (rowNode.level / maxLevels);
132
+ return `border-left: solid 4px rgba(59, 110, 158, ${opacity}) !important;`;
133
+ }
134
+ if (rowNode.level == 0)
135
+ return 'border-left: none !important; border-right: none !important';
136
+ return '';
137
+ }
138
+ alignColunasHeader(col) {
139
+ if (col.align) {
140
+ if (col.align == 'right')
141
+ return 'justify-content: end';
142
+ else
143
+ return '';
144
+ }
145
+ else
146
+ return '';
147
+ }
148
+ centralizarColunas(col) {
149
+ if (col.centralize) {
150
+ return 'text-align: center; ';
151
+ }
152
+ else
153
+ return '';
154
+ }
155
+ alignColunas(col) {
156
+ if (col.align) {
157
+ return `text-align: ${col.align}`;
158
+ }
159
+ else
160
+ return '';
161
+ }
162
+ criarMenusModal(data) {
163
+ if (this.config.actions && data) {
164
+ for (const action of this.config.actions) {
165
+ const menuInsert = mapToMenuItem(action, data);
166
+ let item = this.menuItems.filter(x => x.command == menuInsert.command);
167
+ if (item.length == 0)
168
+ this.menuItems.push(menuInsert);
169
+ else {
170
+ if (menuInsert.label != item[0].label) {
171
+ let index = this.menuItems.indexOf(item[0]);
172
+ this.menuItems.splice(index, 1);
173
+ }
174
+ if (menuInsert.visible != item[0].visible) {
175
+ let index = this.menuItems.indexOf(item[0]);
176
+ this.menuItems.splice(index, 1);
177
+ }
178
+ if (menuInsert.disabled != item[0].disabled) {
179
+ let index = this.menuItems.indexOf(item[0]);
180
+ this.menuItems.splice(index, 1);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ exibirCampo(field, rowData) {
187
+ let visible = field.visible ? field.visible(rowData) : true;
188
+ return visible;
189
+ }
190
+ validateActionPosition(rowNode) {
191
+ if (this.config.actionsPai && rowNode.level == 0)
192
+ return false;
193
+ else
194
+ return true;
195
+ }
196
+ doubleClick(e, rowData) {
197
+ let eventDoubleClick = { event: e, rowData: rowData };
198
+ let array = [];
199
+ e.target.classList.forEach((x) => array.push(x));
200
+ // if (array.find((x: any) => x == 'ng-star-inserted') != undefined)
201
+ this.doubleClickEvent.emit(eventDoubleClick);
202
+ }
203
+ isDisabledCheckbox(rowData, rowNode) {
204
+ return this.config.disableControlCheckboxFunction
205
+ ? this.config.disableControlCheckboxFunction(rowData, rowNode)
206
+ : false;
207
+ }
208
+ onNodeSelected(event) {
209
+ this.onNodeSelect.emit(event);
210
+ }
211
+ onNodeUnselected(event) {
212
+ this.onNodeUnselect.emit(event);
213
+ }
214
+ getCustomTemplate(templatename) {
215
+ return this._templates[templatename];
216
+ }
217
+ validateShowTemplate(rowNode, col) {
218
+ if (col.templateOnly) {
219
+ if (col.templateOnly === 'pai') {
220
+ return rowNode.level === 0;
221
+ }
222
+ if (col.templateOnly === 'filho') {
223
+ return rowNode.level === 1;
224
+ }
225
+ }
226
+ return true;
227
+ }
228
+ getIcon(icon) {
229
+ return icon.includes('pi-') ? `pi ${icon}` : '';
230
+ }
231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreetableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
232
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTreetableComponent, selector: "kv-tree-table", inputs: { config: "config", dataSource: "dataSource", gridLines: "gridLines", tableCaptalized: "tableCaptalized", selectedItems: "selectedItems", paginator: "paginator", rows: "rows", pageLinks: "pageLinks", showFirstLastIcon: "showFirstLastIcon", treeTableDraggable: "treeTableDraggable", transferArrayItem: "transferArrayItem", ordenacao: "ordenacao", totalRecords: "totalRecords", textoEmptyMessage: "textoEmptyMessage", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onPaginate: "onPaginate", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", doubleClickEvent: "doubleClickEvent", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onDropItem: "onDropItem" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], ngImport: i0, template: "<div *ngIf=\"!treeTableDraggable\">\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{'min-width': '50rem'}\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [pageLinks]=\"pageLinks\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (onNodeSelect)=\"onNodeSelected($event)\"\r\n (onNodeUnselect)=\"onNodeUnselected($event)\"\r\n >\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 md:col-6 lg:col-4 justify-content-center {{tamanhoTela < 768 ? '' : 'input-search'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n <p-button\r\n [icon]=\"getIcon(action.icon)\"\r\n [rounded]=\"true\"\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n [style.backgroundColor]='\"#1DA750\"'\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems)\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n >\r\n @if (!action.icon.includes('pi-')){\r\n <span class=\"material-symbols-outlined md-22\" style=\"color: white\">\r\n {{ getOrExecute(action.icon, selectedItems) }}\r\n </span>\r\n }\r\n </p-button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"/>\r\n </div>\r\n\r\n <div\r\n [class]=\"centralizarColunas(col) && alignColunasHeader(col) == '' ? 'flex flex-row justify-content-center' : 'flex flex-row'\"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n />\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n ttResizableColumn\r\n [style.width]=\"col.width\"\r\n [style]=\"col.centralize ? 'text-align: center;' : ''\"\r\n >\r\n {{ col.header }} <br>\r\n </th>\r\n }\r\n\r\n @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ 'capitalize': tableCaptalized }\"\r\n >\r\n\r\n @for(col of columns; track $index){\r\n <td\r\n [style]=\"returnStyleRow(col, rowNode)\"\r\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"rowNode.level !== 0 ? rowNode.level*30 : null\"\r\n >\r\n\r\n <div class=\"flex flex-row {{col.boolean ? 'justify-content-center' : '' }}\">\r\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"$index == 0\">\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\r\n\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n *ngIf=\"config.enableSelect == true\"\r\n />\r\n\r\n </div>\r\n\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"flex flex-row align-items-center justify-content-center\">\r\n\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{rowData[col.field] ? 'pi-check text-green-300' : ''}}\"\r\n style=\"font-size: 1.1rem;\"\r\n ></i>\r\n\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p\r\n *ngIf=\"col.subtitle\"\r\n class=\"m-0 text-xs font-semibold\"\r\n >{{rowData[col.subtitle]}}</p>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n\r\n </td>\r\n }\r\n\r\n <td style=\"border-left: none;\" *ngIf=\"config.actions?.length ?? 0 > 0 || config.actionsPai\">\r\n\r\n <div *ngIf=\"config.actions?.length ?? 0 > 0 && validateActionPosition(rowNode)\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 22px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n\r\n @for (actionPai of config.actionsPai; track $index) {\r\n @if (getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <p-button\r\n [icon]=\"getIcon(actionPai.icon)\"\r\n [rounded]=\"true\"\r\n [severity]=\"actionPai.severity ?? 'secondary'\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n (onClick)=\"activeItem(rowData);actionPai.command($event);\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n >\r\n @if(!actionPai.icon.includes('pi-')) {\r\n <span class=\"material-icons text-xl\">{{ actionPai.icon }}</span>\r\n }\r\n </p-button>\r\n }\r\n }\r\n\r\n </div>\r\n }\r\n\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr >\r\n <td [attr.colspan]=\"config.columns.length + 1\" style=\"text-align: center; border-radius: 10px !important\">{{textoEmptyMessage}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n\r\n<div *ngIf=\"treeTableDraggable\" cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{'min-width': '50rem'}\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [pageLinks]=\"pageLinks\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n >\r\n\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 md:col-6 lg:col-4 justify-content-center {{tamanhoTela < 768 ? '' : 'input-search'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n\r\n <p-button\r\n [icon]=\"getIcon(action.icon)\"\r\n [rounded]=\"true\"\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n [style.backgroundColor]='\"#1DA750\"'\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems)\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n >\r\n @if (!action.icon.includes('pi-')){\r\n <span class=\"material-symbols-outlined md-22\" style=\"color: white\">\r\n {{ getOrExecute(action.icon, selectedItems) }}\r\n </span>\r\n }\r\n </p-button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"/>\r\n </div>\r\n\r\n <div\r\n [class]=\"centralizarColunas(col) && alignColunasHeader(col) == '' ? 'flex flex-row justify-content-center' : 'flex flex-row'\"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n />\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n ttResizableColumn\r\n [style.width]=\"col.width\"\r\n [style]=\"col.centralize ? 'text-align: center;' : ''\"\r\n >\r\n {{ col.header }} <br>\r\n </th>\r\n }\r\n\r\n @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n cdkDrag\r\n [cdkDragData]=\"rowNode\"\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ 'capitalize': tableCaptalized }\"\r\n >\r\n\r\n @for(col of columns; track $index){\r\n <td\r\n [style]=\"returnStyleRow(col, rowNode)\"\r\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"rowNode.level !== 0 ? rowNode.level*30 : null\"\r\n >\r\n\r\n <div class=\"flex flex-row {{col.boolean ? 'justify-content-center' : '' }}\">\r\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"$index == 0\">\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\r\n\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n *ngIf=\"config.enableSelect == true\"\r\n />\r\n\r\n </div>\r\n\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"flex flex-row align-items-center justify-content-center\">\r\n\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{rowData[col.field] ? 'pi-check text-green-300' : ''}}\"\r\n style=\"font-size: 1.1rem;\"\r\n ></i>\r\n\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p\r\n *ngIf=\"col.subtitle\"\r\n class=\"m-0 text-xs font-semibold\"\r\n >{{rowData[col.subtitle]}}</p>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n\r\n </td>\r\n }\r\n\r\n <td style=\"border-left: none;\" *ngIf=\"config.actions?.length ?? 0 > 0 || config.actionsPai\">\r\n\r\n <div *ngIf=\"config.actions?.length ?? 0 > 0 && validateActionPosition(rowNode)\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 22px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n\r\n @for (actionPai of config.actionsPai; track $index) {\r\n @if (getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <p-button\r\n [icon]=\"getIcon(actionPai.icon)\"\r\n [rounded]=\"true\"\r\n [severity]=\"actionPai.severity ?? 'secondary'\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n (onClick)=\"activeItem(rowData);actionPai.command($event);\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n >\r\n @if(!actionPai.icon.includes('pi-')) {\r\n <span class=\"material-icons text-xl\">{{ actionPai.icon }}</span>\r\n }\r\n </p-button>\r\n }\r\n }\r\n\r\n </div>\r\n }\r\n\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr >\r\n <td [attr.colspan]=\"config.columns.length + 1\" style=\"text-align: center; border-radius: 10px !important\">{{textoEmptyMessage}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .p-treetable table{border-spacing:0 3px}#botaoFiltro:hover{color:#d4d4d4}:host ::ng-deep .p-treetable .p-treetable-header{background-color:#eaeaea;padding:2px 0 0!important;border-radius:5px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea;padding:.5rem!important;margin-bottom:-5px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.5rem!important}:host ::ng-deep .p-treetable .p-treetable-thead{border-spacing:0 1px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:first-of-type{background-color:#eaeaea;padding:.5rem!important;border-top-left-radius:5px!important;border-bottom-left-radius:5px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{background-color:#eaeaea;padding:.5rem!important;border-radius:0 5px 5px 0!important;-webkit-border-radius:0 5px 5px 0!important;-moz-border-radius:0 5px 5px 0!important;-ms-border-radius:0 5px 5px 0!important;-o-border-radius:0 5px 5px 0!important}:host ::ng-deep .p-treetable-scrollable-header-box{padding:0!important}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{background-color:#f2f2f2}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep #tr-style{border-left:solid 4px #5289B4!important;border-radius:10px!important;display:block}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-right:none!important;border-radius:10px 0 0 10px!important;-webkit-border-radius:10px 0 0 10px!important;-moz-border-radius:10px 0 0 10px!important;-ms-border-radius:10px 0 0 10px!important;-o-border-radius:10px 0 0 10px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important;-webkit-border-radius:0 10px 10px 0!important;-moz-border-radius:0 10px 10px 0!important;-ms-border-radius:0 10px 10px 0!important;-o-border-radius:0 10px 10px 0!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;box-shadow:#0000003d 0 3px 8px;width:2.5rem!important;height:2.5rem!important;display:flex;align-items:center;justify-content:center}:host ::ng-deep .p-treetable table{border-collapse:separate!important;table-layout:auto!important}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}.cdk-drag-preview{display:flex;align-items:center;border-left:solid 4px #5289B4!important;border-radius:10px!important;border:2px dashed #ccc;background-color:#ffffff80}.cdk-drop-list-dragging{cursor:grabbing}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i7.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i9.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i10.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i10.TTSortableColumn, selector: "[ttSortableColumn]", inputs: ["ttSortableColumn", "ttSortableColumnDisabled"] }, { kind: "directive", type: i10.TTResizableColumn, selector: "[ttResizableColumn]", inputs: ["ttResizableColumnDisabled"] }, { kind: "directive", type: i10.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i10.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i10.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }] }); }
233
+ }
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreetableComponent, decorators: [{
235
+ type: Component,
236
+ args: [{ selector: 'kv-tree-table', template: "<div *ngIf=\"!treeTableDraggable\">\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{'min-width': '50rem'}\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [pageLinks]=\"pageLinks\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (onNodeSelect)=\"onNodeSelected($event)\"\r\n (onNodeUnselect)=\"onNodeUnselected($event)\"\r\n >\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 md:col-6 lg:col-4 justify-content-center {{tamanhoTela < 768 ? '' : 'input-search'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n <p-button\r\n [icon]=\"getIcon(action.icon)\"\r\n [rounded]=\"true\"\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n [style.backgroundColor]='\"#1DA750\"'\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems)\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n >\r\n @if (!action.icon.includes('pi-')){\r\n <span class=\"material-symbols-outlined md-22\" style=\"color: white\">\r\n {{ getOrExecute(action.icon, selectedItems) }}\r\n </span>\r\n }\r\n </p-button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"/>\r\n </div>\r\n\r\n <div\r\n [class]=\"centralizarColunas(col) && alignColunasHeader(col) == '' ? 'flex flex-row justify-content-center' : 'flex flex-row'\"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n />\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n ttResizableColumn\r\n [style.width]=\"col.width\"\r\n [style]=\"col.centralize ? 'text-align: center;' : ''\"\r\n >\r\n {{ col.header }} <br>\r\n </th>\r\n }\r\n\r\n @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ 'capitalize': tableCaptalized }\"\r\n >\r\n\r\n @for(col of columns; track $index){\r\n <td\r\n [style]=\"returnStyleRow(col, rowNode)\"\r\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"rowNode.level !== 0 ? rowNode.level*30 : null\"\r\n >\r\n\r\n <div class=\"flex flex-row {{col.boolean ? 'justify-content-center' : '' }}\">\r\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"$index == 0\">\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\r\n\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n *ngIf=\"config.enableSelect == true\"\r\n />\r\n\r\n </div>\r\n\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"flex flex-row align-items-center justify-content-center\">\r\n\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{rowData[col.field] ? 'pi-check text-green-300' : ''}}\"\r\n style=\"font-size: 1.1rem;\"\r\n ></i>\r\n\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p\r\n *ngIf=\"col.subtitle\"\r\n class=\"m-0 text-xs font-semibold\"\r\n >{{rowData[col.subtitle]}}</p>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n\r\n </td>\r\n }\r\n\r\n <td style=\"border-left: none;\" *ngIf=\"config.actions?.length ?? 0 > 0 || config.actionsPai\">\r\n\r\n <div *ngIf=\"config.actions?.length ?? 0 > 0 && validateActionPosition(rowNode)\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 22px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n\r\n @for (actionPai of config.actionsPai; track $index) {\r\n @if (getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <p-button\r\n [icon]=\"getIcon(actionPai.icon)\"\r\n [rounded]=\"true\"\r\n [severity]=\"actionPai.severity ?? 'secondary'\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n (onClick)=\"activeItem(rowData);actionPai.command($event);\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n >\r\n @if(!actionPai.icon.includes('pi-')) {\r\n <span class=\"material-icons text-xl\">{{ actionPai.icon }}</span>\r\n }\r\n </p-button>\r\n }\r\n }\r\n\r\n </div>\r\n }\r\n\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr >\r\n <td [attr.colspan]=\"config.columns.length + 1\" style=\"text-align: center; border-radius: 10px !important\">{{textoEmptyMessage}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n\r\n<div *ngIf=\"treeTableDraggable\" cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{'min-width': '50rem'}\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [pageLinks]=\"pageLinks\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n >\r\n\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 md:col-6 lg:col-4 justify-content-center {{tamanhoTela < 768 ? '' : 'input-search'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n\r\n <p-button\r\n [icon]=\"getIcon(action.icon)\"\r\n [rounded]=\"true\"\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n [style.backgroundColor]='\"#1DA750\"'\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems)\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n >\r\n @if (!action.icon.includes('pi-')){\r\n <span class=\"material-symbols-outlined md-22\" style=\"color: white\">\r\n {{ getOrExecute(action.icon, selectedItems) }}\r\n </span>\r\n }\r\n </p-button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"/>\r\n </div>\r\n\r\n <div\r\n [class]=\"centralizarColunas(col) && alignColunasHeader(col) == '' ? 'flex flex-row justify-content-center' : 'flex flex-row'\"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n />\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n ttResizableColumn\r\n [style.width]=\"col.width\"\r\n [style]=\"col.centralize ? 'text-align: center;' : ''\"\r\n >\r\n {{ col.header }} <br>\r\n </th>\r\n }\r\n\r\n @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n cdkDrag\r\n [cdkDragData]=\"rowNode\"\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ 'capitalize': tableCaptalized }\"\r\n >\r\n\r\n @for(col of columns; track $index){\r\n <td\r\n [style]=\"returnStyleRow(col, rowNode)\"\r\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"rowNode.level !== 0 ? rowNode.level*30 : null\"\r\n >\r\n\r\n <div class=\"flex flex-row {{col.boolean ? 'justify-content-center' : '' }}\">\r\n <div class=\"w-full-h-full flex align-items-center\" *ngIf=\"$index == 0\">\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\r\n\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n *ngIf=\"config.enableSelect == true\"\r\n />\r\n\r\n </div>\r\n\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"flex flex-row align-items-center justify-content-center\">\r\n\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{rowData[col.field] ? 'pi-check text-green-300' : ''}}\"\r\n style=\"font-size: 1.1rem;\"\r\n ></i>\r\n\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p\r\n *ngIf=\"col.subtitle\"\r\n class=\"m-0 text-xs font-semibold\"\r\n >{{rowData[col.subtitle]}}</p>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n\r\n </td>\r\n }\r\n\r\n <td style=\"border-left: none;\" *ngIf=\"config.actions?.length ?? 0 > 0 || config.actionsPai\">\r\n\r\n <div *ngIf=\"config.actions?.length ?? 0 > 0 && validateActionPosition(rowNode)\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 22px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n\r\n @for (actionPai of config.actionsPai; track $index) {\r\n @if (getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <p-button\r\n [icon]=\"getIcon(actionPai.icon)\"\r\n [rounded]=\"true\"\r\n [severity]=\"actionPai.severity ?? 'secondary'\"\r\n [style]=\"{width: '2rem', height: '2rem'}\"\r\n (onClick)=\"activeItem(rowData);actionPai.command($event);\"\r\n styleClass=\"p-0 flex justify-content-center\"\r\n >\r\n @if(!actionPai.icon.includes('pi-')) {\r\n <span class=\"material-icons text-xl\">{{ actionPai.icon }}</span>\r\n }\r\n </p-button>\r\n }\r\n }\r\n\r\n </div>\r\n }\r\n\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr >\r\n <td [attr.colspan]=\"config.columns.length + 1\" style=\"text-align: center; border-radius: 10px !important\">{{textoEmptyMessage}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .p-treetable table{border-spacing:0 3px}#botaoFiltro:hover{color:#d4d4d4}:host ::ng-deep .p-treetable .p-treetable-header{background-color:#eaeaea;padding:2px 0 0!important;border-radius:5px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea;padding:.5rem!important;margin-bottom:-5px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.5rem!important}:host ::ng-deep .p-treetable .p-treetable-thead{border-spacing:0 1px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:first-of-type{background-color:#eaeaea;padding:.5rem!important;border-top-left-radius:5px!important;border-bottom-left-radius:5px!important}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{background-color:#eaeaea;padding:.5rem!important;border-radius:0 5px 5px 0!important;-webkit-border-radius:0 5px 5px 0!important;-moz-border-radius:0 5px 5px 0!important;-ms-border-radius:0 5px 5px 0!important;-o-border-radius:0 5px 5px 0!important}:host ::ng-deep .p-treetable-scrollable-header-box{padding:0!important}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{background-color:#f2f2f2}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep #tr-style{border-left:solid 4px #5289B4!important;border-radius:10px!important;display:block}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-right:none!important;border-radius:10px 0 0 10px!important;-webkit-border-radius:10px 0 0 10px!important;-moz-border-radius:10px 0 0 10px!important;-ms-border-radius:10px 0 0 10px!important;-o-border-radius:10px 0 0 10px!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important;-webkit-border-radius:0 10px 10px 0!important;-moz-border-radius:0 10px 10px 0!important;-ms-border-radius:0 10px 10px 0!important;-o-border-radius:0 10px 10px 0!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;box-shadow:#0000003d 0 3px 8px;width:2.5rem!important;height:2.5rem!important;display:flex;align-items:center;justify-content:center}:host ::ng-deep .p-treetable table{border-collapse:separate!important;table-layout:auto!important}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}.cdk-drag-preview{display:flex;align-items:center;border-left:solid 4px #5289B4!important;border-radius:10px!important;border:2px dashed #ccc;background-color:#ffffff80}.cdk-drop-list-dragging{cursor:grabbing}\n"] }]
237
+ }], propDecorators: { config: [{
238
+ type: Input
239
+ }], dataSource: [{
240
+ type: Input
241
+ }], gridLines: [{
242
+ type: Input
243
+ }], tableCaptalized: [{
244
+ type: Input
245
+ }], selectedItems: [{
246
+ type: Input
247
+ }], paginator: [{
248
+ type: Input
249
+ }], rows: [{
250
+ type: Input
251
+ }], pageLinks: [{
252
+ type: Input
253
+ }], showFirstLastIcon: [{
254
+ type: Input
255
+ }], treeTableDraggable: [{
256
+ type: Input
257
+ }], transferArrayItem: [{
258
+ type: Input
259
+ }], ordenacao: [{
260
+ type: Input
261
+ }], totalRecords: [{
262
+ type: Input
263
+ }], textoEmptyMessage: [{
264
+ type: Input
265
+ }], onFilter: [{
266
+ type: Output
267
+ }], onPaginate: [{
268
+ type: Output
269
+ }], onActiveItem: [{
270
+ type: Output
271
+ }], onActiveItemLote: [{
272
+ type: Output
273
+ }], doubleClickEvent: [{
274
+ type: Output
275
+ }], onNodeSelect: [{
276
+ type: Output
277
+ }], onNodeUnselect: [{
278
+ type: Output
279
+ }], onDropItem: [{
280
+ type: Output
281
+ }], templates: [{
282
+ type: ContentChildren,
283
+ args: [TemplateDirective]
284
+ }], _templates: [{
285
+ type: Input,
286
+ args: ['templates']
287
+ }], onWindowResize: [{
288
+ type: HostListener,
289
+ args: ['window:resize', ['$event']]
290
+ }] } });
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLXRhYmxlL2t2LXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdHJlZS10YWJsZS9rdi10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQWEsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRWhHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRXJGLE9BQU8sRUFBZSxlQUFlLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7OztBQVV6RixNQUFNLE9BQU8sb0JBQW9CO0lBUmpDO1FBVUUsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQUtsQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsU0FBSSxHQUFHLEVBQUUsQ0FBQTtRQUNULGNBQVMsR0FBRyxDQUFDLENBQUE7UUFDYixzQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFDekIsdUJBQWtCLEdBQUcsS0FBSyxDQUFBO1FBQzFCLHNCQUFpQixHQUFHLEtBQUssQ0FBQTtRQUd6QixzQkFBaUIsR0FBVyw0QkFBNEIsQ0FBQztRQUV4RCxhQUFRLEdBQXNCLElB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QW9CO2tHQUFwQixvQkFBb0IsdTJCQW9DZCxpQkFBaUIsNkJDaEVwQywwaXhCQTRpQkE7OzJGRGhoQmEsb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLGVBQWU7OEJBWWhCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQVM2QixTQUFTO3NCQUE1QyxlQUFlO3VCQUFDLGlCQUFpQjtnQkFDZCxVQUFVO3NCQUE3QixLQUFLO3VCQUFDLFdBQVc7Z0JBR2xCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFRlbXBsYXRlUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSwgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRyZWVUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZXRhYmxlJztcclxuXHJcbmltcG9ydCB7IFZhbHVlT3JGbiwgZ2V0T3JFeGVjdXRlLCBtYXBUb01lbnVJdGVtIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUva3YtbWVudWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2FwaS9kaXJlY3RpdmVzL3RlbXBsYXRlL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRyZWVUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb25maWcnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10cmVlLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4va3YtdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBLdlRyZWV0YWJsZUNvbXBvbmVudCB7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIHRhbWFuaG9UZWxhITogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBjb25maWchOiBUcmVlVGFibGVDb25maWc7XHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IGFueTtcclxuICBASW5wdXQoKSBncmlkTGluZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZUNhcHRhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBwYWdpbmF0b3IgPSBmYWxzZTtcclxuICBASW5wdXQoKSByb3dzID0gMTBcclxuICBASW5wdXQoKSBwYWdlTGlua3MgPSAyXHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIHRyZWVUYWJsZURyYWdnYWJsZSA9IGZhbHNlXHJcbiAgQElucHV0KCkgdHJhbnNmZXJBcnJheUl0ZW0gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIG9yZGVuYWNhbyE6IHN0cmluZ1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcclxuICBASW5wdXQoKSB0ZXh0b0VtcHR5TWVzc2FnZTogc3RyaW5nID0gJ05lbmh1bSByZWdpc3RybyBlbmNvbnRyYWRvJztcclxuXHJcbiAgQE91dHB1dCgpIG9uRmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Ob2RlU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Ob2RlVW5zZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkRyb3BJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIGlmKHRoaXMub3JkZW5hY2FvKXtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuc29ydFRyZWVOb2Rlcyh0aGlzLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XHJcbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW0uZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JFeGVjdXRlPFQ+KGFjdGlvbjogVmFsdWVPckZuPFQ+LCBkYXRhOiBhbnkpOiBUIHtcclxuICAgIHJldHVybiBnZXRPckV4ZWN1dGUoYWN0aW9uLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkdsb2JhbEZpbHRlcih0YWJsZTogVHJlZVRhYmxlLCBldmVudDogRXZlbnQpIHtcclxuICAgIHRoaXMub25GaWx0ZXIuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdpbmF0ZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XHJcbiAgICAgICAgKCRldmVudD8uZmlyc3QgPiAwID8gJGV2ZW50LmZpcnN0IC8gJGV2ZW50LnJvd3MgOiAkZXZlbnQuZmlyc3QpICsgMTtcclxuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcclxuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKCRldmVudC5nbG9iYWxGaWx0ZXIpIHRlcm1vUGVzcXVpc2EgPSAkZXZlbnQuZ2xvYmFsRmlsdGVyO1xyXG5cclxuICAgICAgaWYgKCRldmVudC5zb3J0RmllbGQpXHJcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7ICRldmVudC5zb3J0RmllbGQgfSAkeyAkZXZlbnQuc29ydE9yZGVyID09PSAxID8gJ0FTQycgOiAnREVTQydcclxuICAgICAgICAgIH1gO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogJGV2ZW50LnJvd3MsXHJcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcclxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMub25QYWdpbmF0ZS5lbWl0KG9iamV0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+KSB7XHJcbiAgICBjb25zdCBkcmFnZ2VkTm9kZSA9IGV2ZW50Lml0ZW0uZGF0YTtcclxuICAgIGNvbnN0IGRyYWdnZWRDaGlsZERhdGEgPSBkcmFnZ2VkTm9kZS5ub2RlLmRhdGE7XHJcbiAgXHJcbiAgICBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPT09IDApIHtcclxuICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZGF0YVNvdXJjZSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPj0gMSkge1xyXG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gZHJhZ2dlZE5vZGUubm9kZS5wYXJlbnQ7XHJcbiAgXHJcbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRyZW4gPSBwYXJlbnROb2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZGF0YSk7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNDaGlsZEluZGV4ID0gcGFyZW50Q2hpbGRyZW4uaW5kZXhPZihkcmFnZ2VkQ2hpbGREYXRhKTtcclxuICBcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCByZWxhdGl2ZUN1cnJlbnRJbmRleCA9IHByZXZpb3VzQ2hpbGRJbmRleCArIChldmVudC5jdXJyZW50SW5kZXggLSBldmVudC5wcmV2aW91c0luZGV4KTtcclxuICBcclxuICBcclxuICAgICAgICBjb25zdCB0YXJnZXRDaGlsZEluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocGFyZW50Q2hpbGRyZW4ubGVuZ3RoIC0gMSwgcmVsYXRpdmVDdXJyZW50SW5kZXgpKTtcclxuICBcclxuICBcclxuICAgICAgICBpZiAocHJldmlvdXNDaGlsZEluZGV4ICE9PSAtMSAmJiB0YXJnZXRDaGlsZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHBhcmVudE5vZGUuY2hpbGRyZW4sIHByZXZpb3VzQ2hpbGRJbmRleCwgdGFyZ2V0Q2hpbGRJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRyb3BJbmZvOiBhbnkgPSB7XHJcbiAgICAgICAgICBwcmV2aW91c0NoaWxkSW5kZXg6IHByZXZpb3VzQ2hpbGRJbmRleCArIDEsXHJcbiAgICAgICAgICB0YXJnZXRDaGlsZEluZGV4OiB0YXJnZXRDaGlsZEluZGV4ICsgMVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vbkRyb3BJdGVtLmVtaXQoeyBldmVudDogZXZlbnQsIGRyb3BDaGlsZEluZm86IGRyb3BJbmZvIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuICAgIGlmKGRyYWdnZWROb2RlLmxldmVsID09PSAwKXtcclxuICAgICAgdGhpcy5vbkRyb3BJdGVtLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBzb3J0VHJlZU5vZGVzKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gbm9kZXMuc29ydCgoYSwgYikgPT4gYS5kYXRhW3RoaXMub3JkZW5hY2FvXSAtIGIuZGF0YVt0aGlzLm9yZGVuYWNhb10pLm1hcChub2RlID0+IHtcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBub2RlLmNoaWxkcmVuID0gdGhpcy5zb3J0VHJlZU5vZGVzKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUYXJnZXRDaGlsZEluZGV4KGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+LCBwYXJlbnRDaGlsZHJlbjogYW55W10sIHByZXZpb3VzQ2hpbGRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHRhcmdldENoaWxkSW5kZXggPSBwcmV2aW91c0NoaWxkSW5kZXggKyAoZXZlbnQuY3VycmVudEluZGV4IC0gZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgXHJcbiAgICBpZiAodGFyZ2V0Q2hpbGRJbmRleCA8IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9IGVsc2UgaWYgKHRhcmdldENoaWxkSW5kZXggPj0gcGFyZW50Q2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBwYXJlbnRDaGlsZHJlbi5sZW5ndGggLSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRhcmdldENoaWxkSW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm5TdHlsZVJvdyhjb2w6IGFueSwgcm93Tm9kZTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGlzRmlyc3RDb2x1bW4gPSBjb2wuZmllbGQgPT09IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0uZmllbGQ7XHJcbiAgICBjb25zdCBiYXNlT3BhY2l0eSA9IDE7XHJcbiAgICBjb25zdCBtYXhMZXZlbHMgPSA0O1xyXG5cclxuICAgIGlmIChpc0ZpcnN0Q29sdW1uICYmIHJvd05vZGUubGV2ZWwgPj0gMCkge1xyXG4gICAgICBjb25zdCBvcGFjaXR5ID0gYmFzZU9wYWNpdHkgLSAocm93Tm9kZS5sZXZlbCAvIG1heExldmVscyk7XHJcblxyXG4gICAgICByZXR1cm4gYGJvcmRlci1sZWZ0OiBzb2xpZCA0cHggcmdiYSg1OSwgMTEwLCAxNTgsICR7IG9wYWNpdHkgfSkgIWltcG9ydGFudDtgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dOb2RlLmxldmVsID09IDApXHJcbiAgICAgIHJldHVybiAnYm9yZGVyLWxlZnQ6IG5vbmUgIWltcG9ydGFudDsgYm9yZGVyLXJpZ2h0OiBub25lICFpbXBvcnRhbnQnXHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgaWYgKGNvbC5hbGlnbiA9PSAncmlnaHQnKSByZXR1cm4gJ2p1c3RpZnktY29udGVudDogZW5kJztcclxuICAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuICBjZW50cmFsaXphckNvbHVuYXMoY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XHJcbiAgICAgIHJldHVybiAndGV4dC1hbGlnbjogY2VudGVyOyAnO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbiAgYWxpZ25Db2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAkeyBjb2wuYWxpZ24gfWA7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgY3JpYXJNZW51c01vZGFsKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmFjdGlvbnMgJiYgZGF0YSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmNvbmZpZy5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbWVudUluc2VydCA9IG1hcFRvTWVudUl0ZW0oYWN0aW9uLCBkYXRhKTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICB4ID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlQWN0aW9uUG9zaXRpb24ocm93Tm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9uc1BhaSAmJiByb3dOb2RlLmxldmVsID09IDApIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2UgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG5cclxuICAgIGxldCBldmVudERvdWJsZUNsaWNrID0geyBldmVudDogZSwgcm93RGF0YTogcm93RGF0YSB9O1xyXG5cclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xyXG5cclxuICAgIC8vIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXHJcbiAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhOiBhbnksIHJvd05vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhLCByb3dOb2RlKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Ob2RlU2VsZWN0ZWQoZXZlbnQ6IGFueSl7XHJcbiAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uTm9kZVVuc2VsZWN0ZWQoZXZlbnQ6IGFueSl7XHJcbiAgICB0aGlzLm9uTm9kZVVuc2VsZWN0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVNob3dUZW1wbGF0ZShyb3dOb2RlOiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY29sLnRlbXBsYXRlT25seSkge1xyXG4gICAgICBpZiAoY29sLnRlbXBsYXRlT25seSA9PT0gJ3BhaScpIHtcclxuICAgICAgICByZXR1cm4gcm93Tm9kZS5sZXZlbCA9PT0gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLnRlbXBsYXRlT25seSA9PT0gJ2ZpbGhvJykge1xyXG4gICAgICAgIHJldHVybiByb3dOb2RlLmxldmVsID09PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldEljb24oaWNvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBpY29uLmluY2x1ZGVzKCdwaS0nKSA/IGBwaSAkeyBpY29uIH1gIDogJyc7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCIhdHJlZVRhYmxlRHJhZ2dhYmxlXCI+XHJcbiAgICA8cC10cmVlVGFibGVcclxuICAgICAgICAjdHRcclxuICAgICAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxyXG4gICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxyXG4gICAgICAgIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzUwcmVtJ31cIlxyXG4gICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxyXG4gICAgICAgIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcclxuICAgICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc1wiXHJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCJcclxuICAgICAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwic2hvd0ZpcnN0TGFzdEljb25cIlxyXG4gICAgICAgIFtzdHlsZUNsYXNzXT1cImdyaWRMaW5lcyA/ICdwLXRyZWV0YWJsZS1ncmlkbGluZXMnIDogJydcIlxyXG4gICAgICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgICBbbGF6eV09XCJjb25maWcubGF6eVwiXHJcbiAgICAgICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcclxuICAgICAgICAob25Ob2RlU2VsZWN0KT1cIm9uTm9kZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgIChvbk5vZGVVbnNlbGVjdCk9XCJvbk5vZGVVbnNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBwVGVtcGxhdGU9XCJjYXB0aW9uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlQ2F0aW9uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWcudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgY29sLTEwIG1kOmNvbC02IGxnOmNvbC00IGp1c3RpZnktY29udGVudC1jZW50ZXIge3t0YW1hbmhvVGVsYSA8IDc2OCA/ICcnIDogJ2lucHV0LXNlYXJjaCd9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodHQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb2wtMSBqdXN0aWZ5LWNvbnRlbnQtZW5kIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG5zLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0SWNvbihhY3Rpb24uaWNvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLTAgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPSdcIiMxREE3NTBcIidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie3dpZHRoOiAnMnJlbScsIGhlaWdodDogJzJyZW0nfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWFjdGlvbi5pY29uLmluY2x1ZGVzKCdwaS0nKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMjJcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldE9yRXhlY3V0ZShhY3Rpb24uaWNvbiwgc2VsZWN0ZWRJdGVtcykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgQGZvcihjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KXtcclxuICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBmbGV4OiAkaW5kZXggPT0gMCwgJ2dhcC0zJzogJGluZGV4ID09IDAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiRpbmRleCA9PSAwICYmIGNvbmZpZy5lbmFibGVTZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveCAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICYmIGFsaWduQ29sdW5hc0hlYWRlcihjb2wpID09ICcnID8gJ2ZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnZmxleCBmbGV4LXJvdydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJhbGlnbkNvbHVuYXNIZWFkZXIoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5zb3J0YWJsZSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmluZm88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgdHRSZXNpemFibGVDb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29sLmNlbnRyYWxpemUgPyAndGV4dC1hbGlnbjogY2VudGVyOycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fSA8YnI+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCkge1xyXG4gICAgICAgICAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCI1XCI+PC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBwVGVtcGxhdGU9XCJib2R5XCJcclxuICAgICAgICAgICAgbGV0LXJvd05vZGVcclxuICAgICAgICAgICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgW3R0Um93XT1cInJvd05vZGVcIlxyXG4gICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImRvdWJsZUNsaWNrKCRldmVudCwgcm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY2FwaXRhbGl6ZSc6IHRhYmxlQ2FwdGFsaXplZCB9XCJcclxuICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgIEBmb3IoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCl7XHJcbiAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwicmV0dXJuU3R5bGVSb3coY29sLCByb3dOb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInJvd05vZGUubGV2ZWwgIT09IDAgPyAnc3RpY2t5JyA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cInJvd05vZGUubGV2ZWwgIT09IDAgPyByb3dOb2RlLmxldmVsKjMwIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93ICB7e2NvbC5ib29sZWFuID8gJ2p1c3RpZnktY29udGVudC1jZW50ZXInIDogJycgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbC1oLWZ1bGwgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cIiRpbmRleCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVUb2dnbGVyIGNsYXNzPVwiaGlkZGVuVmlzaWJsZVwiIFtyb3dOb2RlXT1cInJvd05vZGVcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhLCByb3dOb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93Tm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0ID09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuYm9vbGVhblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGkge3tyb3dEYXRhW2NvbC5maWVsZF0gPyAncGktY2hlY2sgdGV4dC1ncmVlbi0zMDAnIDogJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxLjFyZW07XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cIiFjb2wuYm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tMFwiPnt7IHJvd0RhdGFbY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5zdWJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tyb3dEYXRhW2NvbC5zdWJ0aXRsZV19fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudGVtcGxhdGUgJiYgdmFsaWRhdGVTaG93VGVtcGxhdGUocm93Tm9kZSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cImJvcmRlci1sZWZ0OiBub25lO1wiICpuZ0lmPVwiY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCB8fCBjb25maWcuYWN0aW9uc1BhaVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCAmJiB2YWxpZGF0ZUFjdGlvblBvc2l0aW9uKHJvd05vZGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3Vyc29yLXBvaW50ZXIgaWNvbi1tb3JlLWhvcml6XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yKGFjdGlvbiBvZiBjb25maWcuYWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1tZW51XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW1lbnU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICBAaWYoY29uZmlnLmFjdGlvbnNQYWk/Lmxlbmd0aCA/PyAwID4gMCAmJiByb3dOb2RlLmxldmVsID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvblBhaSBvZiBjb25maWcuYWN0aW9uc1BhaTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0T3JFeGVjdXRlKGFjdGlvblBhaS52aXNpYmxlLCByb3dEYXRhKSA/PyB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0SWNvbihhY3Rpb25QYWkuaWNvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYWN0aW9uUGFpLnNldmVyaXR5ID8/ICdzZWNvbmRhcnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7d2lkdGg6ICcycmVtJywgaGVpZ2h0OiAnMnJlbSd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSk7YWN0aW9uUGFpLmNvbW1hbmQoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtMCBmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoIWFjdGlvblBhaS5pY29uLmluY2x1ZGVzKCdwaS0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyB0ZXh0LXhsXCI+e3sgYWN0aW9uUGFpLmljb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICA8dHIgPlxyXG4gICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbmZpZy5jb2x1bW5zLmxlbmd0aCArIDFcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50XCI+e3t0ZXh0b0VtcHR5TWVzc2FnZX19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdHJlZVRhYmxlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJ0cmVlVGFibGVEcmFnZ2FibGVcIiBjZGtEcm9wTGlzdCBjbGFzcz1cImV4YW1wbGUtbGlzdFwiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XHJcbiAgICA8cC10cmVlVGFibGVcclxuICAgICAgICAjdHRcclxuICAgICAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxyXG4gICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxyXG4gICAgICAgIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzUwcmVtJ31cIlxyXG4gICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxyXG4gICAgICAgIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcclxuICAgICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc1wiXHJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCJcclxuICAgICAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwic2hvd0ZpcnN0TGFzdEljb25cIlxyXG4gICAgICAgIFtzdHlsZUNsYXNzXT1cImdyaWRMaW5lcyA/ICdwLXRyZWV0YWJsZS1ncmlkbGluZXMnIDogJydcIlxyXG4gICAgICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgICBbbGF6eV09XCJjb25maWcubGF6eVwiXHJcbiAgICAgICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcclxuICAgID5cclxuXHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBwVGVtcGxhdGU9XCJjYXB0aW9uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlQ2F0aW9uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWcudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgY29sLTEwIG1kOmNvbC02IGxnOmNvbC00IGp1c3RpZnktY29udGVudC1jZW50ZXIge3t0YW1hbmhvVGVsYSA8IDc2OCA/ICcnIDogJ2lucHV0LXNlYXJjaCd9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodHQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb2wtMSBqdXN0aWZ5LWNvbnRlbnQtZW5kIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG5zLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZTsgdHJhY2sgJGluZGV4KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImdldEljb24oYWN0aW9uLmljb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIHx8IGFjdGlvbi5zaG93QWNvZXNMb3RlKSAmJiBleGliaXJDYW1wbyhhY3Rpb24sIHRoaXMuYWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC0wIGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT0nXCIjMURBNzUwXCInXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldE9yRXhlY3V0ZShhY3Rpb24udG9vbHRpcCwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5kaXNhYmxlZCwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInt3aWR0aDogJzJyZW0nLCBoZWlnaHQ6ICcycmVtJ31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFhY3Rpb24uaWNvbi5pbmNsdWRlcygncGktJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTIyXCIgc3R5bGU9XCJjb2xvcjogd2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRPckV4ZWN1dGUoYWN0aW9uLmljb24sIHNlbGVjdGVkSXRlbXMpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIEBmb3IoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCl7XHJcbiAgICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLnNvcnRhYmxlID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZmxleDogJGluZGV4ID09IDAsICdnYXAtMyc6ICRpbmRleCA9PSAwIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIkaW5kZXggPT0gMCAmJiBjb25maWcuZW5hYmxlU2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3ggKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJyA/ICdmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXInIDogJ2ZsZXggZmxleC1yb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiYWxpZ25Db2x1bmFzSGVhZGVyKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc29ydGFibGUgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5pbmZvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgIHR0UmVzaXphYmxlQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbC5jZW50cmFsaXplID8gJ3RleHQtYWxpZ246IGNlbnRlcjsnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX0gPGJyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApIHtcclxuICAgICAgICAgICAgICAgIDx0aCBbc3R5bGUud2lkdGhdPVwiNVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICBcclxuICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgICAgICAgIGxldC1yb3dOb2RlXHJcbiAgICAgICAgICAgIGxldC1yb3dEYXRhPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIGNka0RyYWdcclxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dOb2RlXCJcclxuICAgICAgICAgICAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcclxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NhcGl0YWxpemUnOiB0YWJsZUNhcHRhbGl6ZWQgfVwiXHJcbiAgICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICAgICAgICBAZm9yKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInJldHVyblN0eWxlUm93KGNvbCwgcm93Tm9kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5wb3NpdGlvbl09XCJyb3dOb2RlLmxldmVsICE9PSAwID8gJ3N0aWNreScgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJyb3dOb2RlLmxldmVsICE9PSAwID8gcm93Tm9kZS5sZXZlbCozMCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyAge3tjb2wuYm9vbGVhbiA/ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyA6ICcnIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwtaC1mdWxsIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCIkaW5kZXggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBjbGFzcz1cImhpZGRlblZpc2libGVcIiBbcm93Tm9kZV09XCJyb3dOb2RlXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSwgcm93Tm9kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd05vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdCA9PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmJvb2xlYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHt7cm93RGF0YVtjb2wuZmllbGRdID8gJ3BpLWNoZWNrIHRleHQtZ3JlZW4tMzAwJyA6ICcnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMS4xcmVtO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nSWY9XCIhY29sLmJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLTBcIj57eyByb3dEYXRhW2NvbC5maWVsZF0gfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc3VidGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLTAgdGV4dC14cyBmb250LXNlbWlib2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7cm93RGF0YVtjb2wuc3VidGl0bGVdfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnRlbXBsYXRlICYmIHZhbGlkYXRlU2hvd1RlbXBsYXRlKHJvd05vZGUsIGNvbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJib3JkZXItbGVmdDogbm9uZTtcIiAqbmdJZj1cImNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDAgfHwgY29uZmlnLmFjdGlvbnNQYWlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDAgJiYgdmFsaWRhdGVBY3Rpb25Qb3NpdGlvbihyb3dOb2RlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZS1ob3JpelwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjJweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfaG9yaXpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbWVudVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJtZW51SXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1tZW51PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKGNvbmZpZy5hY3Rpb25zUGFpPy5sZW5ndGggPz8gMCA+IDAgJiYgcm93Tm9kZS5sZXZlbCA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb25QYWkgb2YgY29uZmlnLmFjdGlvbnNQYWk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdldE9yRXhlY3V0ZShhY3Rpb25QYWkudmlzaWJsZSwgcm93RGF0YSkgPz8gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImdldEljb24oYWN0aW9uUGFpLmljb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvblBhaS5zZXZlcml0eSA/PyAnc2Vjb25kYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie3dpZHRoOiAnMnJlbScsIGhlaWdodDogJzJyZW0nfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpO2FjdGlvblBhaS5jb21tYW5kKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLTAgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKCFhY3Rpb25QYWkuaWNvbi5pbmNsdWRlcygncGktJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgdGV4dC14bFwiPnt7IGFjdGlvblBhaS5pY29uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgPHRyID5cclxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb25maWcuY29sdW1ucy5sZW5ndGggKyAxXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudFwiPnt7dGV4dG9FbXB0eU1lc3NhZ2V9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRyZWVUYWJsZT5cclxuPC9kaXY+XHJcbiJdfQ==