keevo-components 2.0.107 → 2.0.109

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 (756) 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 +104 -0
  4. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +308 -0
  5. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +91 -0
  6. package/esm2022/lib/api/base-components/base-component-crud.mjs +80 -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 +238 -0
  9. package/esm2022/lib/api/base-components/base-component-input.mjs +101 -0
  10. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +174 -0
  11. package/esm2022/lib/api/base-components/base-component-table.mjs +354 -0
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -0
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -0
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -0
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -0
  16. package/esm2022/lib/api/components/chart/orchartnode.mjs +2 -0
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -0
  18. package/esm2022/lib/api/components/step/step.model.mjs +2 -0
  19. package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +2 -0
  20. package/esm2022/lib/api/components/table/action-item.mjs +2 -0
  21. package/esm2022/lib/api/components/table/kv-menuitem.mjs +46 -0
  22. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -0
  23. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -0
  24. package/esm2022/lib/api/components/table/table.config.mjs +2 -0
  25. package/esm2022/lib/api/components/table/table.paginate.mjs +10 -0
  26. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -0
  27. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -0
  28. package/esm2022/lib/api/components/tree-table/tree-table-keys.mjs +2 -0
  29. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +3 -0
  30. package/esm2022/lib/api/directives/directives.module.mjs +30 -0
  31. package/esm2022/lib/api/directives/drag/drag.directive.mjs +52 -0
  32. package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +31 -0
  33. package/esm2022/lib/api/directives/template/template.directive.mjs +24 -0
  34. package/esm2022/lib/api/helpers/component-providers.mjs +16 -0
  35. package/esm2022/lib/api/helpers/keevo-validators.mjs +144 -0
  36. package/esm2022/lib/api/helpers/severity-color.mjs +73 -0
  37. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -0
  38. package/esm2022/lib/api/modules/primeng.module.mjs +283 -0
  39. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +47 -0
  40. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -0
  41. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -0
  42. package/esm2022/lib/api/pipes/pipes.module.mjs +39 -0
  43. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -0
  44. package/esm2022/lib/api/services/base.api.service.mjs +74 -0
  45. package/esm2022/lib/api/services/breadcrumbs.service.mjs +62 -0
  46. package/esm2022/lib/api/services/chat.service.mjs +37 -0
  47. package/esm2022/lib/api/services/component.service.mjs +37 -0
  48. package/esm2022/lib/api/services/docs.service.mjs +129 -0
  49. package/esm2022/lib/api/services/form.service.mjs +95 -0
  50. package/esm2022/lib/api/services/image.cutter.service.mjs +193 -0
  51. package/esm2022/lib/api/services/imagens.service.mjs +28 -0
  52. package/esm2022/lib/api/services/notification.service.mjs +69 -0
  53. package/esm2022/lib/api/services/object.service.mjs +39 -0
  54. package/esm2022/lib/api/services/orgchart.service.mjs +64 -0
  55. package/esm2022/lib/api/services/pdf.service.mjs +48 -0
  56. package/esm2022/lib/api/types/breadcrumb.model.mjs +2 -0
  57. package/esm2022/lib/api/types/severity.mjs +2 -0
  58. package/esm2022/lib/components/keevo-components.module.mjs +232 -0
  59. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +142 -0
  60. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +55 -0
  61. package/esm2022/lib/components/kv-button/kv-button.component.mjs +51 -0
  62. package/esm2022/lib/components/kv-button/kv-button.module.mjs +28 -0
  63. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +25 -0
  64. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +39 -0
  65. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -0
  66. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -0
  67. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -0
  68. package/esm2022/lib/components/kv-card-selection/kv-card-selection.component.mjs +60 -0
  69. package/esm2022/lib/components/kv-card-selection/kv-card-selection.module.mjs +31 -0
  70. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +34 -0
  71. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -0
  72. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +166 -0
  73. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +32 -0
  74. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.mjs +32 -0
  75. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.mjs +22 -0
  76. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.component.mjs +185 -0
  77. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.module.mjs +44 -0
  78. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -0
  79. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -0
  80. package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +191 -0
  81. package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +23 -0
  82. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +46 -0
  83. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +20 -0
  84. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.mjs +68 -0
  85. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.mjs +24 -0
  86. package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +29 -0
  87. package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +34 -0
  88. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.component.mjs +103 -0
  89. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.module.mjs +31 -0
  90. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.pipe.mjs +30 -0
  91. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +26 -0
  92. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +28 -0
  93. package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +11 -0
  94. package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +19 -0
  95. package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +27 -0
  96. package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +32 -0
  97. package/esm2022/lib/components/kv-icon/kv-icon.component.mjs +30 -0
  98. package/esm2022/lib/components/kv-icon/kv-icon.model.mjs +2 -0
  99. package/esm2022/lib/components/kv-icon/kv-icon.module.mjs +24 -0
  100. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +136 -0
  101. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +18 -0
  102. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +29 -0
  103. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +102 -0
  104. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.mjs +18 -0
  105. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.mjs +40 -0
  106. package/esm2022/lib/components/kv-inputs/kv-editor/config/kv-editor.config.mjs +110 -0
  107. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +271 -0
  108. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.mjs +7 -0
  109. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +135 -0
  110. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.mjs +168 -0
  111. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +78 -0
  112. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.mjs +95 -0
  113. package/esm2022/lib/components/kv-inputs/kv-editor/types/kv-editor.types.mjs +2 -0
  114. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +168 -0
  115. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +30 -0
  116. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -0
  117. package/esm2022/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.mjs +66 -0
  118. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -0
  119. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +38 -0
  120. package/esm2022/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.mjs +42 -0
  121. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +50 -0
  122. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -0
  123. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -0
  124. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +165 -0
  125. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +60 -0
  126. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +60 -0
  127. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +46 -0
  128. package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +37 -0
  129. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +42 -0
  130. package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +58 -0
  131. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -0
  132. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -0
  133. package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +28 -0
  134. package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +72 -0
  135. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +433 -0
  136. package/esm2022/lib/components/kv-layout/top-icons/top-icons.component.mjs +15 -0
  137. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +16 -0
  138. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -0
  139. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -0
  140. package/esm2022/lib/components/kv-login/kv-login.component.mjs +62 -0
  141. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -0
  142. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +98 -0
  143. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +20 -0
  144. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +225 -0
  145. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +59 -0
  146. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +190 -0
  147. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +41 -0
  148. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +205 -0
  149. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +51 -0
  150. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +386 -0
  151. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +39 -0
  152. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +58 -0
  153. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -0
  154. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.mjs +62 -0
  155. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.mjs +28 -0
  156. package/esm2022/lib/components/kv-report/kv-report.component.mjs +44 -0
  157. package/esm2022/lib/components/kv-report/kv-report.module.mjs +24 -0
  158. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +74 -0
  159. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +47 -0
  160. package/esm2022/lib/components/kv-steps/kv-steps.component.mjs +105 -0
  161. package/esm2022/lib/components/kv-table/kv-table.component.mjs +673 -0
  162. package/esm2022/lib/components/kv-table/kv-table.module.mjs +40 -0
  163. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +341 -0
  164. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +45 -0
  165. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +516 -0
  166. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +40 -0
  167. package/esm2022/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.mjs +17 -0
  168. package/esm2022/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.mjs +18 -0
  169. package/esm2022/lib/components/kv-table-viewer/kv-table-viewer.component.mjs +184 -0
  170. package/esm2022/lib/components/kv-tag/kv-tag.component.mjs +18 -0
  171. package/esm2022/lib/components/kv-tag/kv-tag.module.mjs +24 -0
  172. package/esm2022/lib/components/kv-tags/kv-tags.component.mjs +35 -0
  173. package/esm2022/lib/components/kv-tags/kv-tags.module.mjs +27 -0
  174. package/esm2022/lib/components/kv-timeline/kv-timeline.component.mjs +71 -0
  175. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +334 -0
  176. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +39 -0
  177. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +70 -0
  178. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -0
  179. package/esm2022/lib/components/kv-widget-card/kv-widget-card.component.mjs +103 -0
  180. package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +40 -0
  181. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +68 -0
  182. package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +22 -0
  183. package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +78 -0
  184. package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +87 -0
  185. package/esm2022/public-api.mjs +303 -0
  186. package/fesm2022/keevo-components.mjs +12127 -0
  187. package/fesm2022/keevo-components.mjs.map +1 -0
  188. package/index.d.ts +5 -0
  189. package/lib/api/base-components/base-component-button.d.ts +15 -0
  190. package/lib/api/base-components/base-component-chart.d.ts +40 -0
  191. package/lib/api/base-components/base-component-crud-form.d.ts +149 -0
  192. package/lib/api/base-components/base-component-crud-list.d.ts +70 -0
  193. package/lib/api/base-components/base-component-crud.d.ts +36 -0
  194. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -0
  195. package/lib/api/base-components/base-component-dropdown.d.ts +57 -0
  196. package/lib/api/base-components/base-component-input.d.ts +33 -0
  197. package/lib/api/base-components/base-component-multi-select.d.ts +40 -0
  198. package/lib/api/base-components/base-component-table.d.ts +88 -0
  199. package/lib/api/base-components/base-component.d.ts +22 -0
  200. package/lib/api/components/chart/chart.config.d.ts +14 -0
  201. package/lib/api/components/chart/chart.model.d.ts +12 -0
  202. package/lib/api/components/chart/orchart.config.d.ts +41 -0
  203. package/lib/api/components/chart/orchartnode.d.ts +34 -0
  204. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -0
  205. package/{src/lib/api/components/step/step.model.ts → lib/api/components/step/step.model.d.ts} +13 -15
  206. package/lib/api/components/stepper/kv-stepperpanel.d.ts +9 -0
  207. package/lib/api/components/table/action-item.d.ts +13 -0
  208. package/lib/api/components/table/kv-menuitem.d.ts +152 -0
  209. package/lib/api/components/table/table-dropdown-control.d.ts +6 -0
  210. package/lib/api/components/table/table.config.column.d.ts +38 -0
  211. package/lib/api/components/table/table.config.d.ts +36 -0
  212. package/lib/api/components/table/table.paginate.d.ts +10 -0
  213. package/{src/lib/api/components/table/tabledit.config.ts → lib/api/components/table/tabledit.config.d.ts} +8 -9
  214. package/lib/api/components/table/tableedit.config.column.d.ts +11 -0
  215. package/lib/api/components/tree-table/tree-table-keys.d.ts +12 -0
  216. package/lib/api/components/tree-table/tree-table.config.d.ts +31 -0
  217. package/lib/api/directives/directives.module.d.ts +9 -0
  218. package/lib/api/directives/drag/drag.directive.d.ts +11 -0
  219. package/lib/api/directives/stepper/dynamicinput.directive.d.ts +15 -0
  220. package/lib/api/directives/template/template.directive.d.ts +11 -0
  221. package/lib/api/helpers/component-providers.d.ts +2 -0
  222. package/lib/api/helpers/keevo-validators.d.ts +18 -0
  223. package/lib/api/helpers/severity-color.d.ts +5 -0
  224. package/lib/api/helpers/translate-primeng.d.ts +4 -0
  225. package/lib/api/modules/primeng.module.d.ts +69 -0
  226. package/lib/api/pipes/capitalize.pipe.d.ts +10 -0
  227. package/lib/api/pipes/cpfcnpj.pipe.d.ts +7 -0
  228. package/lib/api/pipes/mask.pipe.d.ts +7 -0
  229. package/lib/api/pipes/pipes.module.d.ts +11 -0
  230. package/lib/api/pipes/telefone.pipe.d.ts +7 -0
  231. package/lib/api/services/base.api.service.d.ts +25 -0
  232. package/lib/api/services/breadcrumbs.service.d.ts +16 -0
  233. package/lib/api/services/chat.service.d.ts +17 -0
  234. package/lib/api/services/component.service.d.ts +11 -0
  235. package/lib/api/services/docs.service.d.ts +12 -0
  236. package/lib/api/services/form.service.d.ts +31 -0
  237. package/lib/api/services/image.cutter.service.d.ts +16 -0
  238. package/lib/api/services/imagens.service.d.ts +10 -0
  239. package/lib/api/services/notification.service.d.ts +26 -0
  240. package/lib/api/services/object.service.d.ts +9 -0
  241. package/lib/api/services/orgchart.service.d.ts +20 -0
  242. package/lib/api/services/pdf.service.d.ts +7 -0
  243. package/lib/api/types/breadcrumb.model.d.ts +5 -0
  244. package/{src/lib/api/types/severity.ts → lib/api/types/severity.d.ts} +2 -3
  245. package/lib/components/keevo-components.module.d.ts +38 -0
  246. package/lib/components/kv-avatar/kv-avatar.component.d.ts +36 -0
  247. package/lib/components/kv-avatar/kv-avatar.module.d.ts +15 -0
  248. package/lib/components/kv-button/kv-button.component.d.ts +24 -0
  249. package/lib/components/kv-button/kv-button.module.d.ts +9 -0
  250. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +11 -0
  251. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +19 -0
  252. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +7 -0
  253. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +7 -0
  254. package/lib/components/kv-buttons/kv-button.module.d.ts +11 -0
  255. package/lib/components/kv-card-selection/kv-card-selection.component.d.ts +25 -0
  256. package/lib/components/kv-card-selection/kv-card-selection.module.d.ts +10 -0
  257. package/lib/components/kv-carousel/kv-carousel.component.d.ts +17 -0
  258. package/lib/components/kv-carousel/kv-carousel.module.d.ts +9 -0
  259. package/lib/components/kv-chart/kv-chart.component.d.ts +57 -0
  260. package/lib/components/kv-chart/kv-chart.module.d.ts +10 -0
  261. package/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.d.ts +12 -0
  262. package/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.d.ts +10 -0
  263. package/lib/components/kv-content-viewer/kv-content-viewer.component.d.ts +56 -0
  264. package/lib/components/kv-content-viewer/kv-content-viewer.module.d.ts +14 -0
  265. package/lib/components/kv-error/kv-error.component.d.ts +12 -0
  266. package/lib/components/kv-error/kv-error.module.d.ts +10 -0
  267. package/lib/components/kv-file-upload/kv-file-upload.component.d.ts +35 -0
  268. package/lib/components/kv-file-upload/kv-file-upload.module.d.ts +10 -0
  269. package/lib/components/kv-file-viewer/kv-file-viewer.component.d.ts +21 -0
  270. package/lib/components/kv-file-viewer/kv-file-viewer.module.d.ts +8 -0
  271. package/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.d.ts +24 -0
  272. package/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.d.ts +9 -0
  273. package/lib/components/kv-filter-card/kv-filter-card.component.d.ts +13 -0
  274. package/lib/components/kv-filter-card/kv-filter-card.module.d.ts +10 -0
  275. package/lib/components/kv-filter-cards/kv-filter-cards.component.d.ts +32 -0
  276. package/lib/components/kv-filter-cards/kv-filter-cards.module.d.ts +9 -0
  277. package/lib/components/kv-filter-cards/kv-filter-cards.pipe.d.ts +7 -0
  278. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.d.ts +10 -0
  279. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.d.ts +9 -0
  280. package/lib/components/kv-g-icon/kv-g-icon.component.d.ts +5 -0
  281. package/lib/components/kv-g-icon/kv-g-icon.module.d.ts +9 -0
  282. package/lib/components/kv-home-card/kv-home-card.component.d.ts +24 -0
  283. package/lib/components/kv-home-card/kv-home-card.module.d.ts +11 -0
  284. package/lib/components/kv-icon/kv-icon.component.d.ts +22 -0
  285. package/{src/lib/components/kv-icon/kv-icon.model.ts → lib/components/kv-icon/kv-icon.model.d.ts} +3 -3
  286. package/lib/components/kv-icon/kv-icon.module.d.ts +8 -0
  287. package/lib/components/kv-image-upload/kv-image-upload.component.d.ts +34 -0
  288. package/lib/components/kv-image-upload/kv-image-upload.module.d.ts +8 -0
  289. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +12 -0
  290. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +33 -0
  291. package/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.d.ts +8 -0
  292. package/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.d.ts +14 -0
  293. package/lib/components/kv-inputs/kv-editor/config/kv-editor.config.d.ts +55 -0
  294. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +70 -0
  295. package/{src/lib/components/kv-inputs/kv-editor/kv-editor.ts → lib/components/kv-inputs/kv-editor/kv-editor.d.ts} +6 -6
  296. package/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.d.ts +41 -0
  297. package/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.d.ts +41 -0
  298. package/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.d.ts +28 -0
  299. package/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.d.ts +45 -0
  300. package/lib/components/kv-inputs/kv-editor/types/kv-editor.types.d.ts +32 -0
  301. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +34 -0
  302. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +12 -0
  303. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +19 -0
  304. package/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.d.ts +21 -0
  305. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +13 -0
  306. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +11 -0
  307. package/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.d.ts +13 -0
  308. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +18 -0
  309. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +16 -0
  310. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +10 -0
  311. package/lib/components/kv-inputs/kv-inputs.module.d.ts +38 -0
  312. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +20 -0
  313. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +20 -0
  314. package/lib/components/kv-inputs/kv-select-button/kv-select-button.component.d.ts +19 -0
  315. package/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.d.ts +26 -0
  316. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +16 -0
  317. package/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.d.ts +25 -0
  318. package/lib/components/kv-label/kv-label.component.d.ts +7 -0
  319. package/lib/components/kv-label/kv-label.module.d.ts +8 -0
  320. package/lib/components/kv-layout/dropdown-master/dropdown-master.component.d.ts +12 -0
  321. package/lib/components/kv-layout/kv-layout.module.d.ts +18 -0
  322. package/lib/components/kv-layout/layout/kv-layout.component.d.ts +156 -0
  323. package/lib/components/kv-layout/top-icons/top-icons.component.d.ts +16 -0
  324. package/lib/components/kv-loader/kv-loader.component.d.ts +7 -0
  325. package/lib/components/kv-loader/kv-loader.module.d.ts +9 -0
  326. package/lib/components/kv-loader/kv-loader.service.d.ts +10 -0
  327. package/lib/components/kv-login/kv-login.component.d.ts +32 -0
  328. package/lib/components/kv-login/kv-login.module.d.ts +13 -0
  329. package/lib/components/kv-modal/kv-modal.component.d.ts +27 -0
  330. package/lib/components/kv-modal/kv-modal.module.d.ts +10 -0
  331. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +45 -0
  332. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +17 -0
  333. package/lib/components/kv-page-form/kv-page-form.component.d.ts +98 -0
  334. package/lib/components/kv-page-form/kv-page-form.module.d.ts +12 -0
  335. package/lib/components/kv-page-stepper/kv-page-stepper.component.d.ts +84 -0
  336. package/lib/components/kv-page-stepper/kv-page-stepper.module.d.ts +14 -0
  337. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +70 -0
  338. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +11 -0
  339. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +67 -0
  340. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +9 -0
  341. package/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.d.ts +71 -0
  342. package/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.d.ts +9 -0
  343. package/lib/components/kv-report/kv-report.component.d.ts +18 -0
  344. package/lib/components/kv-report/kv-report.module.d.ts +8 -0
  345. package/lib/components/kv-stepper/kv-stepper.component.d.ts +32 -0
  346. package/lib/components/kv-stepper/kv-stepper.module.d.ts +13 -0
  347. package/lib/components/kv-steps/kv-steps.component.d.ts +21 -0
  348. package/lib/components/kv-table/kv-table.component.d.ts +154 -0
  349. package/lib/components/kv-table/kv-table.module.d.ts +12 -0
  350. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +66 -0
  351. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +15 -0
  352. package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +119 -0
  353. package/lib/components/kv-table-expandable/kv-table-expandable.module.d.ts +13 -0
  354. package/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.d.ts +8 -0
  355. package/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.d.ts +7 -0
  356. package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +72 -0
  357. package/lib/components/kv-tag/kv-tag.component.d.ts +7 -0
  358. package/lib/components/kv-tag/kv-tag.module.d.ts +8 -0
  359. package/lib/components/kv-tags/kv-tags.component.d.ts +31 -0
  360. package/lib/components/kv-tags/kv-tags.module.d.ts +8 -0
  361. package/lib/components/kv-timeline/kv-timeline.component.d.ts +18 -0
  362. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +87 -0
  363. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +11 -0
  364. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +21 -0
  365. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +9 -0
  366. package/lib/components/kv-widget-card/kv-widget-card.component.d.ts +60 -0
  367. package/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.d.ts +14 -0
  368. package/lib/components/kv-workspace/kv-workspace.module.d.ts +19 -0
  369. package/lib/components/kv-workspace/logo/kv-workspace-logo.component.d.ts +11 -0
  370. package/lib/components/kv-workspace/master/kv-workspace-master.component.d.ts +25 -0
  371. package/lib/components/kv-workspace/workspace/kv-workspace.component.d.ts +37 -0
  372. package/package.json +42 -32
  373. package/{src/public-api.ts → public-api.d.ts} +298 -361
  374. package/src/lib/components/kv-table/kv-table.component.scss +4 -4
  375. package/ng-package.json +0 -14
  376. package/src/assets/.gitkeep +0 -0
  377. package/src/index.ts +0 -1
  378. package/src/lib/api/base-components/base-component-button.ts +0 -29
  379. package/src/lib/api/base-components/base-component-chart.ts +0 -118
  380. package/src/lib/api/base-components/base-component-crud-form.ts +0 -377
  381. package/src/lib/api/base-components/base-component-crud-list.ts +0 -129
  382. package/src/lib/api/base-components/base-component-crud.ts +0 -92
  383. package/src/lib/api/base-components/base-component-dropdown-external.ts +0 -29
  384. package/src/lib/api/base-components/base-component-dropdown-new.ts +0 -112
  385. package/src/lib/api/base-components/base-component-dropdown.ts +0 -257
  386. package/src/lib/api/base-components/base-component-input.ts +0 -121
  387. package/src/lib/api/base-components/base-component-multi-select.ts +0 -187
  388. package/src/lib/api/base-components/base-component-table.ts +0 -366
  389. package/src/lib/api/base-components/base-component.ts +0 -47
  390. package/src/lib/api/components/chart/chart.config.ts +0 -15
  391. package/src/lib/api/components/chart/chart.model.ts +0 -12
  392. package/src/lib/api/components/chart/orchart.config.ts +0 -51
  393. package/src/lib/api/components/chart/orchartnode.ts +0 -44
  394. package/src/lib/api/components/dropdown/filtro.combo.ts +0 -4
  395. package/src/lib/api/components/stepper/kv-stepperpanel.ts +0 -10
  396. package/src/lib/api/components/table/action-item.ts +0 -13
  397. package/src/lib/api/components/table/kv-menuitem.ts +0 -198
  398. package/src/lib/api/components/table/table-dropdown-control.ts +0 -6
  399. package/src/lib/api/components/table/table.config.column.ts +0 -38
  400. package/src/lib/api/components/table/table.config.ts +0 -39
  401. package/src/lib/api/components/table/table.paginate.ts +0 -7
  402. package/src/lib/api/components/table/tableedit.config.column.ts +0 -12
  403. package/src/lib/api/components/tree-table/tree-table-keys.ts +0 -12
  404. package/src/lib/api/components/tree-table/tree-table.config.ts +0 -34
  405. package/src/lib/api/directives/directives.module.ts +0 -19
  406. package/src/lib/api/directives/drag/drag.directive.ts +0 -40
  407. package/src/lib/api/directives/stepper/dynamicinput.directive.ts +0 -23
  408. package/src/lib/api/directives/template/template.directive.ts +0 -15
  409. package/src/lib/api/helpers/component-providers.ts +0 -16
  410. package/src/lib/api/helpers/keevo-validators.ts +0 -174
  411. package/src/lib/api/helpers/severity-color.ts +0 -77
  412. package/src/lib/api/helpers/translate-primeng.ts +0 -25
  413. package/src/lib/api/modules/primeng.module.ts +0 -144
  414. package/src/lib/api/pipes/capitalize.pipe.ts +0 -47
  415. package/src/lib/api/pipes/cpfcnpj.pipe.ts +0 -21
  416. package/src/lib/api/pipes/mask.pipe.ts +0 -24
  417. package/src/lib/api/pipes/pipes.module.ts +0 -26
  418. package/src/lib/api/pipes/telefone.pipe.ts +0 -38
  419. package/src/lib/api/services/base.api.service.ts +0 -115
  420. package/src/lib/api/services/breadcrumbs.service.ts +0 -71
  421. package/src/lib/api/services/chat.service.ts +0 -39
  422. package/src/lib/api/services/component.service.ts +0 -44
  423. package/src/lib/api/services/docs.service.ts +0 -129
  424. package/src/lib/api/services/form.service.ts +0 -139
  425. package/src/lib/api/services/image.cutter.service.ts +0 -290
  426. package/src/lib/api/services/imagens.service.ts +0 -28
  427. package/src/lib/api/services/notification.service.ts +0 -88
  428. package/src/lib/api/services/object.service.ts +0 -33
  429. package/src/lib/api/services/orgchart.service.ts +0 -77
  430. package/src/lib/api/services/pdf.service.ts +0 -54
  431. package/src/lib/api/types/breadcrumb.model.ts +0 -5
  432. package/src/lib/api/types/stimulsoft.reports.d.ts +0 -67463
  433. package/src/lib/components/keevo-components.module.ts +0 -105
  434. package/src/lib/components/kv-avatar/kv-avatar.component.html +0 -75
  435. package/src/lib/components/kv-avatar/kv-avatar.component.scss +0 -162
  436. package/src/lib/components/kv-avatar/kv-avatar.component.spec.ts +0 -23
  437. package/src/lib/components/kv-avatar/kv-avatar.component.ts +0 -165
  438. package/src/lib/components/kv-avatar/kv-avatar.module.ts +0 -32
  439. package/src/lib/components/kv-button/kv-button.component.html +0 -26
  440. package/src/lib/components/kv-button/kv-button.component.spec.ts +0 -23
  441. package/src/lib/components/kv-button/kv-button.component.ts +0 -55
  442. package/src/lib/components/kv-button/kv-button.module.ts +0 -20
  443. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.html +0 -14
  444. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.scss +0 -6
  445. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.ts +0 -25
  446. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.html +0 -13
  447. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.scss +0 -33
  448. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.ts +0 -41
  449. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.html +0 -12
  450. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.scss +0 -18
  451. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.ts +0 -14
  452. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.html +0 -11
  453. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.scss +0 -17
  454. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.ts +0 -14
  455. package/src/lib/components/kv-buttons/kv-button.module.ts +0 -26
  456. package/src/lib/components/kv-card-selection/kv-card-selection.component.html +0 -63
  457. package/src/lib/components/kv-card-selection/kv-card-selection.component.scss +0 -54
  458. package/src/lib/components/kv-card-selection/kv-card-selection.component.spec.ts +0 -23
  459. package/src/lib/components/kv-card-selection/kv-card-selection.component.ts +0 -73
  460. package/src/lib/components/kv-card-selection/kv-card-selection.module.ts +0 -19
  461. package/src/lib/components/kv-carousel/kv-carousel.component.html +0 -26
  462. package/src/lib/components/kv-carousel/kv-carousel.component.scss +0 -47
  463. package/src/lib/components/kv-carousel/kv-carousel.component.spec.ts +0 -23
  464. package/src/lib/components/kv-carousel/kv-carousel.component.ts +0 -40
  465. package/src/lib/components/kv-carousel/kv-carousel.module.ts +0 -19
  466. package/src/lib/components/kv-chart/kv-chart.component.html +0 -38
  467. package/src/lib/components/kv-chart/kv-chart.component.scss +0 -0
  468. package/src/lib/components/kv-chart/kv-chart.component.spec.ts +0 -28
  469. package/src/lib/components/kv-chart/kv-chart.component.ts +0 -174
  470. package/src/lib/components/kv-chart/kv-chart.module.ts +0 -21
  471. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.html +0 -9
  472. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.scss +0 -7
  473. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.spec.ts +0 -23
  474. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.ts +0 -32
  475. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.ts +0 -14
  476. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.html +0 -229
  477. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.scss +0 -185
  478. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.spec.ts +0 -23
  479. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.ts +0 -171
  480. package/src/lib/components/kv-content-viewer/kv-content-viewer.module.ts +0 -25
  481. package/src/lib/components/kv-error/kv-error.component.html +0 -3
  482. package/src/lib/components/kv-error/kv-error.component.scss +0 -5
  483. package/src/lib/components/kv-error/kv-error.component.ts +0 -27
  484. package/src/lib/components/kv-error/kv-error.module.ts +0 -26
  485. package/src/lib/components/kv-file-upload/kv-file-upload.component.html +0 -134
  486. package/src/lib/components/kv-file-upload/kv-file-upload.component.scss +0 -13
  487. package/src/lib/components/kv-file-upload/kv-file-upload.component.spec.ts +0 -23
  488. package/src/lib/components/kv-file-upload/kv-file-upload.component.ts +0 -200
  489. package/src/lib/components/kv-file-upload/kv-file-upload.module.ts +0 -13
  490. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.html +0 -16
  491. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.scss +0 -18
  492. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.ts +0 -42
  493. package/src/lib/components/kv-file-viewer/kv-file-viewer.module.ts +0 -14
  494. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.html +0 -34
  495. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.scss +0 -17
  496. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.ts +0 -80
  497. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.ts +0 -15
  498. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.html +0 -103
  499. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.scss +0 -153
  500. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.spec.ts +0 -23
  501. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.ts +0 -73
  502. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.module.ts +0 -18
  503. package/src/lib/components/kv-filter-card/kv-filter-card.component.html +0 -12
  504. package/src/lib/components/kv-filter-card/kv-filter-card.component.scss +0 -76
  505. package/src/lib/components/kv-filter-card/kv-filter-card.component.spec.ts +0 -23
  506. package/src/lib/components/kv-filter-card/kv-filter-card.component.ts +0 -18
  507. package/src/lib/components/kv-filter-card/kv-filter-card.module.ts +0 -23
  508. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.html +0 -81
  509. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.scss +0 -197
  510. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.ts +0 -150
  511. package/src/lib/components/kv-filter-cards/kv-filter-cards.module.ts +0 -20
  512. package/src/lib/components/kv-filter-cards/kv-filter-cards.pipe.ts +0 -24
  513. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.html +0 -25
  514. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.scss +0 -22
  515. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.spec.ts +0 -23
  516. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.ts +0 -20
  517. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.ts +0 -20
  518. package/src/lib/components/kv-g-icon/kv-g-icon.component.html +0 -1
  519. package/src/lib/components/kv-g-icon/kv-g-icon.component.scss +0 -0
  520. package/src/lib/components/kv-g-icon/kv-g-icon.component.spec.ts +0 -23
  521. package/src/lib/components/kv-g-icon/kv-g-icon.component.ts +0 -10
  522. package/src/lib/components/kv-g-icon/kv-g-icon.module.ts +0 -11
  523. package/src/lib/components/kv-home-card/kv-home-card.component.html +0 -35
  524. package/src/lib/components/kv-home-card/kv-home-card.component.scss +0 -5
  525. package/src/lib/components/kv-home-card/kv-home-card.component.spec.ts +0 -23
  526. package/src/lib/components/kv-home-card/kv-home-card.component.ts +0 -33
  527. package/src/lib/components/kv-home-card/kv-home-card.module.ts +0 -18
  528. package/src/lib/components/kv-icon/kv-icon.component.html +0 -13
  529. package/src/lib/components/kv-icon/kv-icon.component.scss +0 -69
  530. package/src/lib/components/kv-icon/kv-icon.component.spec.ts +0 -28
  531. package/src/lib/components/kv-icon/kv-icon.component.ts +0 -30
  532. package/src/lib/components/kv-icon/kv-icon.module.ts +0 -16
  533. package/src/lib/components/kv-image-upload/kv-image-upload.component.html +0 -64
  534. package/src/lib/components/kv-image-upload/kv-image-upload.component.scss +0 -0
  535. package/src/lib/components/kv-image-upload/kv-image-upload.component.ts +0 -153
  536. package/src/lib/components/kv-image-upload/kv-image-upload.module.ts +0 -10
  537. package/src/lib/components/kv-inputs/kv-check/kv-check.component.html +0 -12
  538. package/src/lib/components/kv-inputs/kv-check/kv-check.component.scss +0 -38
  539. package/src/lib/components/kv-inputs/kv-check/kv-check.component.ts +0 -32
  540. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.html +0 -87
  541. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.ts +0 -119
  542. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.html +0 -13
  543. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.scss +0 -0
  544. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.spec.ts +0 -23
  545. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.ts +0 -16
  546. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.html +0 -18
  547. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.scss +0 -0
  548. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.ts +0 -41
  549. package/src/lib/components/kv-inputs/kv-editor/config/kv-editor.config.ts +0 -120
  550. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.html +0 -285
  551. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.scss +0 -182
  552. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.ts +0 -311
  553. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.ts +0 -156
  554. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.ts +0 -190
  555. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.spec.ts +0 -126
  556. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.ts +0 -84
  557. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.spec.ts +0 -176
  558. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.ts +0 -101
  559. package/src/lib/components/kv-inputs/kv-editor/types/kv-editor.types.ts +0 -36
  560. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.html +0 -37
  561. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.scss +0 -23
  562. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.ts +0 -197
  563. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.html +0 -24
  564. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.scss +0 -0
  565. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.ts +0 -35
  566. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.html +0 -23
  567. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.scss +0 -0
  568. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.ts +0 -61
  569. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.html +0 -33
  570. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.scss +0 -5
  571. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.ts +0 -63
  572. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.html +0 -24
  573. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.scss +0 -0
  574. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.ts +0 -26
  575. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.html +0 -23
  576. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.scss +0 -18
  577. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.ts +0 -40
  578. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.html +0 -30
  579. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.scss +0 -26
  580. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.ts +0 -38
  581. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.html +0 -53
  582. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.scss +0 -41
  583. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.spec.ts +0 -23
  584. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.ts +0 -48
  585. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.html +0 -23
  586. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.scss +0 -0
  587. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.ts +0 -40
  588. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.html +0 -24
  589. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.scss +0 -0
  590. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.ts +0 -27
  591. package/src/lib/components/kv-inputs/kv-inputs.module.ts +0 -100
  592. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.html +0 -87
  593. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.scss +0 -62
  594. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.ts +0 -54
  595. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.html +0 -19
  596. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.scss +0 -22
  597. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.ts +0 -63
  598. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.html +0 -26
  599. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.scss +0 -5
  600. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.spec.ts +0 -21
  601. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.ts +0 -30
  602. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.html +0 -28
  603. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.scss +0 -61
  604. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.spec.ts +0 -23
  605. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.ts +0 -43
  606. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.html +0 -23
  607. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.scss +0 -35
  608. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.ts +0 -54
  609. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.html +0 -68
  610. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.scss +0 -86
  611. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.ts +0 -59
  612. package/src/lib/components/kv-label/kv-label.component.html +0 -3
  613. package/src/lib/components/kv-label/kv-label.component.scss +0 -15
  614. package/src/lib/components/kv-label/kv-label.component.spec.ts +0 -23
  615. package/src/lib/components/kv-label/kv-label.component.ts +0 -14
  616. package/src/lib/components/kv-label/kv-label.module.ts +0 -17
  617. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.html +0 -25
  618. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.scss +0 -19
  619. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.spec.ts +0 -28
  620. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.ts +0 -34
  621. package/src/lib/components/kv-layout/kv-layout.module.ts +0 -44
  622. package/src/lib/components/kv-layout/layout/kv-layout.component.html +0 -535
  623. package/src/lib/components/kv-layout/layout/kv-layout.component.scss +0 -267
  624. package/src/lib/components/kv-layout/layout/kv-layout.component.spec.ts +0 -23
  625. package/src/lib/components/kv-layout/layout/kv-layout.component.ts +0 -502
  626. package/src/lib/components/kv-layout/top-icons/top-icons.component.html +0 -26
  627. package/src/lib/components/kv-layout/top-icons/top-icons.component.scss +0 -71
  628. package/src/lib/components/kv-layout/top-icons/top-icons.component.spec.ts +0 -23
  629. package/src/lib/components/kv-layout/top-icons/top-icons.component.ts +0 -26
  630. package/src/lib/components/kv-loader/kv-loader.component.html +0 -1
  631. package/src/lib/components/kv-loader/kv-loader.component.ts +0 -11
  632. package/src/lib/components/kv-loader/kv-loader.module.ts +0 -17
  633. package/src/lib/components/kv-loader/kv-loader.service.ts +0 -29
  634. package/src/lib/components/kv-login/kv-login.component.html +0 -101
  635. package/src/lib/components/kv-login/kv-login.component.scss +0 -99
  636. package/src/lib/components/kv-login/kv-login.component.spec.ts +0 -23
  637. package/src/lib/components/kv-login/kv-login.component.ts +0 -97
  638. package/src/lib/components/kv-login/kv-login.module.ts +0 -33
  639. package/src/lib/components/kv-modal/kv-modal.component.html +0 -20
  640. package/src/lib/components/kv-modal/kv-modal.component.scss +0 -37
  641. package/src/lib/components/kv-modal/kv-modal.component.spec.ts +0 -21
  642. package/src/lib/components/kv-modal/kv-modal.component.ts +0 -111
  643. package/src/lib/components/kv-modal/kv-modal.module.ts +0 -12
  644. package/src/lib/components/kv-orgchart/kv-orgchart.component.html +0 -125
  645. package/src/lib/components/kv-orgchart/kv-orgchart.component.scss +0 -73
  646. package/src/lib/components/kv-orgchart/kv-orgchart.component.ts +0 -283
  647. package/src/lib/components/kv-orgchart/kv-orgchart.module.ts +0 -31
  648. package/src/lib/components/kv-page-form/kv-page-form.component.html +0 -91
  649. package/src/lib/components/kv-page-form/kv-page-form.component.scss +0 -100
  650. package/src/lib/components/kv-page-form/kv-page-form.component.spec.ts +0 -28
  651. package/src/lib/components/kv-page-form/kv-page-form.component.ts +0 -206
  652. package/src/lib/components/kv-page-form/kv-page-form.module.ts +0 -33
  653. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.html +0 -276
  654. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.scss +0 -85
  655. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.spec.ts +0 -23
  656. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.ts +0 -223
  657. package/src/lib/components/kv-page-stepper/kv-page-stepper.module.ts +0 -36
  658. package/src/lib/components/kv-pick-list/kv-pick-list.component.html +0 -32
  659. package/src/lib/components/kv-pick-list/kv-pick-list.component.scss +0 -57
  660. package/src/lib/components/kv-pick-list/kv-pick-list.component.spec.ts +0 -26
  661. package/src/lib/components/kv-pick-list/kv-pick-list.component.ts +0 -461
  662. package/src/lib/components/kv-pick-list/kv-pick-list.module.ts +0 -24
  663. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.html +0 -38
  664. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.scss +0 -128
  665. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.spec.ts +0 -21
  666. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.ts +0 -75
  667. package/src/lib/components/kv-progress-bar/kv-progress-bar.module.ts +0 -19
  668. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.html +0 -43
  669. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.scss +0 -130
  670. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.spec.ts +0 -23
  671. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.ts +0 -82
  672. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.ts +0 -18
  673. package/src/lib/components/kv-report/kv-report.component.html +0 -3
  674. package/src/lib/components/kv-report/kv-report.component.scss +0 -14
  675. package/src/lib/components/kv-report/kv-report.component.spec.ts +0 -28
  676. package/src/lib/components/kv-report/kv-report.component.ts +0 -44
  677. package/src/lib/components/kv-report/kv-report.module.ts +0 -18
  678. package/src/lib/components/kv-stepper/kv-stepper.component.html +0 -94
  679. package/src/lib/components/kv-stepper/kv-stepper.component.scss +0 -43
  680. package/src/lib/components/kv-stepper/kv-stepper.component.spec.ts +0 -23
  681. package/src/lib/components/kv-stepper/kv-stepper.component.ts +0 -73
  682. package/src/lib/components/kv-stepper/kv-stepper.module.ts +0 -27
  683. package/src/lib/components/kv-steps/kv-steps.component.html +0 -53
  684. package/src/lib/components/kv-steps/kv-steps.component.scss +0 -120
  685. package/src/lib/components/kv-steps/kv-steps.component.ts +0 -122
  686. package/src/lib/components/kv-table/kv-table.component.html +0 -655
  687. package/src/lib/components/kv-table/kv-table.component.spec.ts +0 -28
  688. package/src/lib/components/kv-table/kv-table.component.ts +0 -792
  689. package/src/lib/components/kv-table/kv-table.module.ts +0 -25
  690. package/src/lib/components/kv-table-edit/kv-table-edit.component.html +0 -913
  691. package/src/lib/components/kv-table-edit/kv-table-edit.component.scss +0 -829
  692. package/src/lib/components/kv-table-edit/kv-table-edit.component.ts +0 -425
  693. package/src/lib/components/kv-table-edit/kv-table-edit.module.ts +0 -31
  694. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.html +0 -634
  695. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.scss +0 -387
  696. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.ts +0 -546
  697. package/src/lib/components/kv-table-expandable/kv-table-expandable.module.ts +0 -22
  698. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.html +0 -25
  699. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.scss +0 -0
  700. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.spec.ts +0 -23
  701. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.ts +0 -17
  702. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.html +0 -20
  703. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.scss +0 -0
  704. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.spec.ts +0 -23
  705. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.ts +0 -14
  706. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.html +0 -164
  707. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.scss +0 -80
  708. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.spec.ts +0 -23
  709. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.ts +0 -183
  710. package/src/lib/components/kv-tag/kv-tag.component.html +0 -3
  711. package/src/lib/components/kv-tag/kv-tag.component.scss +0 -65
  712. package/src/lib/components/kv-tag/kv-tag.component.spec.ts +0 -23
  713. package/src/lib/components/kv-tag/kv-tag.component.ts +0 -16
  714. package/src/lib/components/kv-tag/kv-tag.module.ts +0 -18
  715. package/src/lib/components/kv-tags/kv-tags.component.html +0 -19
  716. package/src/lib/components/kv-tags/kv-tags.component.scss +0 -28
  717. package/src/lib/components/kv-tags/kv-tags.component.ts +0 -64
  718. package/src/lib/components/kv-tags/kv-tags.module.ts +0 -18
  719. package/src/lib/components/kv-timeline/kv-timeline.component.html +0 -28
  720. package/src/lib/components/kv-timeline/kv-timeline.component.scss +0 -6
  721. package/src/lib/components/kv-timeline/kv-timeline.component.spec.ts +0 -23
  722. package/src/lib/components/kv-timeline/kv-timeline.component.ts +0 -77
  723. package/src/lib/components/kv-tree-table/kv-tree-table.component.html +0 -492
  724. package/src/lib/components/kv-tree-table/kv-tree-table.component.scss +0 -187
  725. package/src/lib/components/kv-tree-table/kv-tree-table.component.spec.ts +0 -21
  726. package/src/lib/components/kv-tree-table/kv-tree-table.component.ts +0 -355
  727. package/src/lib/components/kv-tree-table/kv-tree-table.module.ts +0 -23
  728. package/src/lib/components/kv-tree-view/kv-tree-view.component.html +0 -16
  729. package/src/lib/components/kv-tree-view/kv-tree-view.component.scss +0 -19
  730. package/src/lib/components/kv-tree-view/kv-tree-view.component.spec.ts +0 -23
  731. package/src/lib/components/kv-tree-view/kv-tree-view.component.ts +0 -73
  732. package/src/lib/components/kv-tree-view/kv-tree-view.module.ts +0 -19
  733. package/src/lib/components/kv-widget-card/kv-widget-card.component.html +0 -71
  734. package/src/lib/components/kv-widget-card/kv-widget-card.component.scss +0 -27
  735. package/src/lib/components/kv-widget-card/kv-widget-card.component.spec.ts +0 -28
  736. package/src/lib/components/kv-widget-card/kv-widget-card.component.ts +0 -107
  737. package/src/lib/components/kv-widget-card/kv-widget-card.module.ts +0 -20
  738. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.html +0 -22
  739. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.scss +0 -36
  740. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.spec.ts +0 -28
  741. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.ts +0 -41
  742. package/src/lib/components/kv-workspace/kv-workspace.module.ts +0 -45
  743. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.html +0 -20
  744. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.scss +0 -0
  745. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.spec.ts +0 -28
  746. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.ts +0 -18
  747. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.html +0 -35
  748. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.scss +0 -29
  749. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.spec.ts +0 -28
  750. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.ts +0 -98
  751. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.html +0 -63
  752. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.scss +0 -62
  753. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.ts +0 -91
  754. package/tsconfig.lib.json +0 -14
  755. package/tsconfig.lib.prod.json +0 -10
  756. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,341 @@
1
+ import { Component, EventEmitter, input, Output } from '@angular/core';
2
+ import { getOrExecute, mapToMenuItem } from '../../../public-api';
3
+ import { Subject, takeUntil, timer } from 'rxjs';
4
+ import { BasecomponentTable } from '../../api/base-components/base-component-table';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../../../public-api";
8
+ import * as i3 from "primeng/api";
9
+ import * as i4 from "primeng/autofocus";
10
+ import * as i5 from "primeng/tooltip";
11
+ import * as i6 from "primeng/button";
12
+ import * as i7 from "primeng/contextmenu";
13
+ import * as i8 from "primeng/dropdown";
14
+ import * as i9 from "primeng/inputtext";
15
+ import * as i10 from "primeng/menu";
16
+ import * as i11 from "primeng/panel";
17
+ import * as i12 from "primeng/ripple";
18
+ import * as i13 from "primeng/tieredmenu";
19
+ import * as i14 from "primeng/table";
20
+ import * as i15 from "primeng/toast";
21
+ import * as i16 from "@angular/forms";
22
+ import * as i17 from "../kv-inputs/kv-input-calendar/kv-input-calendar.component";
23
+ import * as i18 from "../kv-inputs/kv-input-mask/kv-input-mask.component";
24
+ import * as i19 from "../kv-inputs/kv-input-number/kv-input-number.component";
25
+ import * as i20 from "../kv-inputs/kv-input-text/kv-input-text.component";
26
+ import * as i21 from "../kv-inputs/kv-switch/kv-switch.component";
27
+ import * as i22 from "../kv-button/kv-button.component";
28
+ import * as i23 from "../../api/pipes/mask.pipe";
29
+ export class KvTableEditComponent extends BasecomponentTable {
30
+ setDisplayMode(mode) {
31
+ this.selectedDisplayMode = mode;
32
+ }
33
+ get visibleColumns() {
34
+ return this.config.columns.filter(col => !col.displayMode || col.displayMode.includes(this.selectedDisplayMode));
35
+ }
36
+ constructor(datePipe, decimalPipe, cpfCnpjPipe, telefonePipe, notificationService
37
+ // capitalizePipe: CapitalizePipe,
38
+ ) {
39
+ super(datePipe, decimalPipe, cpfCnpjPipe, telefonePipe, notificationService);
40
+ this.enableSizes = input(false);
41
+ this.editMode = input('cell');
42
+ this.hideBtnEdit = input(false);
43
+ this.enableDisplayMode = input(false);
44
+ this.itemsParaSalvamento = [];
45
+ this.isEditing = false;
46
+ this.isShowSizes = false;
47
+ this.clonedDataSource = {};
48
+ this.selectedProduct = {
49
+ rowData: {},
50
+ editing: false
51
+ };
52
+ this.menuItems = [];
53
+ this.selectedDisplayMode = 'details';
54
+ this.actionsDisplayMode = [
55
+ {
56
+ label: 'Lista',
57
+ icon: 'pi pi-list-check',
58
+ command: () => {
59
+ this.selectedDisplayMode = 'list';
60
+ }
61
+ },
62
+ {
63
+ label: 'Detalhes',
64
+ icon: 'pi pi-table',
65
+ command: () => {
66
+ this.selectedDisplayMode = 'details';
67
+ }
68
+ },
69
+ ];
70
+ /** Emite evento de salvamento da linha */
71
+ this.onSave = new EventEmitter();
72
+ this.filterField = new EventEmitter();
73
+ this.sizes = [
74
+ {
75
+ label: 'Pequeno', class: 'p-datatable-sm', size: 0.83, command: (x) => {
76
+ this.selectedSize = { label: 'Pequeno', class: 'p-datatable-sm', size: 0.83 };
77
+ }
78
+ },
79
+ {
80
+ label: 'Médio', class: 'p-datatable-md', size: 1, command: (x) => {
81
+ this.selectedSize = { label: 'Médio', class: 'p-datatable-md', size: 1 };
82
+ }
83
+ },
84
+ {
85
+ label: 'Grande', class: 'p-datatable-lg', size: 1.17, command: (x) => {
86
+ this.selectedSize = { label: 'Large', class: 'p-datatable-lg', size: 1.17 };
87
+ }
88
+ },
89
+ ];
90
+ this.onSaveTimer$ = new Subject(); // Sujeito para controlar o temporizador
91
+ this.onDestroy$ = new Subject();
92
+ this.isRowSelectable = this.isRowSelectable.bind(this);
93
+ }
94
+ getOrExecute(action, data) {
95
+ return getOrExecute(action, data);
96
+ }
97
+ ngOnInit() {
98
+ super.ngOnInit();
99
+ this.onSaveTimer$.pipe(takeUntil(this.onDestroy$)).subscribe(() => {
100
+ // Quando o temporizador terminar, emita o evento onSave com os dados a serem salvos
101
+ this.onRowEditSave();
102
+ });
103
+ this.tamanhoTela = window.innerWidth;
104
+ this.itemsContextMenu = [
105
+ {
106
+ label: 'Editar linha', icon: 'pi pi-fw pi-pencil', command: () => {
107
+ const element = document.getElementById('rowEdit' + this.selectedProduct.rowData[this.config.dataKey]);
108
+ if (element && !this.config.disableEditRowFunction?.(this.selectedProduct.rowData)) {
109
+ element.click();
110
+ }
111
+ else {
112
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
113
+ }
114
+ this.onRowEditInit(this.selectedProduct);
115
+ }
116
+ },
117
+ {
118
+ label: 'Cancelar edição', icon: 'pi pi-fw pi-times', command: (data) => {
119
+ const element = document.getElementById('rowCancel' + this.selectedProduct.rowData[this.config.dataKey]);
120
+ if (element) {
121
+ element.click();
122
+ }
123
+ else {
124
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
125
+ }
126
+ }
127
+ },
128
+ {
129
+ label: 'Salvar edição', icon: 'pi pi-fw pi-save', command: (data) => {
130
+ const element = document.getElementById('rowSave' + this.selectedProduct.rowData[this.config.dataKey]);
131
+ if (element) {
132
+ element.click(); // Dispara um evento de clique no elemento com ID 'teste'
133
+ }
134
+ else {
135
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
136
+ }
137
+ }
138
+ },
139
+ {
140
+ label: 'Entrar em modo de edição', icon: 'pi pi-fw pi-pencil', command: () => {
141
+ this.isEditing = true;
142
+ }
143
+ },
144
+ {
145
+ label: 'Sair do modo de edição', icon: 'pi pi-fw pi-pencil', command: () => {
146
+ this.isEditing = false;
147
+ if (this.itemsParaSalvamento.length > 0)
148
+ this.onRowEditSave();
149
+ }
150
+ },
151
+ ];
152
+ // Subscreve-se ao sujeito onSaveTimer$
153
+ }
154
+ adjustTableSize() {
155
+ }
156
+ ngOnDestroy() {
157
+ // Completa o sujeito onDestroy$
158
+ this.onDestroy$.next();
159
+ this.onDestroy$.complete();
160
+ // Se houver um temporizador em execução, pare-o
161
+ if (this.timerSubscription) {
162
+ this.timerSubscription.unsubscribe();
163
+ // Após parar o temporizador, chame onSave diretamente para salvar os dados
164
+ this.onRowEditSave();
165
+ }
166
+ }
167
+ ngDoCheck() {
168
+ this.itemsContextMenu[0].visible = this.editMode() == 'row' && !this.selectedProduct.editing && this.isEditableTable() !== false;
169
+ this.itemsContextMenu[1].visible = this.editMode() == 'row' && this.selectedProduct.editing && this.isEditableTable() !== false;
170
+ this.itemsContextMenu[2].visible = this.editMode() == 'row' && this.selectedProduct.editing && this.isEditableTable() !== false;
171
+ this.itemsContextMenu[3].visible = this.editMode() == 'cell' && !this.isEditing;
172
+ this.itemsContextMenu[4].visible = this.editMode() == 'cell' && this.isEditing;
173
+ }
174
+ dbClickEdit() {
175
+ const element = document.getElementById('rowEdit' + this.selectedItem[this.config.dataKey]);
176
+ if (element) {
177
+ element.click();
178
+ }
179
+ else {
180
+ if (this.editMode() == 'row')
181
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
182
+ }
183
+ }
184
+ isRowSelectable(event) {
185
+ return !this.isDisabledCheckbox(event.data);
186
+ }
187
+ ngOnChanges(changes) {
188
+ //Called before any other lifecycle hook. Use it to inject dependencies, but avoid any serious work here.
189
+ //Add '${implements OnChanges}' to the class.
190
+ if (changes['setConfig'] && this.config) {
191
+ this.config.columns.forEach((e) => {
192
+ if (e.fieldControlType == 'dropdown') {
193
+ this.listarDrop(e.fieldDropDownControl?.fieldControlDropdownService, e);
194
+ }
195
+ });
196
+ }
197
+ }
198
+ criarMenusModal(data) {
199
+ if (this.config.actions && data) {
200
+ for (const action of this.config.actions) {
201
+ const menuInsert = mapToMenuItem(action, data);
202
+ let item = this.menuItems.filter(x => x.command == menuInsert.command);
203
+ if (item.length == 0)
204
+ this.menuItems.push(menuInsert);
205
+ else {
206
+ if (menuInsert.label != item[0].label) {
207
+ let index = this.menuItems.indexOf(item[0]);
208
+ this.menuItems.splice(index, 1);
209
+ }
210
+ if (menuInsert.visible != item[0].visible) {
211
+ let index = this.menuItems.indexOf(item[0]);
212
+ this.menuItems.splice(index, 1);
213
+ }
214
+ if (menuInsert.disabled != item[0].disabled) {
215
+ let index = this.menuItems.indexOf(item[0]);
216
+ this.menuItems.splice(index, 1);
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ onRowEditInit(rowData) {
223
+ this.clonedDataSource[rowData.id] = { ...rowData };
224
+ }
225
+ onEditInit(event1) {
226
+ if (this.isEditing)
227
+ this.itemInitialState = { ...event1.data };
228
+ }
229
+ onEditComplete(event) {
230
+ if (this.isEditing) {
231
+ if (this.itemsParaSalvamento.length === 0 ||
232
+ this.itemsParaSalvamento[this.itemsParaSalvamento.length - 1].index === event.index) {
233
+ if (event.data && this.itemInitialState &&
234
+ event.data.hasOwnProperty(event.field) &&
235
+ this.itemInitialState.hasOwnProperty(event.field) &&
236
+ event.data[event.field] != this.itemInitialState[event.field]) {
237
+ this.adicionarCelulaParaSalvar(event);
238
+ }
239
+ }
240
+ else {
241
+ this.onRowEditSave();
242
+ this.adicionarCelulaParaSalvar(event);
243
+ }
244
+ }
245
+ }
246
+ adicionarCelulaParaSalvar(item) {
247
+ // Adiciona os dados editados ao array para salvamento
248
+ this.itemsParaSalvamento.push(item);
249
+ // Se houver um temporizador em execução, limpe-o e reinicie
250
+ if (this.timerSubscription) {
251
+ this.timerSubscription.unsubscribe();
252
+ }
253
+ // Inicia o temporizador para emitir onSave após 5 segundos
254
+ this.timerSubscription = timer(5000).subscribe(() => {
255
+ this.onSaveTimer$.next(); // Emita onSave após 5 segundos
256
+ });
257
+ }
258
+ onRowEditSave() {
259
+ if (this.itemsParaSalvamento.length == 0 || !this.itemsParaSalvamento[0].data)
260
+ return;
261
+ const objetoRefletido = { ...this.itemsParaSalvamento[0].data };
262
+ // Reflete as alterações em um objeto
263
+ this.itemsParaSalvamento.forEach(item => {
264
+ if (!item.data)
265
+ return; // Verifica se o item tem a propriedade 'data'
266
+ const chave = item.field;
267
+ const valor = item.data[chave];
268
+ objetoRefletido[chave] = valor;
269
+ });
270
+ this.onSave.emit(objetoRefletido);
271
+ this.itemsParaSalvamento = [];
272
+ }
273
+ onRowEditCancel(product, index) {
274
+ this.dataSource[index] = this.clonedDataSource[product.id];
275
+ delete this.clonedDataSource[product.id];
276
+ }
277
+ listarDrop(service, col, indtodos) {
278
+ const column = this.config.columns?.indexOf(col);
279
+ return this.config.columns[column].fieldDropDownControl?.fieldControlDropdownSource;
280
+ }
281
+ retornaDescricaoDrop(rowData, col) {
282
+ const data = col.fieldDropDownControl?.fieldControlDropdownSource;
283
+ const idobjeto = col.fieldDropDownControl?.idobjeto;
284
+ const descricaoobjeto = col.fieldDropDownControl?.descricaoobjeto;
285
+ // @ts-ignore
286
+ const valorAtual = rowData[col.field];
287
+ if (data && idobjeto && descricaoobjeto)
288
+ return data?.find((item) => item[idobjeto] == valorAtual)[descricaoobjeto];
289
+ else
290
+ return 'Carregando';
291
+ }
292
+ isDisableEditRowFunction(rowData) {
293
+ return this.config.disableEditRowFunction ? this.config.disableEditRowFunction(rowData) : false;
294
+ }
295
+ isDisableEditRowCellFunction(rowData, col) {
296
+ return col.disableEditRowCellFunction ? col.disableEditRowCellFunction(rowData) : false;
297
+ }
298
+ isEditableTable() {
299
+ if (!this.config.columns)
300
+ return null;
301
+ return this.config.columns.some((column) => 'fieldControlType' in column);
302
+ }
303
+ transformValueDrop(value, col) {
304
+ if (value != null) {
305
+ if (!col.pipe) {
306
+ return value;
307
+ }
308
+ switch (col.pipe) {
309
+ case 'date':
310
+ return this.datePipe.transform(value, 'dd/MM/yyyy');
311
+ case 'datetime':
312
+ return this.datePipe.transform(value, 'dd/MM/yyyy hh:mm');
313
+ case 'decimal':
314
+ return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
315
+ case 'cpfcnpj':
316
+ return this.cpfCnpjPipe.transform(value);
317
+ case 'telefone':
318
+ return this.telefonePipe.transform(value);
319
+ case 'capitalize':
320
+ return this.transformCapitalize(value);
321
+ case 'money':
322
+ return this.formatarValor(value);
323
+ case 'percentage':
324
+ return `${value} %`;
325
+ default:
326
+ break;
327
+ }
328
+ }
329
+ }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableEditComponent, selector: "kv-table-edit", inputs: { enableSizes: { classPropertyName: "enableSizes", publicName: "enableSizes", isSignal: true, isRequired: false, transformFunction: null }, editMode: { classPropertyName: "editMode", publicName: "editMode", isSignal: true, isRequired: false, transformFunction: null }, hideBtnEdit: { classPropertyName: "hideBtnEdit", publicName: "hideBtnEdit", isSignal: true, isRequired: false, transformFunction: null }, enableDisplayMode: { classPropertyName: "enableDisplayMode", publicName: "enableDisplayMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSave: "onSave", filterField: "filterField" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"card kv-table-edit-container\" id=\"tamanhotabela\" [style.font-size]=\"'1px'\">\r\n <p-toast></p-toast>\r\n\r\n @if(filtrosAvancados){\r\n <p-panel\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n @if (!collapsed) {\r\n <i class=\"pi pi-filter\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n @if (collapsed) {\r\n <i class=\"pi pi-minus\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n }\r\n\r\n <p-contextMenu #cm [model]=\"itemsContextMenu\"></p-contextMenu>\r\n <p-table\r\n #te\r\n [editMode]=\"editMode()\"\r\n (onEditComplete)=\"onEditComplete($event)\"\r\n (onEditInit)=\"onEditInit($event)\"\r\n [reorderableColumns]=\"config.reorderableColumns || false\"\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n [dataKey]=\"config.dataKey\"\r\n [columns]=\"visibleColumns\"\r\n [scrollable]=\"true\"\r\n appendTo=\"body\"\r\n [styleClass]=\"selectedSize.class\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n paginatorDropdownAppendTo=\"body\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n [(contextMenuSelection)]=\"selectedProduct\"\r\n [contextMenu]=\"isEditableTable() ? cm : null\"\r\n >\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n @if (config?.enableCation || enableSizes()){\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 p-0 m-0\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 gap-1 p-0\"\r\n >\r\n \r\n @if (config.enableFilter) {\r\n <!-- <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search text-sm\"></i>\r\n \r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-1rem\"\r\n autocomplete=\"off\"\r\n />\r\n </span> -->\r\n\r\n <input\r\n pAutoFocus\r\n pInputText\r\n [autofocus]=\"tamanhoTela > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n [placeholder]=\"'Pesquisar...'\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6 \"\r\n />\r\n }\r\n\r\n @if(enableSizes()){\r\n <div class=\"sizes-controls\">\r\n <kv-button \r\n [severity]=\"'tertiary'\"\r\n label=\"Tamanho\"\r\n [icon]=\"'match_case'\"\r\n [pTooltip]=\"''\"\r\n size=\"small\"\r\n [popup]=\"true\"\r\n [iconPosition]=\"'left'\"\r\n \r\n (click)=\"menu.toggle($event)\"\r\n >\r\n </kv-button>\r\n\r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n styleClass=\"menuSizes\"\r\n appendTo=\"body\"\r\n #menu\r\n [model]=\"sizes\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\r\n (click)=\"item.command()\"\r\n >\r\n @if(this.selectedSize.size != item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n ></div>\r\n }\r\n \r\n @if(this.selectedSize.size == item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#1DA750'\"\r\n ></div>\r\n }\r\n \r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu> \r\n \r\n <!-- <kv-button (click)=\"menu.toggle($event)\"\r\n [severity]=\"'tertiary'\"\r\n label=\"Aa\"\r\n [pTooltip]=\"'Tamanho da fonte'\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n\r\n \r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n styleClass=\"menuSizes\"\r\n appendTo=\"body\"\r\n #menu\r\n [model]=\"sizes\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\r\n (click)=\"item.command()\"\r\n >\r\n @if(this.selectedSize.size != item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n ></div>\r\n }\r\n \r\n @if(this.selectedSize.size == item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#1DA750'\"\r\n ></div>\r\n }\r\n \r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu> -->\r\n </div> \r\n }\r\n @if(enableDisplayMode()) {\r\n\r\n @if(enableDisplayMode()){\r\n <kv-button \r\n [label]=\"'Exibir'\"\r\n [iconPosition]=\"'left'\"\r\n \r\n [pTooltip]=\"''\"\r\n [severity]=\"'tertiary'\"\r\n [popup]=\"true\"\r\n [icon]=\"'grid_view'\"\r\n (click)=\"menuDisplay.toggle($event)\"\r\n size=\"small\"\r\n ></kv-button>\r\n\r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n appendTo=\"body\"\r\n #menuDisplay\r\n [model]=\"actionsDisplayMode\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 p-2\"\r\n (click)=\"item.command()\"\r\n >\r\n \r\n <i [ngClass]=\"item.icon\" class=\"text-sm\"></i>\r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n }\r\n \r\n <!-- <kv-button \r\n label=\"\"\r\n icon=\"list\"\r\n [severity]=\"selectedDisplayMode === 'list' ? 'secondary' : 'tertiary'\"\r\n size=\"small\"\r\n (click)=\"setDisplayMode('list')\"\r\n pTooltip=\"Vis\u00E3o Simplificada\"\r\n />\r\n\r\n <kv-button \r\n label=\"\"\r\n icon=\"table\"\r\n [severity]=\"selectedDisplayMode === 'details' ? 'secondary' : 'tertiary'\"\r\n size=\"small\"\r\n (click)=\"setDisplayMode('details')\"\r\n pTooltip=\"Vis\u00E3o Detalhada\"\r\n /> -->\r\n \r\n }\r\n\r\n\r\n <!-- @if(enableDisplayMode()){\r\n <kv-button \r\n [label]=\"'Exibir'\"\r\n [iconPosition]=\"'right'\"\r\n [pTooltip]=\"'Modo de exibi\u00E7\u00E3o'\"\r\n [severity]=\"'tertiary'\"\r\n [popup]=\"true\"\r\n [items]=\"actionsDisplayMode\"\r\n size=\"small\"\r\n />\r\n\r\n \r\n } -->\r\n </div>\r\n\r\n @if(isEditing){\r\n <span class=\"text-aviso\">\r\n Tabela em modo de edi\u00E7\u00E3o\r\n </span>\r\n }\r\n \r\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n @if(!isEditing){\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((selectedItems.length > 0 || action.showAcoesLote) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"\r\n (getOrExecute(action.tooltip, selectedItems)?.length ??\r\n 0 > 7) &&\r\n config.actionsLote &&\r\n i == config.actionsLote.length - 1\r\n ? 'left'\r\n : 'bottom'\r\n \"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n size=\"small\"\r\n />\r\n }\r\n </div>\r\n }\r\n }\r\n\r\n @if (isEditableTable() && !hideBtnEdit()) {\r\n <div>\r\n <kv-button\r\n (click)=\"this.isEditing = !this.isEditing\"\r\n [pTooltip]=\"!isEditing ? 'Habilitar Edi\u00E7\u00E3o' : 'Desabilitar Edi\u00E7\u00E3o'\"\r\n [tooltipPosition]=\"'left'\"\r\n [severity]=\"'tertiary'\"\r\n [icon]=\"'edit_square'\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!---------------->\r\n \r\n </div>\r\n </ng-template>\r\n }\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if(config.enableSelect && !isEditing){\r\n <th\r\n [class]=\"selectedSize.class + 'th'\"\r\n >\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n }\r\n @for(col of columns; track $index){\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width * selectedSize.size + 'px'\"\r\n pReorderableColumn\r\n [class]=\"selectedSize.class + 'th'\"\r\n \r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span class=\"text-xs font-medium\">{{ col.header }}</span>\r\n @if(col.sortable === true) {\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n }\r\n @if(col.headerTooltip){\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >\r\n info\r\n </span>\r\n }\r\n \r\n </div>\r\n </th>\r\n }\r\n \r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <th></th>\r\n }\r\n\r\n @if(isEditableTable() && this.editMode() == 'row'){\r\n <th\r\n id=\"th-edit\"\r\n style=\"width: 20px\"\r\n >\r\n Editar\r\n </th>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n\r\n\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template pTemplate=\"body\"\r\n let-rowData\r\n let-editing=\"editing\"\r\n let-ri=\"rowIndex\"\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr\r\n [pEditableRow]=\"rowData\"\r\n [pEditableRowDisabled]=\"false\"\r\n [pContextMenuRow]=\"{rowData, editing}\"\r\n [class]=\"selectedSize.class + '-tr'\"\r\n class=\"tr-td\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n >\r\n @if(config.enableSelect && !isEditing){\r\n <td\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n \r\n <p-tableCheckbox\r\n class=\"check-edit-list\"\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n }\r\n @for (col of columns; track i; let i = $index){\r\n <ng-container>\r\n <!-- FIXME: Testar a implementa\u00E7\u00E3o abaixo e mesaclar as duas formas -->\r\n \r\n <ng-template #templateInput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container *ngIf=\"isEditing; else templatevisualedicao\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-text\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-text>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-number\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-number>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-mask\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [mask]=\"col.mask\"\r\n [required]=\"col.required ?? true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-mask>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-switch\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-switch>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div [style.width]=\"col.width\">\r\n <div\r\n [style.width]=\"col.width\"\r\n class=\"grid formgrid p-fluid\"\r\n >\r\n <kv-input-calendar\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <p-dropdown\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n appendTo=\"body\"\r\n [panelStyle]=\"{ 'font-size': '0.75rem' }\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"\r\n col.fieldDropDownControl.fieldControlDropdownSource\r\n \"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #templatevisualedicao>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-template>\r\n \r\n <ng-template #templateOutput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{ transformValueDrop(retornaDescricaoDrop(rowData, col), col) }}\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [disabled]=\"true\"\r\n ></kv-switch>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n {{ rowData[col.field] | mask : col.mask }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchDefault>\r\n {{ transformValue(rowData, col) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n \r\n @if(editMode() == 'cell' && col.fieldControlType){\r\n <td\r\n [pEditableColumn]=\"rowData\"\r\n [pEditableColumnField]=\"col.field\"\r\n [pEditableColumnRowIndex]=\"rowData[config.dataKey]\"\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor>\r\n <ng-container>\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n \r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- NOTE: Edi\u00E7\u00E3o de linha -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n @if(false && col.fieldControlType && editMode() == 'row'){\r\n <td\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor\r\n [ngClass]=\"{ switch: col.fieldControlType == 'switch' }\"\r\n >\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n @if(isImageField(col)){\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\"/>\r\n </span>\r\n }\r\n \r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"\r\n !rowgroup &&\r\n !col.grouped &&\r\n !col.template &&\r\n !col.fieldControlType\r\n \"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n <!-- <p-skeleton shape=\"circle\" size=\"3rem\"></p-skeleton> -->\r\n </span>\r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\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 </td>\r\n \r\n </ng-container>\r\n }\r\n \r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <td\r\n \r\n [ngClass]=\"{\r\n 'td-tools': isEditableTable() && this.editMode() == 'row',\r\n 'td-tools-sticky': !isEditableTable() || this.editMode() == 'cell'\r\n }\"\r\n [style]=\"\r\n applyStyle(rowData, { field: 'btns-options', header: '' }) \r\n\r\n \"\r\n >\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n \r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px; padding: 0.1rem;margin-right: .5rem;\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\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 </div>\r\n </td>\r\n }\r\n \r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n @if(this.isEditableTable() && this.editMode() == 'row'){\r\n <td class=\"td-edit\">\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n @if(!editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [id]=\"'rowEdit' + rowData[config.dataKey]\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pInitEditableRow\r\n icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\"\r\n class=\"p-button-rounded p-button-text\"\r\n ></button>\r\n }\r\n \r\n @if(editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pCancelEditableRow\r\n icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\"\r\n [id]=\"'rowCancel' + rowData[config.dataKey]\"\r\n class=\"p-button-rounded p-button-text p-button-danger\"\r\n ></button>\r\n }\r\n \r\n </div>\r\n </td>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:1px solid #ddd!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}#th-edit{position:sticky;right:0;background-color:#f1f1f1}:host ::ng-deep .p-datatable .p-datatable-header{border:none!important}.btns-options{position:relative;left:20px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:#29b92d;color:#f2f3f5;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:center;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#249a29!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:transparent;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{border-left:none!important;border-right:none!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:20%;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz{font-weight:300;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}:host ::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}:host ::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#f1f1f1!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important;-webkit-border-radius:0px 0px 5px 0px!important;-moz-border-radius:0px 0px 5px 0px!important;-ms-border-radius:0px 0px 5px 0px!important;-o-border-radius:0px 0px 5px 0px!important}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important;-webkit-border-radius:0px 0px 0px 5px!important;-moz-border-radius:0px 0px 0px 5px!important;-ms-border-radius:0px 0px 0px 5px!important;-o-border-radius:0px 0px 0px 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .p-cell-editing{padding-top:0!important;padding-bottom:0!important}:host ::ng-deep p-dropdown-item{font-size:.1rem}.text-aviso{color:red;font-size:.85rem;font-weight:400}:host ::ng-deep .p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-selectbutton .p-button{font-size:.75rem!important;height:24px;padding:11px}#btn-sizes{border-radius:50%;width:.5rem!important;height:.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-datatable.p-datatable-sm{font-size:.625rem!important}:host ::ng-deep .p-datatable.p-datatable-md{font-size:.75rem!important}:host ::ng-deep .p-datatable.p-datatable-lg{font-size:.875rem!important}input{height:1.75rem}:host ::ng-deep .p-datatable-sm-tr>td i>span.material-symbols-outlined{font-size:.9rem}:host ::ng-deep .p-datatable-sm-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:15px;height:15px}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.6rem;height:1rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.6rem!important;width:2.4rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td i>span.material-symbols-outlined{font-size:1rem}:host ::ng-deep .p-datatable-md-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.7rem;height:1rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.83rem!important;width:2.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.7rem!important;height:.7rem!important;left:.25rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.7rem;height:.7rem;left:.25rem;margin-top:-.4rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-lg-tr>td i>span.material-symbols-outlined{font-size:1.1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.8rem;height:1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-sm-tr>td{padding-top:0!important;padding-top:.05rem!important;padding-bottom:.05rem!important}:host ::ng-deep .p-datatable-md-tr>td,:host ::ng-deep .p-datatable-lg-tr>td{padding:.15rem!important}.p-datatable.p-datatable-smth{font-size:.6rem!important}.p-datatable.p-datatable-dmth{font-size:.7rem!important}.p-datatable.p-datatable-lgth{font-size:.8rem!important}:host ::ng-deep svg.p-icon{width:.65rem;height:.65rem}:host ::ng-deep .p-datatable.p-datatable-sm * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:15px!important}:host ::ng-deep .p-datatable.p-datatable-md * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-datatable.p-datatable-lg * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:30px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep .teste>.p-button{background:#f1f1f1!important;color:#a9a9a9;border:none;box-shadow:#0000003d 0 3px 8px;height:20px}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:first-child{font-size:.6rem}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:last-child{font-size:.8rem}.tag{width:5px;height:25px;border-radius:.25rem}:host ::ng-deep .p-speeddial-button.p-button.p-button-icon-only{width:2rem;height:2rem;font-size:1rem}.item-circle{width:4rem;height:2rem;padding:1rem;font-size:.8rem;border-radius:17%;display:flex;align-items:center;justify-content:center;background:#f1f1f1!important;box-shadow:#0000003d 0 3px 13px}:host ::ng-deep p-speeddial>div>button>span.material-symbols-outlined.ng-star-inserted{font-size:1.1rem}:host ::ng-deep .check-edit-list>div.p-checkbox.p-component{height:1rem}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px;height:3px}:host ::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .kv-table-edit-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.td-tools-sticky{position:sticky;right:0;background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i10.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i11.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i12.Ripple, selector: "[pRipple]" }, { kind: "component", type: i13.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i14.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i14.ContextMenuRow, selector: "[pContextMenuRow]", inputs: ["pContextMenuRow", "pContextMenuRowIndex", "pContextMenuRowDisabled"] }, { kind: "directive", type: i14.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "directive", type: i14.EditableColumn, selector: "[pEditableColumn]", inputs: ["pEditableColumn", "pEditableColumnField", "pEditableColumnRowIndex", "pEditableColumnDisabled", "pFocusCellSelector"] }, { kind: "component", type: i14.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i14.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i14.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i14.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i14.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i15.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvInputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "defaultDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i18.KvInputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i19.KvInputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i20.KvInputTextComponent, selector: "kv-input-text", inputs: ["textCaptalized"] }, { kind: "component", type: i21.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i22.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup"], outputs: ["iconChange", "onClick"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i23.MaskPipe, name: "mask" }] }); }
332
+ }
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditComponent, decorators: [{
334
+ type: Component,
335
+ args: [{ selector: 'kv-table-edit', template: "<div class=\"card kv-table-edit-container\" id=\"tamanhotabela\" [style.font-size]=\"'1px'\">\r\n <p-toast></p-toast>\r\n\r\n @if(filtrosAvancados){\r\n <p-panel\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n @if (!collapsed) {\r\n <i class=\"pi pi-filter\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n @if (collapsed) {\r\n <i class=\"pi pi-minus\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n }\r\n\r\n <p-contextMenu #cm [model]=\"itemsContextMenu\"></p-contextMenu>\r\n <p-table\r\n #te\r\n [editMode]=\"editMode()\"\r\n (onEditComplete)=\"onEditComplete($event)\"\r\n (onEditInit)=\"onEditInit($event)\"\r\n [reorderableColumns]=\"config.reorderableColumns || false\"\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n [dataKey]=\"config.dataKey\"\r\n [columns]=\"visibleColumns\"\r\n [scrollable]=\"true\"\r\n appendTo=\"body\"\r\n [styleClass]=\"selectedSize.class\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n paginatorDropdownAppendTo=\"body\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n [(contextMenuSelection)]=\"selectedProduct\"\r\n [contextMenu]=\"isEditableTable() ? cm : null\"\r\n >\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n @if (config?.enableCation || enableSizes()){\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 p-0 m-0\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 gap-1 p-0\"\r\n >\r\n \r\n @if (config.enableFilter) {\r\n <!-- <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search text-sm\"></i>\r\n \r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-1rem\"\r\n autocomplete=\"off\"\r\n />\r\n </span> -->\r\n\r\n <input\r\n pAutoFocus\r\n pInputText\r\n [autofocus]=\"tamanhoTela > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n [placeholder]=\"'Pesquisar...'\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6 \"\r\n />\r\n }\r\n\r\n @if(enableSizes()){\r\n <div class=\"sizes-controls\">\r\n <kv-button \r\n [severity]=\"'tertiary'\"\r\n label=\"Tamanho\"\r\n [icon]=\"'match_case'\"\r\n [pTooltip]=\"''\"\r\n size=\"small\"\r\n [popup]=\"true\"\r\n [iconPosition]=\"'left'\"\r\n \r\n (click)=\"menu.toggle($event)\"\r\n >\r\n </kv-button>\r\n\r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n styleClass=\"menuSizes\"\r\n appendTo=\"body\"\r\n #menu\r\n [model]=\"sizes\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\r\n (click)=\"item.command()\"\r\n >\r\n @if(this.selectedSize.size != item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n ></div>\r\n }\r\n \r\n @if(this.selectedSize.size == item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#1DA750'\"\r\n ></div>\r\n }\r\n \r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu> \r\n \r\n <!-- <kv-button (click)=\"menu.toggle($event)\"\r\n [severity]=\"'tertiary'\"\r\n label=\"Aa\"\r\n [pTooltip]=\"'Tamanho da fonte'\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n\r\n \r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n styleClass=\"menuSizes\"\r\n appendTo=\"body\"\r\n #menu\r\n [model]=\"sizes\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\r\n (click)=\"item.command()\"\r\n >\r\n @if(this.selectedSize.size != item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n ></div>\r\n }\r\n \r\n @if(this.selectedSize.size == item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#1DA750'\"\r\n ></div>\r\n }\r\n \r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu> -->\r\n </div> \r\n }\r\n @if(enableDisplayMode()) {\r\n\r\n @if(enableDisplayMode()){\r\n <kv-button \r\n [label]=\"'Exibir'\"\r\n [iconPosition]=\"'left'\"\r\n \r\n [pTooltip]=\"''\"\r\n [severity]=\"'tertiary'\"\r\n [popup]=\"true\"\r\n [icon]=\"'grid_view'\"\r\n (click)=\"menuDisplay.toggle($event)\"\r\n size=\"small\"\r\n ></kv-button>\r\n\r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n appendTo=\"body\"\r\n #menuDisplay\r\n [model]=\"actionsDisplayMode\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 p-2\"\r\n (click)=\"item.command()\"\r\n >\r\n \r\n <i [ngClass]=\"item.icon\" class=\"text-sm\"></i>\r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n }\r\n \r\n <!-- <kv-button \r\n label=\"\"\r\n icon=\"list\"\r\n [severity]=\"selectedDisplayMode === 'list' ? 'secondary' : 'tertiary'\"\r\n size=\"small\"\r\n (click)=\"setDisplayMode('list')\"\r\n pTooltip=\"Vis\u00E3o Simplificada\"\r\n />\r\n\r\n <kv-button \r\n label=\"\"\r\n icon=\"table\"\r\n [severity]=\"selectedDisplayMode === 'details' ? 'secondary' : 'tertiary'\"\r\n size=\"small\"\r\n (click)=\"setDisplayMode('details')\"\r\n pTooltip=\"Vis\u00E3o Detalhada\"\r\n /> -->\r\n \r\n }\r\n\r\n\r\n <!-- @if(enableDisplayMode()){\r\n <kv-button \r\n [label]=\"'Exibir'\"\r\n [iconPosition]=\"'right'\"\r\n [pTooltip]=\"'Modo de exibi\u00E7\u00E3o'\"\r\n [severity]=\"'tertiary'\"\r\n [popup]=\"true\"\r\n [items]=\"actionsDisplayMode\"\r\n size=\"small\"\r\n />\r\n\r\n \r\n } -->\r\n </div>\r\n\r\n @if(isEditing){\r\n <span class=\"text-aviso\">\r\n Tabela em modo de edi\u00E7\u00E3o\r\n </span>\r\n }\r\n \r\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n @if(!isEditing){\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((selectedItems.length > 0 || action.showAcoesLote) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"\r\n (getOrExecute(action.tooltip, selectedItems)?.length ??\r\n 0 > 7) &&\r\n config.actionsLote &&\r\n i == config.actionsLote.length - 1\r\n ? 'left'\r\n : 'bottom'\r\n \"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n size=\"small\"\r\n />\r\n }\r\n </div>\r\n }\r\n }\r\n\r\n @if (isEditableTable() && !hideBtnEdit()) {\r\n <div>\r\n <kv-button\r\n (click)=\"this.isEditing = !this.isEditing\"\r\n [pTooltip]=\"!isEditing ? 'Habilitar Edi\u00E7\u00E3o' : 'Desabilitar Edi\u00E7\u00E3o'\"\r\n [tooltipPosition]=\"'left'\"\r\n [severity]=\"'tertiary'\"\r\n [icon]=\"'edit_square'\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!---------------->\r\n \r\n </div>\r\n </ng-template>\r\n }\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if(config.enableSelect && !isEditing){\r\n <th\r\n [class]=\"selectedSize.class + 'th'\"\r\n >\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n }\r\n @for(col of columns; track $index){\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width * selectedSize.size + 'px'\"\r\n pReorderableColumn\r\n [class]=\"selectedSize.class + 'th'\"\r\n \r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span class=\"text-xs font-medium\">{{ col.header }}</span>\r\n @if(col.sortable === true) {\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n }\r\n @if(col.headerTooltip){\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >\r\n info\r\n </span>\r\n }\r\n \r\n </div>\r\n </th>\r\n }\r\n \r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <th></th>\r\n }\r\n\r\n @if(isEditableTable() && this.editMode() == 'row'){\r\n <th\r\n id=\"th-edit\"\r\n style=\"width: 20px\"\r\n >\r\n Editar\r\n </th>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n\r\n\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template pTemplate=\"body\"\r\n let-rowData\r\n let-editing=\"editing\"\r\n let-ri=\"rowIndex\"\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr\r\n [pEditableRow]=\"rowData\"\r\n [pEditableRowDisabled]=\"false\"\r\n [pContextMenuRow]=\"{rowData, editing}\"\r\n [class]=\"selectedSize.class + '-tr'\"\r\n class=\"tr-td\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n >\r\n @if(config.enableSelect && !isEditing){\r\n <td\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n \r\n <p-tableCheckbox\r\n class=\"check-edit-list\"\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n }\r\n @for (col of columns; track i; let i = $index){\r\n <ng-container>\r\n <!-- FIXME: Testar a implementa\u00E7\u00E3o abaixo e mesaclar as duas formas -->\r\n \r\n <ng-template #templateInput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container *ngIf=\"isEditing; else templatevisualedicao\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-text\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-text>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-number\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-number>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-mask\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [mask]=\"col.mask\"\r\n [required]=\"col.required ?? true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-mask>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-switch\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-switch>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div [style.width]=\"col.width\">\r\n <div\r\n [style.width]=\"col.width\"\r\n class=\"grid formgrid p-fluid\"\r\n >\r\n <kv-input-calendar\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <p-dropdown\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n appendTo=\"body\"\r\n [panelStyle]=\"{ 'font-size': '0.75rem' }\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"\r\n col.fieldDropDownControl.fieldControlDropdownSource\r\n \"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #templatevisualedicao>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-template>\r\n \r\n <ng-template #templateOutput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{ transformValueDrop(retornaDescricaoDrop(rowData, col), col) }}\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [disabled]=\"true\"\r\n ></kv-switch>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n {{ rowData[col.field] | mask : col.mask }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchDefault>\r\n {{ transformValue(rowData, col) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n \r\n @if(editMode() == 'cell' && col.fieldControlType){\r\n <td\r\n [pEditableColumn]=\"rowData\"\r\n [pEditableColumnField]=\"col.field\"\r\n [pEditableColumnRowIndex]=\"rowData[config.dataKey]\"\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor>\r\n <ng-container>\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n \r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- NOTE: Edi\u00E7\u00E3o de linha -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n @if(false && col.fieldControlType && editMode() == 'row'){\r\n <td\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor\r\n [ngClass]=\"{ switch: col.fieldControlType == 'switch' }\"\r\n >\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n @if(isImageField(col)){\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\"/>\r\n </span>\r\n }\r\n \r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"\r\n !rowgroup &&\r\n !col.grouped &&\r\n !col.template &&\r\n !col.fieldControlType\r\n \"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n <!-- <p-skeleton shape=\"circle\" size=\"3rem\"></p-skeleton> -->\r\n </span>\r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\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 </td>\r\n \r\n </ng-container>\r\n }\r\n \r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <td\r\n \r\n [ngClass]=\"{\r\n 'td-tools': isEditableTable() && this.editMode() == 'row',\r\n 'td-tools-sticky': !isEditableTable() || this.editMode() == 'cell'\r\n }\"\r\n [style]=\"\r\n applyStyle(rowData, { field: 'btns-options', header: '' }) \r\n\r\n \"\r\n >\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n \r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px; padding: 0.1rem;margin-right: .5rem;\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\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 </div>\r\n </td>\r\n }\r\n \r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n @if(this.isEditableTable() && this.editMode() == 'row'){\r\n <td class=\"td-edit\">\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n @if(!editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [id]=\"'rowEdit' + rowData[config.dataKey]\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pInitEditableRow\r\n icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\"\r\n class=\"p-button-rounded p-button-text\"\r\n ></button>\r\n }\r\n \r\n @if(editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pCancelEditableRow\r\n icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\"\r\n [id]=\"'rowCancel' + rowData[config.dataKey]\"\r\n class=\"p-button-rounded p-button-text p-button-danger\"\r\n ></button>\r\n }\r\n \r\n </div>\r\n </td>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:1px solid #ddd!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}#th-edit{position:sticky;right:0;background-color:#f1f1f1}:host ::ng-deep .p-datatable .p-datatable-header{border:none!important}.btns-options{position:relative;left:20px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:#29b92d;color:#f2f3f5;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:center;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#249a29!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:transparent;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{border-left:none!important;border-right:none!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:20%;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz{font-weight:300;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}:host ::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}:host ::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#f1f1f1!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important;-webkit-border-radius:0px 0px 5px 0px!important;-moz-border-radius:0px 0px 5px 0px!important;-ms-border-radius:0px 0px 5px 0px!important;-o-border-radius:0px 0px 5px 0px!important}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important;-webkit-border-radius:0px 0px 0px 5px!important;-moz-border-radius:0px 0px 0px 5px!important;-ms-border-radius:0px 0px 0px 5px!important;-o-border-radius:0px 0px 0px 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .p-cell-editing{padding-top:0!important;padding-bottom:0!important}:host ::ng-deep p-dropdown-item{font-size:.1rem}.text-aviso{color:red;font-size:.85rem;font-weight:400}:host ::ng-deep .p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-selectbutton .p-button{font-size:.75rem!important;height:24px;padding:11px}#btn-sizes{border-radius:50%;width:.5rem!important;height:.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-datatable.p-datatable-sm{font-size:.625rem!important}:host ::ng-deep .p-datatable.p-datatable-md{font-size:.75rem!important}:host ::ng-deep .p-datatable.p-datatable-lg{font-size:.875rem!important}input{height:1.75rem}:host ::ng-deep .p-datatable-sm-tr>td i>span.material-symbols-outlined{font-size:.9rem}:host ::ng-deep .p-datatable-sm-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:15px;height:15px}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.6rem;height:1rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.6rem!important;width:2.4rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td i>span.material-symbols-outlined{font-size:1rem}:host ::ng-deep .p-datatable-md-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.7rem;height:1rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.83rem!important;width:2.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.7rem!important;height:.7rem!important;left:.25rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.7rem;height:.7rem;left:.25rem;margin-top:-.4rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-lg-tr>td i>span.material-symbols-outlined{font-size:1.1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.8rem;height:1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-sm-tr>td{padding-top:0!important;padding-top:.05rem!important;padding-bottom:.05rem!important}:host ::ng-deep .p-datatable-md-tr>td,:host ::ng-deep .p-datatable-lg-tr>td{padding:.15rem!important}.p-datatable.p-datatable-smth{font-size:.6rem!important}.p-datatable.p-datatable-dmth{font-size:.7rem!important}.p-datatable.p-datatable-lgth{font-size:.8rem!important}:host ::ng-deep svg.p-icon{width:.65rem;height:.65rem}:host ::ng-deep .p-datatable.p-datatable-sm * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:15px!important}:host ::ng-deep .p-datatable.p-datatable-md * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-datatable.p-datatable-lg * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:30px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep .teste>.p-button{background:#f1f1f1!important;color:#a9a9a9;border:none;box-shadow:#0000003d 0 3px 8px;height:20px}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:first-child{font-size:.6rem}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:last-child{font-size:.8rem}.tag{width:5px;height:25px;border-radius:.25rem}:host ::ng-deep .p-speeddial-button.p-button.p-button-icon-only{width:2rem;height:2rem;font-size:1rem}.item-circle{width:4rem;height:2rem;padding:1rem;font-size:.8rem;border-radius:17%;display:flex;align-items:center;justify-content:center;background:#f1f1f1!important;box-shadow:#0000003d 0 3px 13px}:host ::ng-deep p-speeddial>div>button>span.material-symbols-outlined.ng-star-inserted{font-size:1.1rem}:host ::ng-deep .check-edit-list>div.p-checkbox.p-component{height:1rem}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px;height:3px}:host ::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .kv-table-edit-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.td-tools-sticky{position:sticky;right:0;background-color:#fff}\n"] }]
336
+ }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }, { type: i2.NotificationService }], propDecorators: { onSave: [{
337
+ type: Output
338
+ }], filterField: [{
339
+ type: Output
340
+ }] } });
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1lZGl0L2t2LXRhYmxlLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZWRpdC9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBR00sTUFBTSxlQUFlLENBQUM7QUFXcEMsT0FBTyxFQU9MLFlBQVksRUFDWixhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUk3QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXBGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxrQkFBa0I7SUF5QjFELGNBQWMsQ0FBQyxJQUF3QjtRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRWhDLENBQUM7SUFvQkQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3RDLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFNRCxZQUNFLFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLFdBQXdC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WUFFRCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxNQUFNO29CQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLFVBQVU7b0JBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxTQUFTO29CQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsS0FBSyxTQUFTO29CQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLEtBQUssVUFBVTtvQkFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLFlBQVk7b0JBQ1osT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssT0FBTztvQkFDVixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLEtBQUssWUFBWTtvQkFDZixPQUFPLEdBQUksS0FBTSxJQUFJLENBQUM7Z0JBRXhCO29CQUNFLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBMVhVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHl0QkMzQ2pDLDZtb0NBaTVCQTs7MkZEdDJCYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsZUFBZTs4TEEyRGYsTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICBEYXRlUGlwZSxcclxuICBEZWNpbWFsUGlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIE1lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5cclxuaW1wb3J0IHtcclxuICBBY3Rpb25JdGVtLFxyXG4gIENwZkNucGpQaXBlLFxyXG4gIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgVGFibGVDb25maWdDb2x1bW4sXHJcbiAgVGVsZWZvbmVQaXBlLFxyXG4gIFZhbHVlT3JGbixcclxuICBnZXRPckV4ZWN1dGUsXHJcbiAgbWFwVG9NZW51SXRlbVxyXG59IGZyb20gJy4uLy4uLy4uL3B1YmxpYy1hcGknO1xyXG5cclxuaW1wb3J0IHsgVGFibGVFZGl0Q29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVlZGl0LmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgVGFibGVFZGl0Q29uZmlnIGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlZGl0LmNvbmZpZyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCYXNlY29tcG9uZW50VGFibGUgfSBmcm9tICcuLi8uLi9hcGkvYmFzZS1jb21wb25lbnRzL2Jhc2UtY29tcG9uZW50LXRhYmxlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlLWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEt2VGFibGVFZGl0Q29tcG9uZW50IGV4dGVuZHMgQmFzZWNvbXBvbmVudFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIG92ZXJyaWRlIGNvbmZpZyE6IFRhYmxlRWRpdENvbmZpZztcclxuXHJcbiAgZW5hYmxlU2l6ZXMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgZWRpdE1vZGUgPSBpbnB1dDwncm93JyB8ICdjZWxsJz4oJ2NlbGwnKTtcclxuICBoaWRlQnRuRWRpdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBlbmFibGVEaXNwbGF5TW9kZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBpdGVtc1BhcmFTYWx2YW1lbnRvOiBhbnlbXSA9IFtdXHJcbiAgcHJvdGVjdGVkIGl0ZW1Jbml0aWFsU3RhdGUhOiBhbnk7XHJcblxyXG4gIGlzRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2hvd1NpemVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xvbmVkRGF0YVNvdXJjZTogeyBbczogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICBzZWxlY3RlZFByb2R1Y3Q6IGFueSA9IHtcclxuICAgIHJvd0RhdGE6IHt9LFxyXG4gICAgZWRpdGluZzogZmFsc2VcclxuICB9O1xyXG5cclxuICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgaXRlbXNDb250ZXh0TWVudSE6IE1lbnVJdGVtW107XHJcblxyXG4gIHNlbGVjdGVkRGlzcGxheU1vZGU6ICdkZXRhaWxzJyB8ICdsaXN0JyA9ICdkZXRhaWxzJztcclxuXHJcbiAgc2V0RGlzcGxheU1vZGUobW9kZTogJ2xpc3QnIHwgJ2RldGFpbHMnKSB7XHJcbiAgdGhpcy5zZWxlY3RlZERpc3BsYXlNb2RlID0gbW9kZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgYWN0aW9uc0Rpc3BsYXlNb2RlOiBBY3Rpb25JdGVtW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnTGlzdGEnLFxyXG4gICAgICBpY29uOiAncGkgcGktbGlzdC1jaGVjaycsXHJcbiAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGlzcGxheU1vZGUgPSAnbGlzdCc7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRGV0YWxoZXMnLFxyXG4gICAgICBpY29uOiAncGkgcGktdGFibGUnLFxyXG4gICAgICBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERpc3BsYXlNb2RlID0gJ2RldGFpbHMnO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpOiBUYWJsZUVkaXRDb25maWdDb2x1bW5bXSB7ICAgIFxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBcclxuICAgICAgIWNvbC5kaXNwbGF5TW9kZSB8fCBjb2wuZGlzcGxheU1vZGUuaW5jbHVkZXModGhpcy5zZWxlY3RlZERpc3BsYXlNb2RlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiAgRW1pdGUgZXZlbnRvIGRlIHNhbHZhbWVudG8gZGEgbGluaGEgKi9cclxuICBAT3V0cHV0KCkgb25TYXZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcclxuICAgIHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxyXG4gICAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICAgLy8gY2FwaXRhbGl6ZVBpcGU6IENhcGl0YWxpemVQaXBlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoZGF0ZVBpcGUsIGRlY2ltYWxQaXBlLCBjcGZDbnBqUGlwZSwgdGVsZWZvbmVQaXBlLCBub3RpZmljYXRpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRPckV4ZWN1dGU8VD4oYWN0aW9uOiBWYWx1ZU9yRm48VD4sIGRhdGE6IGFueSk6IFQge1xyXG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2l6ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnUGVxdWVubycsIGNsYXNzOiAncC1kYXRhdGFibGUtc20nLCBzaXplOiAwLjgzLCBjb21tYW5kOiAoeDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSB7IGxhYmVsOiAnUGVxdWVubycsIGNsYXNzOiAncC1kYXRhdGFibGUtc20nLCBzaXplOiAwLjgzIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdNw6lkaW8nLCBjbGFzczogJ3AtZGF0YXRhYmxlLW1kJywgc2l6ZTogMSwgY29tbWFuZDogKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0geyBsYWJlbDogJ03DqWRpbycsIGNsYXNzOiAncC1kYXRhdGFibGUtbWQnLCBzaXplOiAxIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdHcmFuZGUnLCBjbGFzczogJ3AtZGF0YXRhYmxlLWxnJywgc2l6ZTogMS4xNywgY29tbWFuZDogKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0geyBsYWJlbDogJ0xhcmdlJywgY2xhc3M6ICdwLWRhdGF0YWJsZS1sZycsIHNpemU6IDEuMTcgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuXHJcbiAgLy9GSVhNRTogTW92ZXIgcGFyYSB1bSBsb2NhbCBhZGVxdWFkb1xyXG4gIHRpbWVyU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uOyAvLyBBc3NpbmF0dXJhIGRvIHRlbXBvcml6YWRvclxyXG4gIG9uU2F2ZVRpbWVyJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7IC8vIFN1amVpdG8gcGFyYSBjb250cm9sYXIgbyB0ZW1wb3JpemFkb3JcclxuICBwcml2YXRlIG9uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5vblNhdmVUaW1lciQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gUXVhbmRvIG8gdGVtcG9yaXphZG9yIHRlcm1pbmFyLCBlbWl0YSBvIGV2ZW50byBvblNhdmUgY29tIG9zIGRhZG9zIGEgc2VyZW0gc2Fsdm9zXHJcbiAgICAgIHRoaXMub25Sb3dFZGl0U2F2ZSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuXHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnUgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogJ0VkaXRhciBsaW5oYScsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd0VkaXQnICsgdGhpcy5zZWxlY3RlZFByb2R1Y3Qucm93RGF0YVt0aGlzLmNvbmZpZy5kYXRhS2V5XSk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbj8uKHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGEpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25Sb3dFZGl0SW5pdCh0aGlzLnNlbGVjdGVkUHJvZHVjdClcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdDYW5jZWxhciBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS10aW1lcycsIGNvbW1hbmQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93Q2FuY2VsJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0pO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogJ1NhbHZhciBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1zYXZlJywgY29tbWFuZDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dTYXZlJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0pO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGljaygpOyAvLyBEaXNwYXJhIHVtIGV2ZW50byBkZSBjbGlxdWUgbm8gZWxlbWVudG8gY29tIElEICd0ZXN0ZSdcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oXCJBIGVkacOnw6NvIGRlc3NhIGxpbmhhIGVzdGEgZGVzYWJpbGl0YWRhXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdFbnRyYXIgZW0gbW9kbyBkZSBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdTYWlyIGRvIG1vZG8gZGUgZWRpw6fDo28nLCBpY29uOiAncGkgcGktZncgcGktcGVuY2lsJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5vblJvd0VkaXRTYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBTdWJzY3JldmUtc2UgYW8gc3VqZWl0byBvblNhdmVUaW1lciRcclxuXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhZGp1c3RUYWJsZVNpemUoKXtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gQ29tcGxldGEgbyBzdWplaXRvIG9uRGVzdHJveSRcclxuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIC8vIFNlIGhvdXZlciB1bSB0ZW1wb3JpemFkb3IgZW0gZXhlY3XDp8OjbywgcGFyZS1vXHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIC8vIEFww7NzIHBhcmFyIG8gdGVtcG9yaXphZG9yLCBjaGFtZSBvblNhdmUgZGlyZXRhbWVudGUgcGFyYSBzYWx2YXIgb3MgZGFkb3NcclxuICAgICAgdGhpcy5vblJvd0VkaXRTYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbMF0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUoKSA9PSAncm93JyAmJiAhdGhpcy5zZWxlY3RlZFByb2R1Y3QuZWRpdGluZyAmJiB0aGlzLmlzRWRpdGFibGVUYWJsZSgpICE9PSBmYWxzZTtcclxuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVsxXS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSgpID09ICdyb3cnICYmIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmVkaXRpbmcgJiYgdGhpcy5pc0VkaXRhYmxlVGFibGUoKSAhPT0gZmFsc2U7XHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbMl0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUoKSA9PSAncm93JyAmJiB0aGlzLnNlbGVjdGVkUHJvZHVjdC5lZGl0aW5nICYmIHRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgIT09IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVszXS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSgpID09ICdjZWxsJyAmJiAhdGhpcy5pc0VkaXRpbmc7XHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbNF0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUoKSA9PSAnY2VsbCcgJiYgdGhpcy5pc0VkaXRpbmc7XHJcblxyXG5cclxuICB9XHJcblxyXG5cclxuICBkYkNsaWNrRWRpdCgpIHtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd0VkaXQnICsgdGhpcy5zZWxlY3RlZEl0ZW1bdGhpcy5jb25maWcuZGF0YUtleV0pO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlKCkgPT0gJ3JvdycpXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy9DYWxsZWQgYmVmb3JlIGFueSBvdGhlciBsaWZlY3ljbGUgaG9vay4gVXNlIGl0IHRvIGluamVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhdm9pZCBhbnkgc2VyaW91cyB3b3JrIGhlcmUuXHJcbiAgICAvL0FkZCAnJHtpbXBsZW1lbnRzIE9uQ2hhbmdlc30nIHRvIHRoZSBjbGFzcy5cclxuICAgIGlmIChjaGFuZ2VzWydzZXRDb25maWcnXSAmJiB0aGlzLmNvbmZpZykge1xyXG5cclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChlOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcclxuICAgICAgICBpZiAoZS5maWVsZENvbnRyb2xUeXBlID09ICdkcm9wZG93bicpIHtcclxuICAgICAgICAgIHRoaXMubGlzdGFyRHJvcChlLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNlcnZpY2UsIGUpXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgY3JpYXJNZW51c01vZGFsKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmFjdGlvbnMgJiYgZGF0YSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmNvbmZpZy5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbWVudUluc2VydCA9IG1hcFRvTWVudUl0ZW0oYWN0aW9uLCBkYXRhKTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICB4ID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUm93RWRpdEluaXQocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmNsb25lZERhdGFTb3VyY2Vbcm93RGF0YS5pZCBhcyBzdHJpbmddID0geyAuLi5yb3dEYXRhIH07XHJcbiAgfVxyXG5cclxuICBvbkVkaXRJbml0KGV2ZW50MTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcpIHRoaXMuaXRlbUluaXRpYWxTdGF0ZSA9IHsgLi4uZXZlbnQxLmRhdGEgfVxyXG4gIH1cclxuXHJcbiAgb25FZGl0Q29tcGxldGUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID09PSAwIHx8IFxyXG4gICAgICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1t0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoIC0gMV0uaW5kZXggPT09IGV2ZW50LmluZGV4KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgJiYgdGhpcy5pdGVtSW5pdGlhbFN0YXRlICYmXHJcbiAgICAgICAgICBldmVudC5kYXRhLmhhc093blByb3BlcnR5KGV2ZW50LmZpZWxkKSAmJiBcclxuICAgICAgICAgIHRoaXMuaXRlbUluaXRpYWxTdGF0ZS5oYXNPd25Qcm9wZXJ0eShldmVudC5maWVsZCkgJiZcclxuICAgICAgICAgIGV2ZW50LmRhdGFbZXZlbnQuZmllbGRdICE9IHRoaXMuaXRlbUluaXRpYWxTdGF0ZVtldmVudC5maWVsZF0pIHtcclxuICAgICAgICAgIHRoaXMuYWRpY2lvbmFyQ2VsdWxhUGFyYVNhbHZhcihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25Sb3dFZGl0U2F2ZSgpO1xyXG4gICAgICAgIHRoaXMuYWRpY2lvbmFyQ2VsdWxhUGFyYVNhbHZhcihldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkaWNpb25hckNlbHVsYVBhcmFTYWx2YXIoaXRlbTogYW55KSB7XHJcbiAgICAvLyBBZGljaW9uYSBvcyBkYWRvcyBlZGl0YWRvcyBhbyBhcnJheSBwYXJhIHNhbHZhbWVudG9cclxuICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50by5wdXNoKGl0ZW0pO1xyXG5cclxuICAgIC8vIFNlIGhvdXZlciB1bSB0ZW1wb3JpemFkb3IgZW0gZXhlY3XDp8OjbywgbGltcGUtbyBlIHJlaW5pY2llXHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pY2lhIG8gdGVtcG9yaXphZG9yIHBhcmEgZW1pdGlyIG9uU2F2ZSBhcMOzcyA1IHNlZ3VuZG9zXHJcbiAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIoNTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5vblNhdmVUaW1lciQubmV4dCgpOyAvLyBFbWl0YSBvblNhdmUgYXDDs3MgNSBzZWd1bmRvc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Sb3dFZGl0U2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID09IDAgfHwgIXRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1swXS5kYXRhKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb2JqZXRvUmVmbGV0aWRvOiBhbnkgPSB7IC4uLnRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1swXS5kYXRhIH07XHJcbiAgICAvLyBSZWZsZXRlIGFzIGFsdGVyYcOnw7VlcyBlbSB1bSBvYmpldG9cclxuICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50by5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0uZGF0YSkgcmV0dXJuOyAvLyBWZXJpZmljYSBzZSBvIGl0ZW0gdGVtIGEgcHJvcHJpZWRhZGUgJ2RhdGEnXHJcbiAgICAgIGNvbnN0IGNoYXZlID0gaXRlbS5maWVsZFxyXG4gICAgICBjb25zdCB2YWxvciA9IGl0ZW0uZGF0YVtjaGF2ZV07XHJcbiAgICAgIG9iamV0b1JlZmxldGlkb1tjaGF2ZV0gPSB2YWxvcjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vblNhdmUuZW1pdChvYmpldG9SZWZsZXRpZG8pXHJcbiAgICB0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8gPSBbXTtcclxuICB9XHJcblxyXG5cclxuICBvblJvd0VkaXRDYW5jZWwocHJvZHVjdDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2VbaW5kZXhdID0gdGhpcy5jbG9uZWREYXRhU291cmNlW3Byb2R1Y3QuaWQgYXMgc3RyaW5nXTtcclxuICAgIGRlbGV0ZSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xyXG4gIH1cclxuXHJcbiAgbGlzdGFyRHJvcChzZXJ2aWNlOiBhbnksIGNvbDogYW55LCBpbmR0b2Rvcz86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnM/LmluZGV4T2YoY29sKTtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgfVxyXG5cclxuICByZXRvcm5hRGVzY3JpY2FvRHJvcChyb3dEYXRhOiBhbnlbXSwgY29sOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pIHtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gY29sLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZVxyXG4gICAgY29uc3QgaWRvYmpldG8gPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/Lmlkb2JqZXRvXHJcbiAgICBjb25zdCBkZXNjcmljYW9vYmpldG8gPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/LmRlc2NyaWNhb29iamV0b1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgY29uc3QgdmFsb3JBdHVhbCA9IHJvd0RhdGFbY29sLmZpZWxkXVxyXG5cclxuICAgIGlmIChkYXRhICYmIGlkb2JqZXRvICYmIGRlc2NyaWNhb29iamV0bylcclxuICAgICAgcmV0dXJuIGRhdGE/LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbVtpZG9iamV0b10gPT0gdmFsb3JBdHVhbClbZGVzY3JpY2Fvb2JqZXRvXVxyXG4gICAgZWxzZSByZXR1cm4gJ0NhcnJlZ2FuZG8nXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGlzRGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlRWRpdFJvd0Z1bmN0aW9uID8gdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmRpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uID8gY29sLmRpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0VkaXRhYmxlVGFibGUoKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jb2x1bW5zKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucy5zb21lKChjb2x1bW46IGFueSkgPT4gJ2ZpZWxkQ29udHJvbFR5cGUnIGluIGNvbHVtbik7XHJcbiAgfSAgXHJcblxyXG5cclxuICB0cmFuc2Zvcm1WYWx1ZURyb3AodmFsdWU6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgaWYgKCFjb2wucGlwZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChjb2wucGlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXkgaGg6bW0nKTtcclxuICAgICAgICBjYXNlICdkZWNpbWFsJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJzEuMi0yJywgJ3B0LUJSJyk7XHJcbiAgICAgICAgY2FzZSAnY3BmY25waic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3RlbGVmb25lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRlbGVmb25lUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOlxyXG4gICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtQ2FwaXRhbGl6ZSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7IHZhbHVlIH0gJWA7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGt2LXRhYmxlLWVkaXQtY29udGFpbmVyXCIgaWQ9XCJ0YW1hbmhvdGFiZWxhXCIgW3N0eWxlLmZvbnQtc2l6ZV09XCInMXB4J1wiPlxyXG4gIDxwLXRvYXN0PjwvcC10b2FzdD5cclxuXHJcbiAgQGlmKGZpbHRyb3NBdmFuY2Fkb3Mpe1xyXG4gICAgPHAtcGFuZWxcclxuICAgICAgaGVhZGVyPVwiRmlsdHJvcyBhdmFuw6dhZG9zXCJcclxuICAgICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXHJcbiAgICAgIFtjb2xsYXBzZWRdPVwidHJ1ZVwiXHJcbiAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwiY29sbGFwc2VkID0gIWNvbGxhcHNlZFwiXHJcbiAgICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tYm90dG9tJzogJzJweCcgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJpY29uc1wiPlxyXG4gICAgICAgIEBpZiAoIWNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgYWJlcnRvIC0tPlxyXG4gICAgICAgICAgQGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktbWludXNcIj48L2k+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgZmVjaGFkbyAtLT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9wLXBhbmVsPlxyXG4gIH1cclxuXHJcbiAgPHAtY29udGV4dE1lbnUgI2NtIFttb2RlbF09XCJpdGVtc0NvbnRleHRNZW51XCI+PC9wLWNvbnRleHRNZW51PlxyXG4gIDxwLXRhYmxlXHJcbiAgICAjdGVcclxuICAgIFtlZGl0TW9kZV09XCJlZGl0TW9kZSgpXCJcclxuICAgIChvbkVkaXRDb21wbGV0ZSk9XCJvbkVkaXRDb21wbGV0ZSgkZXZlbnQpXCJcclxuICAgIChvbkVkaXRJbml0KT1cIm9uRWRpdEluaXQoJGV2ZW50KVwiXHJcbiAgICBbcmVvcmRlcmFibGVDb2x1bW5zXT1cImNvbmZpZy5yZW9yZGVyYWJsZUNvbHVtbnMgfHwgZmFsc2VcIlxyXG4gICAgKm5nSWY9XCJjb25maWdcIlxyXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW2RhdGFLZXldPVwiY29uZmlnLmRhdGFLZXlcIlxyXG4gICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxyXG4gICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgW3N0eWxlQ2xhc3NdPVwic2VsZWN0ZWRTaXplLmNsYXNzXCJcclxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgIFtyb3dTZWxlY3RhYmxlXT1cImlzUm93U2VsZWN0YWJsZVwiXHJcbiAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXHJcbiAgICBbcm93c109XCJyb3dzXCJcclxuICAgIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcclxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSAtIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfVwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gICAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcclxuICAgIHBhZ2luYXRvckRyb3Bkb3duQXBwZW5kVG89XCJib2R5XCJcclxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXHJcbiAgICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc09wdGlvbnNcIlxyXG4gICAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxyXG4gICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxyXG4gICAgW3Jvd1RyYWNrQnldPVwicm93VHJhY2tCeVwiXHJcbiAgICBbKGNvbnRleHRNZW51U2VsZWN0aW9uKV09XCJzZWxlY3RlZFByb2R1Y3RcIlxyXG4gICAgW2NvbnRleHRNZW51XT1cImlzRWRpdGFibGVUYWJsZSgpID8gY20gOiBudWxsXCJcclxuICA+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG5cclxuICAgIEBpZiAoY29uZmlnPy5lbmFibGVDYXRpb24gfHwgZW5hYmxlU2l6ZXMoKSl7XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMiBwLTAgbS0wXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgQGlmIChjb25maWcudGl0bGUpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIj5cclxuICAgICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH0gQGlmIChjb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gbWItNCBmb250LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIG1kOmNvbC02IGxnOmNvbC00IHt7XHJcbiAgICAgICAgICAgICAgdGFtYW5ob1RlbGEgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInXHJcbiAgICAgICAgICAgIH19IG10LTEgbWItMiBnYXAtMSBwLTBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZUZpbHRlcikge1xyXG4gICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2ggdGV4dC1zbVwiPjwvaT5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0ZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTFyZW1cIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRhbWFuaG9UZWxhID4gODAwXCJcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodGUsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1Blc3F1aXNhci4uLidcIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAjaW5wdXRGaWVsZFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gY29sLTYgXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBAaWYoZW5hYmxlU2l6ZXMoKSl7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2l6ZXMtY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgICAgPGt2LWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJUYW1hbmhvXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInbWF0Y2hfY2FzZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCInbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2t2LWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxwLXRpZXJlZE1lbnVcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyAnZm9udC1zaXplJzogJzAuN3JlbScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm1lbnVTaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJzaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBmbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBwbC0xIG0tMiBtZW51LXNpemVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIml0ZW0uY29tbWFuZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHRoaXMuc2VsZWN0ZWRTaXplLnNpemUgIT0gaXRlbS5zaXplKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIicjRUFFQUVBJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYodGhpcy5zZWxlY3RlZFNpemUuc2l6ZSA9PSBpdGVtLnNpemUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJyMxREE3NTAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L3AtdGllcmVkTWVudT4gXHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGt2LWJ1dHRvbiAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cIid0ZXJ0aWFyeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQWFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInVGFtYW5obyBkYSBmb250ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8cC10aWVyZWRNZW51XHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgJ2ZvbnQtc2l6ZSc6ICcwLjdyZW0nIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtZW51U2l6ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwic2l6ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgcGwtMSBtLTIgbWVudS1zaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLmNvbW1hbmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZih0aGlzLnNlbGVjdGVkU2l6ZS5zaXplICE9IGl0ZW0uc2l6ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCInI0VBRUFFQSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHRoaXMuc2VsZWN0ZWRTaXplLnNpemUgPT0gaXRlbS5zaXplKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIicjMURBNzUwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRpZXJlZE1lbnU+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYoZW5hYmxlRGlzcGxheU1vZGUoKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICBAaWYoZW5hYmxlRGlzcGxheU1vZGUoKSl7XHJcbiAgICAgICAgICAgICAgICAgICA8a3YtYnV0dG9uICBcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0V4aWJpcidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cIid0ZXJ0aWFyeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInZ3JpZF92aWV3J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnVEaXNwbGF5LnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9rdi1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8cC10aWVyZWRNZW51XHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgJ2ZvbnQtc2l6ZSc6ICcwLjdyZW0nIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgI21lbnVEaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cImFjdGlvbnNEaXNwbGF5TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBmbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBwbC0xIG0tMiBwLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS5jb21tYW5kKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwidGV4dC1zbVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRpZXJlZE1lbnU+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxrdi1idXR0b24gIFxyXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgIGljb249XCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cInNlbGVjdGVkRGlzcGxheU1vZGUgPT09ICdsaXN0JyA/ICdzZWNvbmRhcnknIDogJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXREaXNwbGF5TW9kZSgnbGlzdCcpXCJcclxuICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJWaXPDo28gU2ltcGxpZmljYWRhXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGt2LWJ1dHRvbiAgXHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiXCJcclxuICAgICAgICAgICAgICAgICAgaWNvbj1cInRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cInNlbGVjdGVkRGlzcGxheU1vZGUgPT09ICdkZXRhaWxzJyA/ICdzZWNvbmRhcnknIDogJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXREaXNwbGF5TW9kZSgnZGV0YWlscycpXCJcclxuICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJWaXPDo28gRGV0YWxoYWRhXCJcclxuICAgICAgICAgICAgICAgIC8+IC0tPlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBAaWYoZW5hYmxlRGlzcGxheU1vZGUoKSl7XHJcbiAgICAgICAgICAgICAgICAgICA8a3YtYnV0dG9uICBcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0V4aWJpcidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidNb2RvIGRlIGV4aWJpw6fDo28nXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJhY3Rpb25zRGlzcGxheU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgQGlmKGlzRWRpdGluZyl7XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1hdmlzb1wiPlxyXG4gICAgICAgICAgICAgIFRhYmVsYSBlbSBtb2RvIGRlIGVkacOnw6NvXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb2wtMiBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yIHAtMFwiPlxyXG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIEBpZighaXNFZGl0aW5nKXtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgICAgICAgKGdldE9yRXhlY3V0ZShhY3Rpb24udmlzaWJsZSwgc2VsZWN0ZWRJdGVtcykgPz8gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldE9yRXhlY3V0ZShhY3Rpb24udG9vbHRpcCwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKT8ubGVuZ3RoID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgPiA3KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFjdGlvbnNMb3RlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBpID09IGNvbmZpZy5hY3Rpb25zTG90ZS5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvbi5zZXZlcml0eSB8fCAndGVydGlhcnknXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIEBpZiAoaXNFZGl0YWJsZVRhYmxlKCkgJiYgIWhpZGVCdG5FZGl0KCkpIHtcclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGhpcy5pc0VkaXRpbmcgPSAhdGhpcy5pc0VkaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWlzRWRpdGluZyA/ICdIYWJpbGl0YXIgRWRpw6fDo28nIDogJ0Rlc2FiaWxpdGFyIEVkacOnw6NvJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cIid0ZXJ0aWFyeSdcIlxyXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCInZWRpdF9zcXVhcmUnXCJcclxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwva3YtYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIH1cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIEBpZihjb25maWcuZW5hYmxlU2VsZWN0ICYmICFpc0VkaXRpbmcpe1xyXG4gICAgICAgICAgPHRoXHJcbiAgICAgICAgICBbY2xhc3NdPVwic2VsZWN0ZWRTaXplLmNsYXNzICsgJ3RoJ1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICA+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZm9yKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpe1xyXG4gICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbC53aWR0aCAqIHNlbGVjdGVkU2l6ZS5zaXplICsgJ3B4J1wiXHJcbiAgICAgICAgICAgIHBSZW9yZGVyYWJsZUNvbHVtblxyXG4gICAgICAgICAgICBbY2xhc3NdPVwic2VsZWN0ZWRTaXplLmNsYXNzICsgJ3RoJ1wiXHJcbiAgICAgICAgXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnZmxleCBmbGV4LXJvdydcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImFsaWduQ29sdW5hc0hlYWRlcihjb2wpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgQGlmKGNvbC5zb3J0YWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYoY29sLmhlYWRlclRvb2x0aXApe1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBpbmZvXHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICBAaWYoIWlzRWRpdGluZyAmJiBjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICA8dGg+PC90aD5cclxuICAgICAgIH1cclxuXHJcbiAgICAgICBAaWYoaXNFZGl0YWJsZVRhYmxlKCkgJiYgdGhpcy5lZGl0TW9kZSgpID09ICdyb3cnKXtcclxuICAgICAgICA8dGhcclxuICAgICAgICAgIGlkPVwidGgtZWRpdFwiXHJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMHB4XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBFZGl0YXJcclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICBcclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxyXG4gICAgICBsZXQtcm93RGF0YVxyXG4gICAgICBsZXQtZWRpdGluZz1cImVkaXRpbmdcIlxyXG4gICAgICBsZXQtcmk9XCJyb3dJbmRleFwiXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcclxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcclxuICAgID5cclxuICAgICAgPHRyXHJcbiAgICAgICAgW3BFZGl0YWJsZVJvd109XCJyb3dEYXRhXCJcclxuICAgICAgICBbcEVkaXRhYmxlUm93RGlzYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtwQ29udGV4dE1lbnVSb3ddPVwie3Jvd0RhdGEsIGVkaXRpbmd9XCJcclxuICAgICAgICBbY2xhc3NdPVwic2VsZWN0ZWRTaXplLmNsYXNzICsgJy10cidcIlxyXG4gICAgICAgIGNsYXNzPVwidHItdGRcIlxyXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgPlxyXG4gICAgICBAaWYoY29uZmlnLmVuYWJsZVNlbGVjdCAmJiAhaXNFZGl0aW5nKXtcclxuICAgICAgICA8dGRcclxuICAgICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnY2hlY2stYm94JywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveFxyXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrLWVkaXQtbGlzdFwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICA+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgfVxyXG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCl7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tIEZJWE1FOiBUZXN0YXIgYSBpbXBsZW1lbnRhw6fDo28gYWJhaXhvIGUgbWVzYWNsYXIgYXMgZHVhcyBmb3JtYXMgLS0+XHJcbiAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVJbnB1dCBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZzsgZWxzZSB0ZW1wbGF0ZXZpc3VhbGVkaWNhb1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCIgY2xhc3M9XCJncmlkIGZvcm1ncmlkIHAtZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtYXNrJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbWFza1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWFza109XCJjb2wubWFza1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LW1hc2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGt2LWlucHV0LWNhbGVuZGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwva3YtaW5wdXQtY2FsZW5kYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dDZWxsRnVuY3Rpb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhbmVsU3R5bGVdPVwieyAnZm9udC1zaXplJzogJzAuNzVyZW0nIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmRlc2NyaWNhb29iamV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuaWRvYmpldG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGV2aXN1YWxlZGljYW8+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICBcclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU91dHB1dCBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0RhdGFbY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlRHJvcChyZXRvcm5hRGVzY3JpY2FvRHJvcChyb3dEYXRhLCBjb2wpLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgPjwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB8IGRhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hc2snXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB8IG1hc2sgOiBjb2wubWFzayB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgIHt7ICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICBcclxuICAgICAgICAgICAgQGlmKGVkaXRNb2RlKCkgPT0gJ2NlbGwnICYmIGNvbC5maWVsZENvbnRyb2xUeXBlKXtcclxuICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBbcEVkaXRhYmxlQ29sdW1uXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICAgIFtwRWRpdGFibGVDb2x1bW5GaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtwRWRpdGFibGVDb2x1bW5Sb3dJbmRleF09XCJyb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cIidyb3dUYWJsZScgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJkYkNsaWNrRWRpdCgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcclxuICAgICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93RGF0YTogcm93RGF0YSwgY29sOiBjb2wgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU91dHB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIDwhLS0gTk9URTogRWRpw6fDo28gZGUgbGluaGEgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgXHJcbiAgICAgICAgICAgIDwhLS0gQ2VsdWxhIHF1ZSBhcm1hemVuYSBvcyBjb250cm9sZXMgZGUgZWRpw6fDo28gcGFyYSBvcyBjYW1wb3MgLS0+XHJcbiAgICAgICAgICAgIEBpZihmYWxzZSAmJiBjb2wuZmllbGRDb250cm9sVHlwZSAmJiBlZGl0TW9kZSgpID09ICdyb3cnKXtcclxuICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBbaWRdPVwiJ3Jvd1RhYmxlJyArIHJvd0RhdGFbY29uZmlnLmRhdGFLZXldXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImRiQ2xpY2tFZGl0KClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IHN3aXRjaDogY29sLmZpZWxkQ29udHJvbFR5cGUgPT0gJ3N3aXRjaCcgfVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93RGF0YTogcm93RGF0YSwgY29sOiBjb2wgfVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvd0RhdGE6IHJvd0RhdGEsIGNvbDogY29sIH1cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgXHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwicm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJyb3dncm91cCAmJiBjb2wuZ3JvdXBlZCA/IHJvd3NwYW4gOiBudWxsXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcclxuICAgICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbClcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gIFxyXG4gICAgICAgICAgICAgIEBpZihpc0ltYWdlRmllbGQoY29sKSl7XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgXHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2k+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzU3dpdGNoRmllbGQoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGt2LXN3aXRjaFxyXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgXHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAhcm93Z3JvdXAgJiZcclxuICAgICAgICAgICAgICAgICFjb2wuZ3JvdXBlZCAmJlxyXG4gICAgICAgICAgICAgICAgIWNvbC50ZW1wbGF0ZSAmJlxyXG4gICAgICAgICAgICAgICAgIWNvbC5maWVsZENvbnRyb2xUeXBlXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbClcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxwLXNrZWxldG9uIHNoYXBlPVwiY2lyY2xlXCIgc2l6ZT1cIjNyZW1cIj48L3Atc2tlbGV0b24+IC0tPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICBcclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaT5cclxuICBcclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICBcclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgIDwhLS0gQ29udHJvbGUgZGUgYcOnw6NvICAtLT5cclxuICAgICAgICAgQGlmKCFpc0VkaXRpbmcgJiYgY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICd0ZC10b29scyc6IGlzRWRpdGFibGVUYWJsZSgpICYmIHRoaXMuZWRpdE1vZGUoKSA9PSAncm93JyxcclxuICAgICAgICAgICAgICAndGQtdG9vbHMtc3RpY2t5JzogIWlzRWRpdGFibGVUYWJsZSgpIHx8IHRoaXMuZWRpdE1vZGUoKSA9PSAnY2VsbCdcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pIFxyXG5cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3Vyc29yLXBvaW50ZXIgaWNvbi1tb3JlLWhvcml6XCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHg7IHBhZGRpbmc6IDAuMXJlbTttYXJnaW4tcmlnaHQ6IC41cmVtO1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxwLW1lbnVcclxuICAgICAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgID48L3AtbWVudT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgIDwhLS0gQ29udHJvbGUgZGUgZWRpw6fDo28gLS0+XHJcbiAgICAgICAgIEBpZih0aGlzLmlzRWRpdGFibGVUYWJsZSgpICYmIHRoaXMuZWRpdE1vZGUoKSA9PSAncm93Jyl7XHJcbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZC1lZGl0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgQGlmKCFlZGl0aW5nKXtcclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzI4cHgnXCJcclxuICAgICAgICAgICAgICAgIFtpZF09XCIncm93RWRpdCcgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzI4cHgnXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBwSW5pdEVkaXRhYmxlUm93XHJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGVuY2lsXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRJbml0KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICBAaWYoZWRpdGluZyl7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzI4cHgnXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBwQ2FuY2VsRWRpdGFibGVSb3dcclxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dFZGl0Q2FuY2VsKHJvd0RhdGEsIHJpKVwiXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiJ3Jvd0NhbmNlbCcgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAyXCJcclxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW0gbS0wIHRleHQteHNcIj5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=