keevo-components 2.0.107 → 2.0.108

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 (755) 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 +331 -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 +12124 -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 +86 -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/ng-package.json +0 -14
  375. package/src/assets/.gitkeep +0 -0
  376. package/src/index.ts +0 -1
  377. package/src/lib/api/base-components/base-component-button.ts +0 -29
  378. package/src/lib/api/base-components/base-component-chart.ts +0 -118
  379. package/src/lib/api/base-components/base-component-crud-form.ts +0 -377
  380. package/src/lib/api/base-components/base-component-crud-list.ts +0 -129
  381. package/src/lib/api/base-components/base-component-crud.ts +0 -92
  382. package/src/lib/api/base-components/base-component-dropdown-external.ts +0 -29
  383. package/src/lib/api/base-components/base-component-dropdown-new.ts +0 -112
  384. package/src/lib/api/base-components/base-component-dropdown.ts +0 -257
  385. package/src/lib/api/base-components/base-component-input.ts +0 -121
  386. package/src/lib/api/base-components/base-component-multi-select.ts +0 -187
  387. package/src/lib/api/base-components/base-component-table.ts +0 -366
  388. package/src/lib/api/base-components/base-component.ts +0 -47
  389. package/src/lib/api/components/chart/chart.config.ts +0 -15
  390. package/src/lib/api/components/chart/chart.model.ts +0 -12
  391. package/src/lib/api/components/chart/orchart.config.ts +0 -51
  392. package/src/lib/api/components/chart/orchartnode.ts +0 -44
  393. package/src/lib/api/components/dropdown/filtro.combo.ts +0 -4
  394. package/src/lib/api/components/stepper/kv-stepperpanel.ts +0 -10
  395. package/src/lib/api/components/table/action-item.ts +0 -13
  396. package/src/lib/api/components/table/kv-menuitem.ts +0 -198
  397. package/src/lib/api/components/table/table-dropdown-control.ts +0 -6
  398. package/src/lib/api/components/table/table.config.column.ts +0 -38
  399. package/src/lib/api/components/table/table.config.ts +0 -39
  400. package/src/lib/api/components/table/table.paginate.ts +0 -7
  401. package/src/lib/api/components/table/tableedit.config.column.ts +0 -12
  402. package/src/lib/api/components/tree-table/tree-table-keys.ts +0 -12
  403. package/src/lib/api/components/tree-table/tree-table.config.ts +0 -34
  404. package/src/lib/api/directives/directives.module.ts +0 -19
  405. package/src/lib/api/directives/drag/drag.directive.ts +0 -40
  406. package/src/lib/api/directives/stepper/dynamicinput.directive.ts +0 -23
  407. package/src/lib/api/directives/template/template.directive.ts +0 -15
  408. package/src/lib/api/helpers/component-providers.ts +0 -16
  409. package/src/lib/api/helpers/keevo-validators.ts +0 -174
  410. package/src/lib/api/helpers/severity-color.ts +0 -77
  411. package/src/lib/api/helpers/translate-primeng.ts +0 -25
  412. package/src/lib/api/modules/primeng.module.ts +0 -144
  413. package/src/lib/api/pipes/capitalize.pipe.ts +0 -47
  414. package/src/lib/api/pipes/cpfcnpj.pipe.ts +0 -21
  415. package/src/lib/api/pipes/mask.pipe.ts +0 -24
  416. package/src/lib/api/pipes/pipes.module.ts +0 -26
  417. package/src/lib/api/pipes/telefone.pipe.ts +0 -38
  418. package/src/lib/api/services/base.api.service.ts +0 -115
  419. package/src/lib/api/services/breadcrumbs.service.ts +0 -71
  420. package/src/lib/api/services/chat.service.ts +0 -39
  421. package/src/lib/api/services/component.service.ts +0 -44
  422. package/src/lib/api/services/docs.service.ts +0 -129
  423. package/src/lib/api/services/form.service.ts +0 -139
  424. package/src/lib/api/services/image.cutter.service.ts +0 -290
  425. package/src/lib/api/services/imagens.service.ts +0 -28
  426. package/src/lib/api/services/notification.service.ts +0 -88
  427. package/src/lib/api/services/object.service.ts +0 -33
  428. package/src/lib/api/services/orgchart.service.ts +0 -77
  429. package/src/lib/api/services/pdf.service.ts +0 -54
  430. package/src/lib/api/types/breadcrumb.model.ts +0 -5
  431. package/src/lib/api/types/stimulsoft.reports.d.ts +0 -67463
  432. package/src/lib/components/keevo-components.module.ts +0 -105
  433. package/src/lib/components/kv-avatar/kv-avatar.component.html +0 -75
  434. package/src/lib/components/kv-avatar/kv-avatar.component.scss +0 -162
  435. package/src/lib/components/kv-avatar/kv-avatar.component.spec.ts +0 -23
  436. package/src/lib/components/kv-avatar/kv-avatar.component.ts +0 -165
  437. package/src/lib/components/kv-avatar/kv-avatar.module.ts +0 -32
  438. package/src/lib/components/kv-button/kv-button.component.html +0 -26
  439. package/src/lib/components/kv-button/kv-button.component.spec.ts +0 -23
  440. package/src/lib/components/kv-button/kv-button.component.ts +0 -55
  441. package/src/lib/components/kv-button/kv-button.module.ts +0 -20
  442. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.html +0 -14
  443. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.scss +0 -6
  444. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.ts +0 -25
  445. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.html +0 -13
  446. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.scss +0 -33
  447. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.ts +0 -41
  448. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.html +0 -12
  449. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.scss +0 -18
  450. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.ts +0 -14
  451. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.html +0 -11
  452. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.scss +0 -17
  453. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.ts +0 -14
  454. package/src/lib/components/kv-buttons/kv-button.module.ts +0 -26
  455. package/src/lib/components/kv-card-selection/kv-card-selection.component.html +0 -63
  456. package/src/lib/components/kv-card-selection/kv-card-selection.component.scss +0 -54
  457. package/src/lib/components/kv-card-selection/kv-card-selection.component.spec.ts +0 -23
  458. package/src/lib/components/kv-card-selection/kv-card-selection.component.ts +0 -73
  459. package/src/lib/components/kv-card-selection/kv-card-selection.module.ts +0 -19
  460. package/src/lib/components/kv-carousel/kv-carousel.component.html +0 -26
  461. package/src/lib/components/kv-carousel/kv-carousel.component.scss +0 -47
  462. package/src/lib/components/kv-carousel/kv-carousel.component.spec.ts +0 -23
  463. package/src/lib/components/kv-carousel/kv-carousel.component.ts +0 -40
  464. package/src/lib/components/kv-carousel/kv-carousel.module.ts +0 -19
  465. package/src/lib/components/kv-chart/kv-chart.component.html +0 -38
  466. package/src/lib/components/kv-chart/kv-chart.component.scss +0 -0
  467. package/src/lib/components/kv-chart/kv-chart.component.spec.ts +0 -28
  468. package/src/lib/components/kv-chart/kv-chart.component.ts +0 -174
  469. package/src/lib/components/kv-chart/kv-chart.module.ts +0 -21
  470. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.html +0 -9
  471. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.scss +0 -7
  472. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.spec.ts +0 -23
  473. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.ts +0 -32
  474. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.ts +0 -14
  475. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.html +0 -229
  476. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.scss +0 -185
  477. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.spec.ts +0 -23
  478. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.ts +0 -171
  479. package/src/lib/components/kv-content-viewer/kv-content-viewer.module.ts +0 -25
  480. package/src/lib/components/kv-error/kv-error.component.html +0 -3
  481. package/src/lib/components/kv-error/kv-error.component.scss +0 -5
  482. package/src/lib/components/kv-error/kv-error.component.ts +0 -27
  483. package/src/lib/components/kv-error/kv-error.module.ts +0 -26
  484. package/src/lib/components/kv-file-upload/kv-file-upload.component.html +0 -134
  485. package/src/lib/components/kv-file-upload/kv-file-upload.component.scss +0 -13
  486. package/src/lib/components/kv-file-upload/kv-file-upload.component.spec.ts +0 -23
  487. package/src/lib/components/kv-file-upload/kv-file-upload.component.ts +0 -200
  488. package/src/lib/components/kv-file-upload/kv-file-upload.module.ts +0 -13
  489. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.html +0 -16
  490. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.scss +0 -18
  491. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.ts +0 -42
  492. package/src/lib/components/kv-file-viewer/kv-file-viewer.module.ts +0 -14
  493. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.html +0 -34
  494. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.scss +0 -17
  495. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.ts +0 -80
  496. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.ts +0 -15
  497. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.html +0 -103
  498. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.scss +0 -153
  499. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.spec.ts +0 -23
  500. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.ts +0 -73
  501. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.module.ts +0 -18
  502. package/src/lib/components/kv-filter-card/kv-filter-card.component.html +0 -12
  503. package/src/lib/components/kv-filter-card/kv-filter-card.component.scss +0 -76
  504. package/src/lib/components/kv-filter-card/kv-filter-card.component.spec.ts +0 -23
  505. package/src/lib/components/kv-filter-card/kv-filter-card.component.ts +0 -18
  506. package/src/lib/components/kv-filter-card/kv-filter-card.module.ts +0 -23
  507. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.html +0 -81
  508. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.scss +0 -197
  509. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.ts +0 -150
  510. package/src/lib/components/kv-filter-cards/kv-filter-cards.module.ts +0 -20
  511. package/src/lib/components/kv-filter-cards/kv-filter-cards.pipe.ts +0 -24
  512. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.html +0 -25
  513. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.scss +0 -22
  514. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.spec.ts +0 -23
  515. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.ts +0 -20
  516. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.ts +0 -20
  517. package/src/lib/components/kv-g-icon/kv-g-icon.component.html +0 -1
  518. package/src/lib/components/kv-g-icon/kv-g-icon.component.scss +0 -0
  519. package/src/lib/components/kv-g-icon/kv-g-icon.component.spec.ts +0 -23
  520. package/src/lib/components/kv-g-icon/kv-g-icon.component.ts +0 -10
  521. package/src/lib/components/kv-g-icon/kv-g-icon.module.ts +0 -11
  522. package/src/lib/components/kv-home-card/kv-home-card.component.html +0 -35
  523. package/src/lib/components/kv-home-card/kv-home-card.component.scss +0 -5
  524. package/src/lib/components/kv-home-card/kv-home-card.component.spec.ts +0 -23
  525. package/src/lib/components/kv-home-card/kv-home-card.component.ts +0 -33
  526. package/src/lib/components/kv-home-card/kv-home-card.module.ts +0 -18
  527. package/src/lib/components/kv-icon/kv-icon.component.html +0 -13
  528. package/src/lib/components/kv-icon/kv-icon.component.scss +0 -69
  529. package/src/lib/components/kv-icon/kv-icon.component.spec.ts +0 -28
  530. package/src/lib/components/kv-icon/kv-icon.component.ts +0 -30
  531. package/src/lib/components/kv-icon/kv-icon.module.ts +0 -16
  532. package/src/lib/components/kv-image-upload/kv-image-upload.component.html +0 -64
  533. package/src/lib/components/kv-image-upload/kv-image-upload.component.scss +0 -0
  534. package/src/lib/components/kv-image-upload/kv-image-upload.component.ts +0 -153
  535. package/src/lib/components/kv-image-upload/kv-image-upload.module.ts +0 -10
  536. package/src/lib/components/kv-inputs/kv-check/kv-check.component.html +0 -12
  537. package/src/lib/components/kv-inputs/kv-check/kv-check.component.scss +0 -38
  538. package/src/lib/components/kv-inputs/kv-check/kv-check.component.ts +0 -32
  539. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.html +0 -87
  540. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.ts +0 -119
  541. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.html +0 -13
  542. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.scss +0 -0
  543. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.spec.ts +0 -23
  544. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.ts +0 -16
  545. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.html +0 -18
  546. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.scss +0 -0
  547. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.ts +0 -41
  548. package/src/lib/components/kv-inputs/kv-editor/config/kv-editor.config.ts +0 -120
  549. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.html +0 -285
  550. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.scss +0 -182
  551. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.ts +0 -311
  552. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.ts +0 -156
  553. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.ts +0 -190
  554. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.spec.ts +0 -126
  555. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.ts +0 -84
  556. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.spec.ts +0 -176
  557. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.ts +0 -101
  558. package/src/lib/components/kv-inputs/kv-editor/types/kv-editor.types.ts +0 -36
  559. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.html +0 -37
  560. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.scss +0 -23
  561. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.ts +0 -197
  562. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.html +0 -24
  563. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.scss +0 -0
  564. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.ts +0 -35
  565. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.html +0 -23
  566. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.scss +0 -0
  567. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.ts +0 -61
  568. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.html +0 -33
  569. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.scss +0 -5
  570. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.ts +0 -63
  571. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.html +0 -24
  572. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.scss +0 -0
  573. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.ts +0 -26
  574. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.html +0 -23
  575. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.scss +0 -18
  576. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.ts +0 -40
  577. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.html +0 -30
  578. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.scss +0 -26
  579. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.ts +0 -38
  580. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.html +0 -53
  581. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.scss +0 -41
  582. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.spec.ts +0 -23
  583. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.ts +0 -48
  584. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.html +0 -23
  585. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.scss +0 -0
  586. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.ts +0 -40
  587. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.html +0 -24
  588. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.scss +0 -0
  589. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.ts +0 -27
  590. package/src/lib/components/kv-inputs/kv-inputs.module.ts +0 -100
  591. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.html +0 -87
  592. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.scss +0 -62
  593. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.ts +0 -54
  594. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.html +0 -19
  595. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.scss +0 -22
  596. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.ts +0 -63
  597. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.html +0 -26
  598. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.scss +0 -5
  599. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.spec.ts +0 -21
  600. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.ts +0 -30
  601. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.html +0 -28
  602. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.scss +0 -61
  603. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.spec.ts +0 -23
  604. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.ts +0 -43
  605. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.html +0 -23
  606. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.scss +0 -35
  607. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.ts +0 -54
  608. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.html +0 -68
  609. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.scss +0 -86
  610. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.ts +0 -59
  611. package/src/lib/components/kv-label/kv-label.component.html +0 -3
  612. package/src/lib/components/kv-label/kv-label.component.scss +0 -15
  613. package/src/lib/components/kv-label/kv-label.component.spec.ts +0 -23
  614. package/src/lib/components/kv-label/kv-label.component.ts +0 -14
  615. package/src/lib/components/kv-label/kv-label.module.ts +0 -17
  616. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.html +0 -25
  617. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.scss +0 -19
  618. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.spec.ts +0 -28
  619. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.ts +0 -34
  620. package/src/lib/components/kv-layout/kv-layout.module.ts +0 -44
  621. package/src/lib/components/kv-layout/layout/kv-layout.component.html +0 -535
  622. package/src/lib/components/kv-layout/layout/kv-layout.component.scss +0 -267
  623. package/src/lib/components/kv-layout/layout/kv-layout.component.spec.ts +0 -23
  624. package/src/lib/components/kv-layout/layout/kv-layout.component.ts +0 -502
  625. package/src/lib/components/kv-layout/top-icons/top-icons.component.html +0 -26
  626. package/src/lib/components/kv-layout/top-icons/top-icons.component.scss +0 -71
  627. package/src/lib/components/kv-layout/top-icons/top-icons.component.spec.ts +0 -23
  628. package/src/lib/components/kv-layout/top-icons/top-icons.component.ts +0 -26
  629. package/src/lib/components/kv-loader/kv-loader.component.html +0 -1
  630. package/src/lib/components/kv-loader/kv-loader.component.ts +0 -11
  631. package/src/lib/components/kv-loader/kv-loader.module.ts +0 -17
  632. package/src/lib/components/kv-loader/kv-loader.service.ts +0 -29
  633. package/src/lib/components/kv-login/kv-login.component.html +0 -101
  634. package/src/lib/components/kv-login/kv-login.component.scss +0 -99
  635. package/src/lib/components/kv-login/kv-login.component.spec.ts +0 -23
  636. package/src/lib/components/kv-login/kv-login.component.ts +0 -97
  637. package/src/lib/components/kv-login/kv-login.module.ts +0 -33
  638. package/src/lib/components/kv-modal/kv-modal.component.html +0 -20
  639. package/src/lib/components/kv-modal/kv-modal.component.scss +0 -37
  640. package/src/lib/components/kv-modal/kv-modal.component.spec.ts +0 -21
  641. package/src/lib/components/kv-modal/kv-modal.component.ts +0 -111
  642. package/src/lib/components/kv-modal/kv-modal.module.ts +0 -12
  643. package/src/lib/components/kv-orgchart/kv-orgchart.component.html +0 -125
  644. package/src/lib/components/kv-orgchart/kv-orgchart.component.scss +0 -73
  645. package/src/lib/components/kv-orgchart/kv-orgchart.component.ts +0 -283
  646. package/src/lib/components/kv-orgchart/kv-orgchart.module.ts +0 -31
  647. package/src/lib/components/kv-page-form/kv-page-form.component.html +0 -91
  648. package/src/lib/components/kv-page-form/kv-page-form.component.scss +0 -100
  649. package/src/lib/components/kv-page-form/kv-page-form.component.spec.ts +0 -28
  650. package/src/lib/components/kv-page-form/kv-page-form.component.ts +0 -206
  651. package/src/lib/components/kv-page-form/kv-page-form.module.ts +0 -33
  652. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.html +0 -276
  653. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.scss +0 -85
  654. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.spec.ts +0 -23
  655. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.ts +0 -223
  656. package/src/lib/components/kv-page-stepper/kv-page-stepper.module.ts +0 -36
  657. package/src/lib/components/kv-pick-list/kv-pick-list.component.html +0 -32
  658. package/src/lib/components/kv-pick-list/kv-pick-list.component.scss +0 -57
  659. package/src/lib/components/kv-pick-list/kv-pick-list.component.spec.ts +0 -26
  660. package/src/lib/components/kv-pick-list/kv-pick-list.component.ts +0 -461
  661. package/src/lib/components/kv-pick-list/kv-pick-list.module.ts +0 -24
  662. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.html +0 -38
  663. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.scss +0 -128
  664. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.spec.ts +0 -21
  665. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.ts +0 -75
  666. package/src/lib/components/kv-progress-bar/kv-progress-bar.module.ts +0 -19
  667. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.html +0 -43
  668. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.scss +0 -130
  669. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.spec.ts +0 -23
  670. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.ts +0 -82
  671. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.ts +0 -18
  672. package/src/lib/components/kv-report/kv-report.component.html +0 -3
  673. package/src/lib/components/kv-report/kv-report.component.scss +0 -14
  674. package/src/lib/components/kv-report/kv-report.component.spec.ts +0 -28
  675. package/src/lib/components/kv-report/kv-report.component.ts +0 -44
  676. package/src/lib/components/kv-report/kv-report.module.ts +0 -18
  677. package/src/lib/components/kv-stepper/kv-stepper.component.html +0 -94
  678. package/src/lib/components/kv-stepper/kv-stepper.component.scss +0 -43
  679. package/src/lib/components/kv-stepper/kv-stepper.component.spec.ts +0 -23
  680. package/src/lib/components/kv-stepper/kv-stepper.component.ts +0 -73
  681. package/src/lib/components/kv-stepper/kv-stepper.module.ts +0 -27
  682. package/src/lib/components/kv-steps/kv-steps.component.html +0 -53
  683. package/src/lib/components/kv-steps/kv-steps.component.scss +0 -120
  684. package/src/lib/components/kv-steps/kv-steps.component.ts +0 -122
  685. package/src/lib/components/kv-table/kv-table.component.html +0 -655
  686. package/src/lib/components/kv-table/kv-table.component.spec.ts +0 -28
  687. package/src/lib/components/kv-table/kv-table.component.ts +0 -792
  688. package/src/lib/components/kv-table/kv-table.module.ts +0 -25
  689. package/src/lib/components/kv-table-edit/kv-table-edit.component.html +0 -913
  690. package/src/lib/components/kv-table-edit/kv-table-edit.component.scss +0 -829
  691. package/src/lib/components/kv-table-edit/kv-table-edit.component.ts +0 -425
  692. package/src/lib/components/kv-table-edit/kv-table-edit.module.ts +0 -31
  693. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.html +0 -634
  694. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.scss +0 -387
  695. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.ts +0 -546
  696. package/src/lib/components/kv-table-expandable/kv-table-expandable.module.ts +0 -22
  697. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.html +0 -25
  698. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.scss +0 -0
  699. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.spec.ts +0 -23
  700. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.ts +0 -17
  701. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.html +0 -20
  702. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.scss +0 -0
  703. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.spec.ts +0 -23
  704. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.ts +0 -14
  705. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.html +0 -164
  706. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.scss +0 -80
  707. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.spec.ts +0 -23
  708. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.ts +0 -183
  709. package/src/lib/components/kv-tag/kv-tag.component.html +0 -3
  710. package/src/lib/components/kv-tag/kv-tag.component.scss +0 -65
  711. package/src/lib/components/kv-tag/kv-tag.component.spec.ts +0 -23
  712. package/src/lib/components/kv-tag/kv-tag.component.ts +0 -16
  713. package/src/lib/components/kv-tag/kv-tag.module.ts +0 -18
  714. package/src/lib/components/kv-tags/kv-tags.component.html +0 -19
  715. package/src/lib/components/kv-tags/kv-tags.component.scss +0 -28
  716. package/src/lib/components/kv-tags/kv-tags.component.ts +0 -64
  717. package/src/lib/components/kv-tags/kv-tags.module.ts +0 -18
  718. package/src/lib/components/kv-timeline/kv-timeline.component.html +0 -28
  719. package/src/lib/components/kv-timeline/kv-timeline.component.scss +0 -6
  720. package/src/lib/components/kv-timeline/kv-timeline.component.spec.ts +0 -23
  721. package/src/lib/components/kv-timeline/kv-timeline.component.ts +0 -77
  722. package/src/lib/components/kv-tree-table/kv-tree-table.component.html +0 -492
  723. package/src/lib/components/kv-tree-table/kv-tree-table.component.scss +0 -187
  724. package/src/lib/components/kv-tree-table/kv-tree-table.component.spec.ts +0 -21
  725. package/src/lib/components/kv-tree-table/kv-tree-table.component.ts +0 -355
  726. package/src/lib/components/kv-tree-table/kv-tree-table.module.ts +0 -23
  727. package/src/lib/components/kv-tree-view/kv-tree-view.component.html +0 -16
  728. package/src/lib/components/kv-tree-view/kv-tree-view.component.scss +0 -19
  729. package/src/lib/components/kv-tree-view/kv-tree-view.component.spec.ts +0 -23
  730. package/src/lib/components/kv-tree-view/kv-tree-view.component.ts +0 -73
  731. package/src/lib/components/kv-tree-view/kv-tree-view.module.ts +0 -19
  732. package/src/lib/components/kv-widget-card/kv-widget-card.component.html +0 -71
  733. package/src/lib/components/kv-widget-card/kv-widget-card.component.scss +0 -27
  734. package/src/lib/components/kv-widget-card/kv-widget-card.component.spec.ts +0 -28
  735. package/src/lib/components/kv-widget-card/kv-widget-card.component.ts +0 -107
  736. package/src/lib/components/kv-widget-card/kv-widget-card.module.ts +0 -20
  737. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.html +0 -22
  738. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.scss +0 -36
  739. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.spec.ts +0 -28
  740. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.ts +0 -41
  741. package/src/lib/components/kv-workspace/kv-workspace.module.ts +0 -45
  742. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.html +0 -20
  743. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.scss +0 -0
  744. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.spec.ts +0 -28
  745. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.ts +0 -18
  746. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.html +0 -35
  747. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.scss +0 -29
  748. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.spec.ts +0 -28
  749. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.ts +0 -98
  750. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.html +0 -63
  751. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.scss +0 -62
  752. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.ts +0 -91
  753. package/tsconfig.lib.json +0 -14
  754. package/tsconfig.lib.prod.json +0 -10
  755. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,673 @@
1
+ import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, computed, effect, input, model, signal, viewChild, } from '@angular/core';
2
+ import { Table } from 'primeng/table';
3
+ import { getOrExecute, mapToMenuItem, } from '../../api/components/table/kv-menuitem';
4
+ import { TemplateDirective } from '../../api/directives/template/template.directive';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../../api/pipes/cpfcnpj.pipe";
8
+ import * as i3 from "../../api/pipes/telefone.pipe";
9
+ import * as i4 from "primeng/api";
10
+ import * as i5 from "primeng/autofocus";
11
+ import * as i6 from "primeng/tooltip";
12
+ import * as i7 from "primeng/card";
13
+ import * as i8 from "primeng/checkbox";
14
+ import * as i9 from "primeng/inputtext";
15
+ import * as i10 from "primeng/skeleton";
16
+ import * as i11 from "primeng/tieredmenu";
17
+ import * as i12 from "primeng/table";
18
+ import * as i13 from "@angular/forms";
19
+ import * as i14 from "../kv-inputs/kv-switch/kv-switch.component";
20
+ import * as i15 from "../kv-button/kv-button.component";
21
+ const imgDefault = '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';
22
+ export class KvTableComponent {
23
+ set setConfig(value) {
24
+ this.tableConfig.set({
25
+ enableCation: value.enableCation || true,
26
+ enableSelect: value.enableSelect || false,
27
+ enableFilter: value.enableFilter || true,
28
+ ...value,
29
+ });
30
+ this.definirColunasConfiguraveis(this.tableConfig());
31
+ }
32
+ constructor(datePipe, decimalPipe, cpfCnpjPipe, telefonePipe, renderer, elementRef) {
33
+ this.datePipe = datePipe;
34
+ this.decimalPipe = decimalPipe;
35
+ this.cpfCnpjPipe = cpfCnpjPipe;
36
+ this.telefonePipe = telefonePipe;
37
+ this.renderer = renderer;
38
+ this.elementRef = elementRef;
39
+ this.tableConfig = signal(undefined);
40
+ this.globalFilterFields = [];
41
+ this.selectedSize = '';
42
+ this.widthPage = signal(0);
43
+ this.checked = true;
44
+ this.columns = [];
45
+ this.deletedColuns = [];
46
+ this.prepositions = new Set([
47
+ 'de', 'da', 'do', 'em', 'no', 'na', 'para', 'por', 'com', 'a', 'o', 'e'
48
+ ]);
49
+ this.romanNumerals = new Set([
50
+ 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV',
51
+ 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'
52
+ ]);
53
+ this.siglas = new Set([
54
+ 'UI', 'UX', 'TI'
55
+ ]);
56
+ this.menuFiltro = false;
57
+ this.checkboxClicked = false;
58
+ this.searchPlaceholder = 'Pesquisar...';
59
+ this.collapsed = false;
60
+ this.tableActions = [];
61
+ this.currDataSource = [];
62
+ this.actionsOffset = 0;
63
+ this.first = model(0);
64
+ this.rows = model(5);
65
+ this.defaultSortField = undefined;
66
+ this.dataSource = [];
67
+ this.selectedItems = [];
68
+ this.paginator = true;
69
+ this.filterColumnsBtn = false;
70
+ this.replaceEmptyValues = true;
71
+ /**
72
+ * @deprecated Essa propriedade não será mais utilizada por esse componente nas próximas versões.
73
+ */
74
+ this.filtrosAvancados = false;
75
+ this.scrollHeight = '';
76
+ this.isTableScrollable = false;
77
+ this.tableCaptalized = false;
78
+ this.rowTrackBy = (index, item) => item;
79
+ this.responsiveLayout = true;
80
+ this.disabledHeaderCheckbox = false;
81
+ /**
82
+ * @deprecated Use a propriedade "tagColor" na configuração da coluna para estilizar a tag
83
+ */
84
+ this.applyStyle = (rowData, col) => '';
85
+ this.onActiveItem = new EventEmitter();
86
+ this.onActiveItemLote = new EventEmitter();
87
+ this.onPaginate = new EventEmitter();
88
+ this.onSelectionChange = new EventEmitter();
89
+ this.doubleClickEvent = new EventEmitter();
90
+ this.filterField = new EventEmitter();
91
+ this.onSwitchTableChange = new EventEmitter();
92
+ this.tableCell = viewChild('tableCell');
93
+ this.ellipsisText = input(false);
94
+ this.isLoadingSkeleton = input(false);
95
+ this.configuracaoEffect = effect(() => {
96
+ const config = this.tableConfig();
97
+ this.definirFiltrosGlobais(config);
98
+ this.definirColunasConfiguraveis(config);
99
+ });
100
+ this.dataSourceSignal = signal([]);
101
+ this.widthSkeletons = [];
102
+ this.widthRandom = computed(() => (col, row) => {
103
+ if (!col.template && !col.icon && !col.fieldType && !col.boolean && !col.pipe) {
104
+ return this.widthSkeletons[row] * 100;
105
+ }
106
+ else {
107
+ return 100;
108
+ }
109
+ });
110
+ this.dataSourceMock = [];
111
+ this.isEmptyDataSource = computed(() => {
112
+ return JSON.stringify(this.dataSourceSignal()) === JSON.stringify(this.dataSourceMock);
113
+ });
114
+ this.columnsFilter = computed(() => {
115
+ const dynamicColumns = (this.tableConfig()?.columns ?? []).filter(col => !col.fixedColumn);
116
+ return [...dynamicColumns, ...this.deletedColuns];
117
+ });
118
+ this.returnMaxWidth = computed(() => (widthCol) => {
119
+ let widthTable = this.tableCell()?.nativeElement.parentElement.offsetWidth;
120
+ let percent = Number(widthCol.replace('%', ''));
121
+ let widthCalc = widthTable * percent / 100;
122
+ return `${widthCalc}px`;
123
+ });
124
+ this.isRowSelectable = this.isRowSelectable.bind(this);
125
+ }
126
+ ngDoCheck() {
127
+ if (JSON.stringify(this.dataSource) !== JSON.stringify(this.currDataSource)) {
128
+ if (this.dataSource) {
129
+ this.createTableActions();
130
+ this.currDataSource = [...this.dataSource];
131
+ this.dataSource = [...this.dataSource];
132
+ this.dataSourceSignal.set([...this.dataSource]);
133
+ }
134
+ }
135
+ }
136
+ loadingSkeletonUtilities() {
137
+ if (this.dataSource.length === 0 && this.isLoadingSkeleton()) {
138
+ let rowItem = {};
139
+ this.tableConfig()?.columns.forEach((col) => {
140
+ rowItem[col.field] = '';
141
+ });
142
+ this.dataSourceMock = Array(this.rows()).fill({ ...rowItem });
143
+ this.dataSource = this.dataSourceMock;
144
+ for (let i = 0; i < this.rows(); i++) {
145
+ this.widthSkeletons.push(Math.random() * 0.7 + 0.2);
146
+ }
147
+ }
148
+ }
149
+ ngOnInit() {
150
+ this.loadingSkeletonUtilities();
151
+ this.adjustTableSize();
152
+ this.widthPage.set(window.innerWidth);
153
+ // this.criarMenuColumns();
154
+ this.config.columns.forEach(col => {
155
+ this.columns.push(col);
156
+ });
157
+ this.checkHideColumns();
158
+ const defaultSortField = this.defaultSortField;
159
+ if (defaultSortField && this.dataSource) {
160
+ this.dataSource.sort((a, b) => {
161
+ if (typeof a[defaultSortField] === 'string' &&
162
+ typeof b[defaultSortField] === 'string') {
163
+ return a[defaultSortField].localeCompare(b[defaultSortField]);
164
+ }
165
+ else if (typeof a[defaultSortField] === 'boolean' &&
166
+ typeof b[defaultSortField] === 'boolean') {
167
+ return a[defaultSortField] === b[defaultSortField]
168
+ ? 0
169
+ : a[defaultSortField]
170
+ ? 1
171
+ : -1;
172
+ }
173
+ else if (typeof a[defaultSortField] === 'number' &&
174
+ typeof b[defaultSortField] === 'number') {
175
+ return a[defaultSortField] - b[defaultSortField];
176
+ }
177
+ else {
178
+ return 0; // Ou outra lógica dependendo do caso
179
+ }
180
+ });
181
+ }
182
+ }
183
+ ngAfterViewInit() {
184
+ document.querySelectorAll('.disabled-row').forEach(row => {
185
+ row.querySelectorAll('td').forEach(cell => {
186
+ cell.addEventListener('click', event => {
187
+ const target = event.target;
188
+ if (!target.classList.contains('tooltip')) {
189
+ event.preventDefault();
190
+ event.stopPropagation();
191
+ }
192
+ });
193
+ });
194
+ });
195
+ }
196
+ definirColunasConfiguraveis(config) {
197
+ this.columns.splice(0, this.columns.length);
198
+ config.columns.forEach(col => {
199
+ this.columns.push(col);
200
+ });
201
+ }
202
+ definirFiltrosGlobais(config) {
203
+ if (config?.enableFilter) {
204
+ this.globalFilterFields.splice(0, this.globalFilterFields.length);
205
+ for (const column of config.columns) {
206
+ this.globalFilterFields.push(column.field);
207
+ }
208
+ }
209
+ }
210
+ resetTable() {
211
+ if (this.ptable)
212
+ this.ptable.reset();
213
+ if (this.inputField)
214
+ this.inputField.nativeElement.value = '';
215
+ }
216
+ onWindowResize() {
217
+ this.adjustTableSize();
218
+ this.widthPage.set(window.innerWidth);
219
+ }
220
+ activeItem(rowData) {
221
+ this.onActiveItem.emit(rowData);
222
+ }
223
+ getOrExecute(action, data) {
224
+ return getOrExecute(action, data);
225
+ }
226
+ isBooleanField(rowData, col) {
227
+ return typeof rowData[col.field] == 'boolean';
228
+ }
229
+ isChipField(col) {
230
+ return col.fieldType == 'chip';
231
+ }
232
+ onPage(event) {
233
+ this.first.set(event.first);
234
+ this.rows.set(event.rows);
235
+ }
236
+ isImageField(col) {
237
+ let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
238
+ return retorno;
239
+ }
240
+ isSwitchField(col) {
241
+ let retorno = col.fieldType && col.fieldType === 'switch' ? true : false;
242
+ return retorno;
243
+ }
244
+ isRowSelectable(event) {
245
+ return !this.isDisabledCheckbox(event.data);
246
+ }
247
+ isDisabledCheckbox(rowData) {
248
+ return this.config.disableControlCheckboxFunction
249
+ ? this.config.disableControlCheckboxFunction(rowData)
250
+ : false;
251
+ }
252
+ isDisabledRow(rowData) {
253
+ return this.config.disableRow ? this.config.disableRow(rowData) : false;
254
+ }
255
+ // Não é utilizada
256
+ getStyleClass(rowData, col, data) {
257
+ // console.log('ESTILO ->', col ? col.styleClass!(rowData, col, data) : '')
258
+ return col ? col.styleClass(rowData, col, data) : '';
259
+ }
260
+ verificaCursor() {
261
+ document.querySelectorAll('.disabled-row').forEach(row => {
262
+ row.querySelectorAll('td').forEach(cell => {
263
+ cell.addEventListener('click', event => {
264
+ const target = event.target;
265
+ if (!target.classList.contains('tooltip')) {
266
+ event.preventDefault();
267
+ event.stopPropagation();
268
+ }
269
+ });
270
+ });
271
+ });
272
+ }
273
+ // Não está verificando se rowData[col.field] é string
274
+ loadImage(rowData, col) {
275
+ /*
276
+ Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
277
+ */
278
+ let retorno = `data: image / jpg; base64, ${imgDefault} `;
279
+ if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
280
+ if (rowData[col.field].includes('http'))
281
+ retorno = rowData[col.field];
282
+ else
283
+ retorno = `data: image / jpg; base64, ${rowData[col.field]} `;
284
+ }
285
+ return retorno;
286
+ }
287
+ onGlobalFilter(table, event) {
288
+ this.filterField.emit(event.target.value);
289
+ table.filterGlobal(event.target.value, 'contains');
290
+ }
291
+ paginate(event) {
292
+ if (event) {
293
+ let paginaInicial = (event?.first > 0 ? event.first / event.rows : event.first) + 1;
294
+ let termoPesquisa = '';
295
+ let ordenacao = '';
296
+ if (event.globalFilter)
297
+ termoPesquisa = event.globalFilter;
298
+ if (event.sortField)
299
+ ordenacao = `${event.sortField} ${event.sortOrder === 1 ? 'ASC' : 'DESC'} `;
300
+ const objeto = {
301
+ paginaInicial: paginaInicial,
302
+ tamanhoPagina: event.rows,
303
+ termoPesquisa: termoPesquisa,
304
+ ordenacao: ordenacao,
305
+ ordernacaoGroup: { column: event.sortField, direction: event.sortOrder === 1 ? 'ASC' : 'DESC' },
306
+ };
307
+ this.onPaginate.emit(objeto);
308
+ this.actionsOffset = event.first;
309
+ this.createTableActions();
310
+ }
311
+ }
312
+ selectionChange(value) {
313
+ this.onSelectionChange.emit(value);
314
+ }
315
+ activeItemLote(selectedItems) {
316
+ this.onActiveItemLote.emit(selectedItems);
317
+ }
318
+ // Não está verificando se rowData[col.field] pode ser passado para Date
319
+ returnRowClass(rowData, col) {
320
+ let value = rowData[col.field];
321
+ let rowClass;
322
+ this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
323
+ if (col.expiredDate == true) {
324
+ new Date(value) < new Date()
325
+ ? (rowClass = rowClass + ' text-red-400 font-semibold')
326
+ : '';
327
+ }
328
+ return rowClass;
329
+ }
330
+ // Não é usada
331
+ expiredFile(rowData, col) {
332
+ let value = rowData['datavencimento'];
333
+ return new Date(value) < new Date() && col.field == 'area';
334
+ }
335
+ transformValue(rowData, col) {
336
+ let value = rowData[col.field];
337
+ if (col.transform) {
338
+ return col.transform(value);
339
+ }
340
+ if ((value == null || value === '' || value === undefined) && this.replaceEmptyValues && this.isLoadingSkeleton()) {
341
+ return '-';
342
+ }
343
+ if (value != null) {
344
+ if (!col.pipe) {
345
+ return value;
346
+ }
347
+ switch (col.pipe) {
348
+ case 'date':
349
+ return this.datePipe.transform(value, 'dd/MM/yyyy', 'UTC');
350
+ case 'datetime':
351
+ return this.datePipe.transform(value, 'dd/MM/yyyy hh:mm');
352
+ case 'dateMonthYear':
353
+ return this.datePipe.transform(value, 'MM/yyyy');
354
+ case 'decimal':
355
+ return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
356
+ case 'cpfcnpj':
357
+ return this.cpfCnpjPipe.transform(value);
358
+ case 'telefone':
359
+ return this.telefonePipe.transform(value);
360
+ case 'capitalize':
361
+ return this.transformCapitalize(value);
362
+ case 'money':
363
+ return this.formatarValor(value);
364
+ case 'percentage':
365
+ return `${value} % `;
366
+ default:
367
+ break;
368
+ }
369
+ }
370
+ }
371
+ // transformDate(date: any) {
372
+ // const datePipe = new DatePipe('en-US');
373
+ // const utcDate = new Date(date);
374
+ // // Ajuste a data para o fuso horário local
375
+ // const localDate = new Date(utcDate.getTime() + (utcDate.getTimezoneOffset() * 60000));
376
+ // console.log('localDate', localDate, "input date", date);
377
+ // // Transforme a data local para o formato desejado
378
+ // return datePipe.transform(localDate, 'dd/MM/yyyy');
379
+ // }
380
+ transformCapitalize(value) {
381
+ if (!value)
382
+ return value;
383
+ return value.split(' ').map((word, index) => {
384
+ const wordUpper = word.toUpperCase();
385
+ const wordLower = word.toLocaleLowerCase();
386
+ // Verifica numerais romanos
387
+ if (this.romanNumerals.has(wordUpper)) {
388
+ return word;
389
+ }
390
+ // Verifica siglas
391
+ if (this.siglas.has(wordUpper)) {
392
+ return word;
393
+ }
394
+ // Verifica preposições, mas não altera a primeira palavra
395
+ if (index !== 0 && this.prepositions.has(wordLower)) {
396
+ return wordLower;
397
+ }
398
+ // Capitaliza a primeira letra das demais palavras
399
+ return word.charAt(0).toLocaleUpperCase() + word.slice(1).toLocaleLowerCase();
400
+ }).join(' ');
401
+ }
402
+ formatarValor(valor) {
403
+ const formatter = new Intl.NumberFormat('pt-BR', {
404
+ style: 'currency',
405
+ currency: 'BRL',
406
+ });
407
+ return formatter.format(valor);
408
+ }
409
+ adjustTableSize() {
410
+ if (this.tableSize < 800) {
411
+ this.selectedSize = 'p-datatable-sm';
412
+ }
413
+ else {
414
+ this.selectedSize = '';
415
+ }
416
+ }
417
+ doubleClick(e, rowData) {
418
+ let eventDoubleClick = { event: e, rowData: rowData };
419
+ let array = [];
420
+ e.target.classList.forEach((x) => array.push(x));
421
+ this.doubleClickEvent.emit(eventDoubleClick);
422
+ }
423
+ // alignColunas(col: any): string {
424
+ // if (col.align) {
425
+ // return `text - align: ${ col.align } `;
426
+ // } else return '';
427
+ // }
428
+ // alignColunasHeader(col: any): string {
429
+ // if (col.align) {
430
+ // if (col.align == 'right') return 'justify-content: end';
431
+ // else return '';
432
+ // } else return '';
433
+ // }
434
+ retornarRow(rowData, col, field) {
435
+ const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
436
+ const _field = _rowaction && _rowaction[field]
437
+ ? _rowaction[field].constructor === Function
438
+ ? _rowaction[field].apply(this, [rowData])
439
+ : _rowaction[field]
440
+ : null;
441
+ return _field;
442
+ }
443
+ // Não é usado
444
+ exibirCampo(field, rowData) {
445
+ let visible = field.visible ? field.visible(rowData) : true;
446
+ return visible;
447
+ }
448
+ returnClassChip(rowData, col) {
449
+ return `chip - style w - auto border - round - 2xl p - 2 text - ${this.retornarRow(rowData, col, 'stylechip')} border - ${this.retornarRow(rowData, col, 'stylechip')} `;
450
+ }
451
+ returnClassIcon(rowData, col) {
452
+ return this.retornarRow(rowData, col, 'iconrow');
453
+ }
454
+ returnTooltipIcon(rowData, col) {
455
+ return this.retornarRow(rowData, col, 'tooltipiconrow');
456
+ }
457
+ returnTooltipRow(rowData, col) {
458
+ return this.retornarRow(rowData, col, 'tooltiprow');
459
+ }
460
+ deleteColumn(field) {
461
+ let index;
462
+ let column = this.config.columns.find(x => x.field == field);
463
+ if (column) {
464
+ index = this.config.columns.indexOf(column);
465
+ this.config.columns.splice(index, 1);
466
+ this.deletedColuns.push(column);
467
+ }
468
+ }
469
+ addColumn(field) {
470
+ let index;
471
+ let column = this.config.columns.find((x) => x.field == field);
472
+ if (!column) {
473
+ let deletedColumn = this.deletedColuns.find((x) => x.field == field);
474
+ if (deletedColumn != undefined) {
475
+ index = this.deletedColuns.indexOf(deletedColumn);
476
+ this.deletedColuns.slice(index, 1);
477
+ this.config.columns.push(deletedColumn);
478
+ }
479
+ }
480
+ }
481
+ dinamicColumnSet(e, col) {
482
+ col.checked = e.checked;
483
+ if (e.checked)
484
+ this.addColumn(col.field);
485
+ else
486
+ this.deleteColumn(col.field);
487
+ if (col.position)
488
+ this.config.columns.sort(this.sortByPosition());
489
+ }
490
+ abrirMenuFiltro(e) {
491
+ this.menuFiltro = !this.menuFiltro;
492
+ this.checkboxClicked = false;
493
+ if (this.widthPage() < 700)
494
+ this.styleSetter('left', this.botaoFiltro.nativeElement.offsetLeft - 288 + 'px');
495
+ else
496
+ this.styleSetter('left', this.botaoFiltro.nativeElement.offsetLeft + 40 + 'px');
497
+ this.styleSetter('top', this.botaoFiltro.nativeElement.offsetTop + 'px');
498
+ this.styleSetter('visibility', this.menuFiltro ? 'visible' : 'hidden');
499
+ }
500
+ fecharMenuFiltro() {
501
+ this.menuFiltro = false;
502
+ this.checkboxClicked = false;
503
+ this.styleSetter('visibility', 'hidden');
504
+ }
505
+ onEscapeKey(event) {
506
+ if (this.filterColumnsBtn == true && this.menuFiltro == true) {
507
+ this.fecharMenuFiltro();
508
+ }
509
+ }
510
+ onClickEvent(event) {
511
+ if (this.filterColumnsBtn == true && this.menuFiltro == true) {
512
+ const clickedElement = event.target;
513
+ const menuFiltroDiv = this.elementRef.nativeElement.querySelector('#menuFiltroDiv');
514
+ const botaoFiltro = this.elementRef.nativeElement.querySelector('#botaoFiltro');
515
+ const isCheckboxClicked = clickedElement.classList.toString().includes('p-checkbox') ||
516
+ event.target.classList.toString() == '';
517
+ const isInsideMenu = menuFiltroDiv?.contains(clickedElement) ||
518
+ botaoFiltro?.contains(clickedElement) ||
519
+ isCheckboxClicked;
520
+ if (!isInsideMenu)
521
+ this.fecharMenuFiltro();
522
+ }
523
+ }
524
+ styleSetter(style, data) {
525
+ this.renderer?.setStyle(this.menuFiltroDiv.nativeElement, style, data);
526
+ }
527
+ checkMenuFiltro(col) {
528
+ let deletedColumn = this.deletedColuns.find(x => x.field == col.field);
529
+ if (deletedColumn)
530
+ col.checked = false;
531
+ else
532
+ col.checked = true;
533
+ }
534
+ sortByPosition() {
535
+ return function (elem1, elem2) {
536
+ if (elem1.position < elem2.position) {
537
+ return -1;
538
+ }
539
+ else if (elem1.position > elem2.position) {
540
+ return 1;
541
+ }
542
+ else {
543
+ return 0;
544
+ }
545
+ };
546
+ }
547
+ dinamicDisableColumn(col) {
548
+ if (col.fixedColumn)
549
+ return col.fixedColumn;
550
+ else
551
+ return false;
552
+ }
553
+ checkHideColumns() {
554
+ let hideColumnsConfig = this.columns.filter(col => col.hideColumn == true);
555
+ hideColumnsConfig.forEach(col => this.deleteColumn(col.field));
556
+ }
557
+ getCustomTemplate(templatename) {
558
+ return this._templates[templatename];
559
+ }
560
+ onSwitchChange(estado, rowData, col) {
561
+ this.onSwitchTableChange.emit({
562
+ estado: estado,
563
+ rowData: rowData,
564
+ col: col,
565
+ });
566
+ rowData[col.field] = estado;
567
+ }
568
+ createTableActions() {
569
+ this.tableActions = this.dataSource?.map((x) => this.config.actions
570
+ ? this.config.actions.map((y) => mapToMenuItem(y, x))
571
+ : []);
572
+ }
573
+ onSort(e) {
574
+ this.dataSource = [...this.dataSource];
575
+ }
576
+ get config() {
577
+ return this.tableConfig();
578
+ }
579
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CpfCnpjPipe }, { token: i3.TelefonePipe }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
580
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableComponent, selector: "kv-table", inputs: { searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, _templates: { classPropertyName: "_templates", publicName: "templates", isSignal: false, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, defaultSortField: { classPropertyName: "defaultSortField", publicName: "defaultSortField", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: false, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: false, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: false, isRequired: false, transformFunction: null }, filterColumnsBtn: { classPropertyName: "filterColumnsBtn", publicName: "filterColumnsBtn", isSignal: false, isRequired: false, transformFunction: null }, replaceEmptyValues: { classPropertyName: "replaceEmptyValues", publicName: "replaceEmptyValues", isSignal: false, isRequired: false, transformFunction: null }, filtrosAvancados: { classPropertyName: "filtrosAvancados", publicName: "filtrosAvancados", isSignal: false, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: false, isRequired: false, transformFunction: null }, isTableScrollable: { classPropertyName: "isTableScrollable", publicName: "isTableScrollable", isSignal: false, isRequired: false, transformFunction: null }, tableCaptalized: { classPropertyName: "tableCaptalized", publicName: "tableCaptalized", isSignal: false, isRequired: false, transformFunction: null }, rowTrackBy: { classPropertyName: "rowTrackBy", publicName: "rowTrackBy", isSignal: false, isRequired: false, transformFunction: null }, responsiveLayout: { classPropertyName: "responsiveLayout", publicName: "responsiveLayout", isSignal: false, isRequired: false, transformFunction: null }, disabledHeaderCheckbox: { classPropertyName: "disabledHeaderCheckbox", publicName: "disabledHeaderCheckbox", isSignal: false, isRequired: false, transformFunction: null }, applyStyle: { classPropertyName: "applyStyle", publicName: "applyStyle", isSignal: false, isRequired: false, transformFunction: null }, pageLinksOptions: { classPropertyName: "pageLinksOptions", publicName: "pageLinksOptions", isSignal: false, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: false, isRequired: false, transformFunction: null }, ellipsisText: { classPropertyName: "ellipsisText", publicName: "ellipsisText", isSignal: true, isRequired: false, transformFunction: null }, isLoadingSkeleton: { classPropertyName: "isLoadingSkeleton", publicName: "isLoadingSkeleton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { first: "firstChange", rows: "rowsChange", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange" }, host: { listeners: { "window:resize": "onWindowResize($event)", "document:keydown.escape": "onEscapeKey($event)", "document:click": "onClickEvent($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true, isSignal: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "ptable", first: true, predicate: Table, descendants: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }], ngImport: i0, template: "<div class=\"kv-table-container\">\r\n @if (config) {\r\n <p-table\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\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 [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n [first]=\"first()\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n (onPage)=\"onPage($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\r\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n >\r\n @if (config?.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\r\n [style.padding.rem]=\"0.1\"\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 widthPage() < 768 ? 'col-10' : 'col-12'\r\n }} gap-1 p-0\"\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]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm \"\r\n />\r\n </span> -->\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6\"\r\n />\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button \r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-1\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columnsFilter()\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n }\r\n </div>\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 <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]=\"'left'\"\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 [label]=\"getOrExecute(action.label, selectedItems) || ''\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"action.items && action.items.length > 0 || false\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\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.width]=\"col.width\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\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 >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{\r\n capitalize: tableCaptalized,\r\n last: rowIndex === dataSource.length - 1\r\n }\"\r\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\r\n >\r\n @if (config.enableSelect) {\r\n <td style=\"width: 8px !important\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n class=\"{{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }}\"\r\n >\r\n <span class=\"p-column-title text-xs\">{{ 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 @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\r\n !isEmptyDataSource()) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } \r\n @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n } \r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } \r\n @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\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\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\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 }\r\n </span>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td\r\n #tableCell\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title text-xs\">{{ col.header }}:</span>\r\n\r\n @if(!isEmptyDataSource()) {\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col?.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\r\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n } @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\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\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\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 }\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n } @if (col.template) {\r\n <td\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n >\r\n <span class=\"p-column-title text-xs\">{{ col.header }}:</span>\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n } @if(!isEmptyDataSource()) {\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <p-skeleton\r\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\r\n ></p-skeleton>\r\n } }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more\"\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_vert -->\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer\"\r\n >\r\n <span class=\"text-xs\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\r\n </div>\r\n </td>\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 }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::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))}.icon-more{font-weight:300;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.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)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content .p-menuitem-link{padding:.5rem}::ng-deep .p-tieredmenu{padding:.5rem}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-menuitem-content{padding:.35rem}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important}\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: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i8.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i11.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: i12.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: i12.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i12.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i12.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i12.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i15.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup"], outputs: ["iconChange", "onClick"] }] }); }
581
+ }
582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableComponent, decorators: [{
583
+ type: Component,
584
+ args: [{ selector: 'kv-table', template: "<div class=\"kv-table-container\">\r\n @if (config) {\r\n <p-table\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\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 [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n [first]=\"first()\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n (onPage)=\"onPage($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\r\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n >\r\n @if (config?.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\r\n [style.padding.rem]=\"0.1\"\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 widthPage() < 768 ? 'col-10' : 'col-12'\r\n }} gap-1 p-0\"\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]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm \"\r\n />\r\n </span> -->\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6\"\r\n />\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button \r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-1\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columnsFilter()\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n }\r\n </div>\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 <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]=\"'left'\"\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 [label]=\"getOrExecute(action.label, selectedItems) || ''\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"action.items && action.items.length > 0 || false\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\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.width]=\"col.width\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\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 >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{\r\n capitalize: tableCaptalized,\r\n last: rowIndex === dataSource.length - 1\r\n }\"\r\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\r\n >\r\n @if (config.enableSelect) {\r\n <td style=\"width: 8px !important\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n class=\"{{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }}\"\r\n >\r\n <span class=\"p-column-title text-xs\">{{ 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 @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\r\n !isEmptyDataSource()) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } \r\n @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n } \r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } \r\n @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\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\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\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 }\r\n </span>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td\r\n #tableCell\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title text-xs\">{{ col.header }}:</span>\r\n\r\n @if(!isEmptyDataSource()) {\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col?.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\r\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n } @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\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\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\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 }\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n } @if (col.template) {\r\n <td\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n >\r\n <span class=\"p-column-title text-xs\">{{ col.header }}:</span>\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n } @if(!isEmptyDataSource()) {\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <p-skeleton\r\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\r\n ></p-skeleton>\r\n } }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more\"\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_vert -->\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer\"\r\n >\r\n <span class=\"text-xs\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\r\n </div>\r\n </td>\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 }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::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))}.icon-more{font-weight:300;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.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)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content .p-menuitem-link{padding:.5rem}::ng-deep .p-tieredmenu{padding:.5rem}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-menuitem-content{padding:.35rem}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important}\n"] }]
585
+ }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CpfCnpjPipe }, { type: i3.TelefonePipe }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { searchPlaceholder: [{
586
+ type: Input
587
+ }], templates: [{
588
+ type: ContentChildren,
589
+ args: [TemplateDirective]
590
+ }], _templates: [{
591
+ type: Input,
592
+ args: ['templates']
593
+ }], table: [{
594
+ type: ViewChild,
595
+ args: ['table', { static: false }]
596
+ }], ptable: [{
597
+ type: ViewChild,
598
+ args: [Table]
599
+ }], setConfig: [{
600
+ type: Input,
601
+ args: ['config']
602
+ }], defaultSortField: [{
603
+ type: Input
604
+ }], dataSource: [{
605
+ type: Input
606
+ }], selectedItems: [{
607
+ type: Input
608
+ }], totalRecords: [{
609
+ type: Input
610
+ }], paginator: [{
611
+ type: Input
612
+ }], rowsPerPageOptions: [{
613
+ type: Input
614
+ }], tableSize: [{
615
+ type: Input
616
+ }], filterColumnsBtn: [{
617
+ type: Input
618
+ }], replaceEmptyValues: [{
619
+ type: Input
620
+ }], filtrosAvancados: [{
621
+ type: Input
622
+ }], scrollHeight: [{
623
+ type: Input
624
+ }], isTableScrollable: [{
625
+ type: Input
626
+ }], tableCaptalized: [{
627
+ type: Input
628
+ }], rowTrackBy: [{
629
+ type: Input
630
+ }], responsiveLayout: [{
631
+ type: Input
632
+ }], disabledHeaderCheckbox: [{
633
+ type: Input
634
+ }], applyStyle: [{
635
+ type: Input
636
+ }], pageLinksOptions: [{
637
+ type: Input
638
+ }], showFirstLastIcon: [{
639
+ type: Input
640
+ }], onActiveItem: [{
641
+ type: Output
642
+ }], onActiveItemLote: [{
643
+ type: Output
644
+ }], onPaginate: [{
645
+ type: Output
646
+ }], onSelectionChange: [{
647
+ type: Output
648
+ }], doubleClickEvent: [{
649
+ type: Output
650
+ }], filterField: [{
651
+ type: Output
652
+ }], onSwitchTableChange: [{
653
+ type: Output
654
+ }], menuFiltroDiv: [{
655
+ type: ViewChild,
656
+ args: ['menuFiltroDiv']
657
+ }], botaoFiltro: [{
658
+ type: ViewChild,
659
+ args: ['botaoFiltro']
660
+ }], inputField: [{
661
+ type: ViewChild,
662
+ args: ['inputField']
663
+ }], onWindowResize: [{
664
+ type: HostListener,
665
+ args: ['window:resize', ['$event']]
666
+ }], onEscapeKey: [{
667
+ type: HostListener,
668
+ args: ['document:keydown.escape', ['$event']]
669
+ }], onClickEvent: [{
670
+ type: HostListener,
671
+ args: ['document:click', ['$event']]
672
+ }] } });
673
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUva3YtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUva3YtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBR2YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUlOLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEVBQ0wsWUFBWSxFQUVaLGFBQWEsR0FDZCxNQUFNLHdDQUF3QyxDQUFDO0FBS2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVyRixNQUFNLFVBQVUsR0FDZCwwcVBBQTBxUCxDQUFDO0FBTzdxUCxNQUFNLE9BQU8sZ0JBQWdCO0lBa0QzQixJQUFxQixTQUFTLENBQUMsS0FBa0I7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDbkIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQ3pDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUErREQsWUFDbUIsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDbkMsUUFBbUIsRUFDbkIsVUFBc0I7UUFMYixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQS9IZixnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsU0FBUyxDQUFDLENBQUM7UUFFMUUsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBRWxDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFOUIsWUFBTyxHQUFZLElBQUksQ0FBQztRQUV4QixZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFFaEMsaUJBQVksR0FBRyxJQUFJLEdBQUcsQ0FBUztZQUNyQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7U0FDeEUsQ0FBQyxDQUFDO1FBRUssa0JBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBUztZQUN0QyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUk7WUFDN0YsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUk7U0FDcEMsQ0FBQyxDQUFDO1FBRUssV0FBTSxHQUFHLElBQUksR0FBRyxDQUFTO1lBQy9CLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRXhCLHNCQUFpQixHQUFXLGNBQWMsQ0FBQztRQUVwRCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUNoQyxtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQUkzQixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQXNCMUIsVUFBSyxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6QixTQUFJLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWYscUJBQWdCLEdBQXVCLFNBQVMsQ0FBQztRQUNqRCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFHMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLHVCQUFrQixHQUFZLElBQUksQ0FBQztRQUc1Qzs7V0FFRztRQUNNLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsZUFBVSxHQUFzQyxDQUFDLEtBQWEsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQUVuRixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFakMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBRWpEOztXQUVHO1FBQ00sZUFBVSxHQUFhLENBQUMsT0FBWSxFQUFFLEdBQXNCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQVluRSxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pELGVBQVUsR0FBZ0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxRCxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6RCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELHdCQUFtQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBTXRFLGNBQVMsR0FBRyxTQUFTLENBQWEsV0FBVyxDQUFDLENBQUM7UUFDL0MsaUJBQVksR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFckMsc0JBQWlCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBYTFDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRyxDQUFDO1lBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxxQkFBZ0IsR0FBRyxNQUFNLENBQVEsRUFBRSxDQUFDLENBQUM7UUFFckMsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFOUIsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFRLEVBQUUsR0FBUSxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBZUgsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFFM0Isc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQTtRQWlqQkYsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzVCLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUzRixPQUFPLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtZQUNuRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDM0UsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFaEQsSUFBSSxTQUFTLEdBQUcsVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFFM0MsT0FBTyxHQUFHLFNBQVMsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFBO1FBcG1CQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFvQkQsU0FBUztRQUNQLElBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3ZFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFRRCx3QkFBd0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM3RCxJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBRXRDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLElBQ0UsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxRQUFRO29CQUN2QyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLFFBQVEsRUFDdkMsQ0FBQztvQkFDRCxPQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBWSxDQUFDLGFBQWEsQ0FDakQsQ0FBQyxDQUFDLGdCQUFnQixDQUFZLENBQ2hDLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUNMLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUztvQkFDeEMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxTQUFTLEVBQ3hDLENBQUM7b0JBQ0QsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2hELENBQUMsQ0FBQyxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7NEJBQ25CLENBQUMsQ0FBQyxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWCxDQUFDO3FCQUFNLElBQ0wsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxRQUFRO29CQUN2QyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLFFBQVEsRUFDdkMsQ0FBQztvQkFDRCxPQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBWSxHQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBWSxDQUFDO2dCQUMzRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDckMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7b0JBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO3dCQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsTUFBbUI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBbUI7UUFDdkMsSUFBSSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFFekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWxFLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBWTtRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFJLE1BQW9CLEVBQUUsSUFBUztRQUM3QyxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDakQsT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCxXQUFXLENBQUMsR0FBc0I7UUFDaEMsT0FBTyxHQUFHLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRVMsTUFBTSxDQUFDLEtBQXFCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFzQjtRQUNqQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQXNCO1FBQ2xDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3pFLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCO1lBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQztZQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUUsQ0FBQztJQUVELGtCQUFrQjtJQUNWLGFBQWEsQ0FBQyxPQUFZLEVBQUUsR0FBc0IsRUFBRSxJQUFTO1FBQ25FLDJFQUEyRTtRQUMzRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDdkQsQ0FBQztJQUVELGNBQWM7UUFDWixRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO29CQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxTQUFTLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQzVDOztVQUVFO1FBQ0YsSUFBSSxPQUFPLEdBQUcsOEJBQThCLFVBQVUsR0FBRyxDQUFDO1FBQzFELElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdEUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7O2dCQUNqRSxPQUFPLEdBQUcsOEJBQThCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFZLEVBQUUsS0FBWTtRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxLQUFLLENBQUMsWUFBWSxDQUFFLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksYUFBYSxHQUNmLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBRW5CLElBQUksS0FBSyxDQUFDLFlBQVk7Z0JBQUUsYUFBYSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFFM0QsSUFBSSxLQUFLLENBQUMsU0FBUztnQkFDakIsU0FBUyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUU5RSxNQUFNLE1BQU0sR0FBa0I7Z0JBQzVCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ3pCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixTQUFTLEVBQUUsU0FBUztnQkFDcEIsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUNoRyxDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sY0FBYyxDQUFDLGFBQWtCO1FBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxjQUFjLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQ2pELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxRQUFnQixDQUFDO1FBRXJCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFekUsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFO2dCQUMxQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxHQUFHLDZCQUE2QixDQUFDO2dCQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjO0lBQ04sV0FBVyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUN0RCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDakQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ2xILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssTUFBTTtvQkFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdELEtBQUssVUFBVTtvQkFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM1RCxLQUFLLGVBQWU7b0JBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNuRCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3RCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxVQUFVO29CQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssWUFBWTtvQkFDZixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekMsS0FBSyxPQUFPO29CQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxZQUFZO29CQUNmLE9BQU8sR0FBRyxLQUFLLEtBQUssQ0FBQztnQkFFdkI7b0JBQ0UsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QjtJQUM3Qiw0Q0FBNEM7SUFDNUMsb0NBQW9DO0lBRXBDLCtDQUErQztJQUMvQywyRkFBMkY7SUFFM0YsNkRBQTZEO0lBRTdELHVEQUF1RDtJQUN2RCx3REFBd0Q7SUFDeEQsSUFBSTtJQUVKLG1CQUFtQixDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV6QixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUUzQyw0QkFBNEI7WUFDNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxrQkFBa0I7WUFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxrREFBa0Q7WUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQy9DLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBTSxFQUFFLE9BQVk7UUFDOUIsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRELElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxxQkFBcUI7SUFDckIsOENBQThDO0lBQzlDLHNCQUFzQjtJQUN0QixJQUFJO0lBRUoseUNBQXlDO0lBQ3pDLHFCQUFxQjtJQUNyQiwrREFBK0Q7SUFDL0Qsc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixJQUFJO0lBRUosV0FBVyxDQUFDLE9BQVksRUFBRSxHQUFzQixFQUFFLEtBQWE7UUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVE7Z0JBQzFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGNBQWM7SUFDTixXQUFXLENBQUMsS0FBVSxFQUFFLE9BQVk7UUFDMUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQ2xELE9BQU8sMkRBQTJELElBQUksQ0FBQyxXQUFXLENBQ2hGLE9BQU8sRUFDUCxHQUFHLEVBQ0gsV0FBVyxDQUVYLGFBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDaEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDbEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDbkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksS0FBYSxDQUFDO1FBRWxCLElBQUksTUFBTSxHQUFrQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2xFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQ3RCLENBQUM7UUFDRixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxLQUFhLENBQUM7UUFFbEIsSUFBSSxNQUFNLEdBQWtDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDbEUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUN4QixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxhQUFhLEdBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUM7WUFFbkQsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsQ0FBTSxFQUFFLEdBQXNCO1FBQzdDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7O1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksR0FBRyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFNO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUc7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FDZCxNQUFNLEVBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQ3ZELENBQUM7O1lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FDZCxNQUFNLEVBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQ3RELENBQUM7UUFFSixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUdELFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUdELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1lBQ25ELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNoRSxNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUQsTUFBTSxpQkFBaUIsR0FDckIsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUMxRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUMsTUFBTSxZQUFZLEdBQ2hCLGFBQWEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUN2QyxXQUFXLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDckMsaUJBQWlCLENBQUM7WUFFcEIsSUFBSSxDQUFDLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBc0I7UUFDcEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUMxQixDQUFDO1FBQ0YsSUFBSSxhQUFhO1lBQUUsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7O1lBQ2xDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxVQUFVLEtBQVUsRUFBRSxLQUFVO1lBQ3JDLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFzQjtRQUN6QyxJQUFJLEdBQUcsQ0FBQyxXQUFXO1lBQUUsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDOztZQUN2QyxPQUFPLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLElBQUksQ0FDOUIsQ0FBQztRQUNGLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQW9CO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQVcsRUFBRSxPQUFZLEVBQUUsR0FBc0I7UUFDOUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUM1QixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEdBQUcsRUFBRSxHQUFHO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLEVBQUUsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFNO1FBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUcsQ0FBQztJQUM3QixDQUFDOzhHQXZ0QlUsZ0JBQWdCO2tHQUFoQixnQkFBZ0IsMnVJQXlDVixpQkFBaUIsK1BBS3ZCLEtBQUsseVVDOUZsQiwydndCQStvQkE7OzJGRC9sQmEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLFVBQVU7Nk1Ba0NYLGlCQUFpQjtzQkFBekIsS0FBSztnQkFXOEIsU0FBUztzQkFBNUMsZUFBZTt1QkFBQyxpQkFBaUI7Z0JBQ2QsVUFBVTtzQkFBN0IsS0FBSzt1QkFBQyxXQUFXO2dCQUVxQixLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRW5CLE1BQU07c0JBQXZCLFNBQVM7dUJBQUMsS0FBSztnQkFJSyxTQUFTO3NCQUE3QixLQUFLO3VCQUFDLFFBQVE7Z0JBY04sZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFcUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNBLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDQyxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBc0p2QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXFYekMsV0FBVztzQkFEVixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFuRCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgaW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgc2lnbmFsLFxyXG4gIHZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSwgVGFibGVQYWdlRXZlbnQgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuXHJcbmltcG9ydCB7IENwZkNucGpQaXBlIH0gZnJvbSAnLi4vLi4vYXBpL3BpcGVzL2NwZmNucGoucGlwZSc7XHJcbmltcG9ydCB7XHJcbiAgZ2V0T3JFeGVjdXRlLFxyXG4gIFZhbHVlT3JGbixcclxuICBtYXBUb01lbnVJdGVtLFxyXG59IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb25maWcnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xyXG5pbXBvcnQgeyBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi8uLi9hcGkvcGlwZXMvdGVsZWZvbmUucGlwZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYXBpL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuXHJcbmNvbnN0IGltZ0RlZmF1bHQgPVxyXG4gICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNvbmZpZyA9IHNpZ25hbDxUYWJsZUNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZFNpemU6IHN0cmluZyA9ICcnO1xyXG5cclxuICB3aWR0aFBhZ2UgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHJcbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbHVtbnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcclxuICBkZWxldGVkQ29sdW5zOiBUYWJsZUNvbmZpZ0NvbHVtbltdID0gW107XHJcblxyXG4gIHByaXZhdGUgcHJlcG9zaXRpb25zID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICdkZScsICdkYScsICdkbycsICdlbScsICdubycsICduYScsICdwYXJhJywgJ3BvcicsICdjb20nLCAnYScsICdvJywgJ2UnXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcm9tYW5OdW1lcmFscyA9IG5ldyBTZXQ8c3RyaW5nPihbXHJcbiAgICAnSScsICdJSScsICdJSUknLCAnSVYnLCAnVicsICdWSScsICdWSUknLCAnVklJSScsICdJWCcsICdYJywgJ1hJJywgJ1hJSScsICdYSUlJJywgJ1hJVicsICdYVicsXHJcbiAgICAnWFZJJywgJ1hWSUknLCAnWFZJSUknLCAnWElYJywgJ1hYJ1xyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHNpZ2xhcyA9IG5ldyBTZXQ8c3RyaW5nPihbXHJcbiAgICAnVUknLCAnVVgnLCAnVEknXHJcbiAgXSk7XHJcblxyXG4gIG1lbnVGaWx0cm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjaGVja2JveENsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdQZXNxdWlzYXIuLi4nO1xyXG5cclxuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdGFibGVBY3Rpb25zOiBNZW51SXRlbVtdW10gPSBbXTtcclxuICBjdXJyRGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuXHJcbiAgbWVudUl0ZW1zITogTWVudUl0ZW1bXTtcclxuXHJcbiAgYWN0aW9uc09mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XHJcbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZSE6IFRhYmxlO1xyXG5cclxuICBAVmlld0NoaWxkKFRhYmxlKSBwdGFibGUhOiBUYWJsZTtcclxuXHJcblxyXG5cclxuICBASW5wdXQoJ2NvbmZpZycpIHNldCBzZXRDb25maWcodmFsdWU6IFRhYmxlQ29uZmlnKSB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLnNldCh7XHJcbiAgICAgIGVuYWJsZUNhdGlvbjogdmFsdWUuZW5hYmxlQ2F0aW9uIHx8IHRydWUsXHJcbiAgICAgIGVuYWJsZVNlbGVjdDogdmFsdWUuZW5hYmxlU2VsZWN0IHx8IGZhbHNlLFxyXG4gICAgICBlbmFibGVGaWx0ZXI6IHZhbHVlLmVuYWJsZUZpbHRlciB8fCB0cnVlLFxyXG4gICAgICAuLi52YWx1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGVmaW5pckNvbHVuYXNDb25maWd1cmF2ZWlzKHRoaXMudGFibGVDb25maWcoKSEpO1xyXG4gIH1cclxuXHJcbiAgZmlyc3QgPSBtb2RlbDxudW1iZXI+KDApO1xyXG4gIHJvd3MgPSBtb2RlbDxudW1iZXI+KDUpO1xyXG5cclxuICBASW5wdXQoKSBkZWZhdWx0U29ydEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcclxuICBASW5wdXQoKSBwYWdpbmF0b3I6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9ucyE6IG51bWJlcltdO1xyXG4gIEBJbnB1dCgpIHRhYmxlU2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcmVwbGFjZUVtcHR5VmFsdWVzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIEVzc2EgcHJvcHJpZWRhZGUgbsOjbyBzZXLDoSBtYWlzIHV0aWxpemFkYSBwb3IgZXNzZSBjb21wb25lbnRlIG5hcyBwcsOzeGltYXMgdmVyc8O1ZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVTY3JvbGxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVDYXB0YWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHJvd1RyYWNrQnk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGFueSA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW07XHJcblxyXG4gIEBJbnB1dCgpIHJlc3BvbnNpdmVMYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlZEhlYWRlckNoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhIHByb3ByaWVkYWRlIFwidGFnQ29sb3JcIiBuYSBjb25maWd1cmHDp8OjbyBkYSBjb2x1bmEgcGFyYSBlc3RpbGl6YXIgYSB0YWdcclxuICAgKi9cclxuICBASW5wdXQoKSBhcHBseVN0eWxlOiBGdW5jdGlvbiA9IChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pID0+ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBPIHZhbG9yIGRlIHBhZ2VMaW5rcyDDqSBhdHJpYnXDrWRvIGRlIGFjb3JkbyBjb20gbyB0YW1hbmhvIGRhIHRlbGEsIGVzc2EgcHJvcHJpZWRhZGUgbsOjbyBlc3TDoSBzZW5kbyB1dGlsaXphZGFcclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zITogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBBIHF1YW50aWRhZGUgZGUgcGFnaW5pdG9yUGFnZUljb25zIMOpIGF0cmlidcOtZG8gZGUgYWNvcmRvIGNvbSBvIHRhbWFuaG8gZGEgdGVsYSwgZXNzYSBwcm9wcmllZGFkZSBuw6NvIGVzdMOhIHNlbmRvIHV0aWxpemFkYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RJY29uITogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdpbmF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Td2l0Y2hUYWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVGaWx0cm9EaXYnKSBtZW51RmlsdHJvRGl2ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dEZpZWxkJykgaW5wdXRGaWVsZCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHRhYmxlQ2VsbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGFibGVDZWxsJyk7XHJcbiAgZWxsaXBzaXNUZXh0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpc0xvYWRpbmdTa2VsZXRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzUm93U2VsZWN0YWJsZSA9IHRoaXMuaXNSb3dTZWxlY3RhYmxlLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmFjYW9FZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpITtcclxuICAgIHRoaXMuZGVmaW5pckZpbHRyb3NHbG9iYWlzKGNvbmZpZyk7XHJcbiAgICB0aGlzLmRlZmluaXJDb2x1bmFzQ29uZmlndXJhdmVpcyhjb25maWcpO1xyXG4gIH0pO1xyXG5cclxuICBkYXRhU291cmNlU2lnbmFsID0gc2lnbmFsPGFueVtdPihbXSk7XHJcblxyXG4gIHdpZHRoU2tlbGV0b25zOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICB3aWR0aFJhbmRvbSA9IGNvbXB1dGVkKCgpID0+IChjb2w6IGFueSwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICghY29sLnRlbXBsYXRlICYmICFjb2wuaWNvbiAmJiAhY29sLmZpZWxkVHlwZSAmJiAhY29sLmJvb2xlYW4gJiYgIWNvbC5waXBlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLndpZHRoU2tlbGV0b25zW3Jvd10gKiAxMDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMTAwO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VyckRhdGFTb3VyY2UpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGVBY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRhU291cmNlTW9jazogYW55W10gPSBbXTtcclxuXHJcbiAgaXNFbXB0eURhdGFTb3VyY2UgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU291cmNlU2lnbmFsKCkpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2VNb2NrKTtcclxuICB9KVxyXG5cclxuICBsb2FkaW5nU2tlbGV0b25VdGlsaXRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgbGV0IHJvd0l0ZW06IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgcm93SXRlbVtjb2wuZmllbGRdID0gJyc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5kYXRhU291cmNlTW9jayA9IEFycmF5KHRoaXMucm93cygpKS5maWxsKHsgLi4ucm93SXRlbSB9KTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlTW9jaztcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzKCk7IGkrKykge1xyXG4gICAgICAgIHRoaXMud2lkdGhTa2VsZXRvbnMucHVzaChNYXRoLnJhbmRvbSgpICogMC43ICsgMC4yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTa2VsZXRvblV0aWxpdGllcygpO1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMud2lkdGhQYWdlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgICAvLyB0aGlzLmNyaWFyTWVudUNvbHVtbnMoKTtcclxuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrSGlkZUNvbHVtbnMoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRTb3J0RmllbGQgPSB0aGlzLmRlZmF1bHRTb3J0RmllbGQ7XHJcbiAgICBpZiAoZGVmYXVsdFNvcnRGaWVsZCAmJiB0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0eXBlb2YgYVtkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIChhW2RlZmF1bHRTb3J0RmllbGRdIGFzIHN0cmluZykubG9jYWxlQ29tcGFyZShcclxuICAgICAgICAgICAgKGJbZGVmYXVsdFNvcnRGaWVsZF0gYXMgc3RyaW5nKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgdHlwZW9mIGFbZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgICAgdHlwZW9mIGJbZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdib29sZWFuJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIGFbZGVmYXVsdFNvcnRGaWVsZF0gPT09IGJbZGVmYXVsdFNvcnRGaWVsZF1cclxuICAgICAgICAgICAgPyAwXHJcbiAgICAgICAgICAgIDogYVtkZWZhdWx0U29ydEZpZWxkXVxyXG4gICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgIDogLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHR5cGVvZiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgICAgdHlwZW9mIGJbZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdudW1iZXInXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gKGFbZGVmYXVsdFNvcnRGaWVsZF0gYXMgbnVtYmVyKSAtIChiW2RlZmF1bHRTb3J0RmllbGRdIGFzIG51bWJlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAwOyAvLyBPdSBvdXRyYSBsw7NnaWNhIGRlcGVuZGVuZG8gZG8gY2Fzb1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGlzYWJsZWQtcm93JykuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKS5mb3JFYWNoKGNlbGwgPT4ge1xyXG4gICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICBpZiAoIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3Rvb2x0aXAnKSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlZmluaXJDb2x1bmFzQ29uZmlndXJhdmVpcyhjb25maWc6IFRhYmxlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKDAsIHRoaXMuY29sdW1ucy5sZW5ndGgpO1xyXG5cclxuICAgIGNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVmaW5pckZpbHRyb3NHbG9iYWlzKGNvbmZpZzogVGFibGVDb25maWcpIHtcclxuICAgIGlmIChjb25maWc/LmVuYWJsZUZpbHRlcikge1xyXG5cclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMuc3BsaWNlKDAsIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzLmxlbmd0aCk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWcuY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzLnB1c2goY29sdW1uLmZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLnB0YWJsZSkgdGhpcy5wdGFibGUucmVzZXQoKTtcclxuICAgIGlmICh0aGlzLmlucHV0RmllbGQpIHRoaXMuaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XHJcbiAgICB0aGlzLndpZHRoUGFnZS5zZXQod2luZG93LmlubmVyV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JFeGVjdXRlPFQ+KGFjdGlvbjogVmFsdWVPckZuPFQ+LCBkYXRhOiBhbnkpOiBUIHtcclxuICAgIHJldHVybiBnZXRPckV4ZWN1dGUoYWN0aW9uLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGlzQm9vbGVhbkZpZWxkKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiByb3dEYXRhW2NvbC5maWVsZF0gPT0gJ2Jvb2xlYW4nO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlwRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbC5maWVsZFR5cGUgPT0gJ2NoaXAnO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uUGFnZShldmVudDogVGFibGVQYWdlRXZlbnQpIHtcclxuICAgIHRoaXMuZmlyc3Quc2V0KGV2ZW50LmZpcnN0KTtcclxuICAgIHRoaXMucm93cy5zZXQoZXZlbnQucm93cyk7XHJcbiAgfVxyXG5cclxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIGlzU3dpdGNoRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdzd2l0Y2gnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG5cclxuICBpc1Jvd1NlbGVjdGFibGUoZXZlbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWRDaGVja2JveChldmVudC5kYXRhKTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb25cclxuICAgICAgPyB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSlcclxuICAgICAgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRSb3cocm93RGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZVJvdyA/IHRoaXMuY29uZmlnLmRpc2FibGVSb3cocm93RGF0YSkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIE7Do28gw6kgdXRpbGl6YWRhXHJcbiAgcHJpdmF0ZSBnZXRTdHlsZUNsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdFU1RJTE8gLT4nLCBjb2wgPyBjb2wuc3R5bGVDbGFzcyEocm93RGF0YSwgY29sLCBkYXRhKSA6ICcnKVxyXG4gICAgcmV0dXJuIGNvbCA/IGNvbC5zdHlsZUNsYXNzIShyb3dEYXRhLCBjb2wsIGRhdGEpIDogJydcclxuICB9XHJcblxyXG4gIHZlcmlmaWNhQ3Vyc29yKCkge1xyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpc2FibGVkLXJvdycpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgcm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJykuZm9yRWFjaChjZWxsID0+IHtcclxuICAgICAgICBjZWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgaWYgKCF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0b29sdGlwJykpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBOw6NvIGVzdMOhIHZlcmlmaWNhbmRvIHNlIHJvd0RhdGFbY29sLmZpZWxkXSDDqSBzdHJpbmdcclxuICBsb2FkSW1hZ2Uocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIC8qXHJcbiAgICAgIE5vc3NhIGNvbHVuYSBkZSBpbWFnZW0gdHJhYmFsaGEgY29tIHN0cmluZ3MgZG8gdGlwbzogYmFzZTY0IG91IHVybFxyXG4gICAgKi9cclxuICAgIGxldCByZXRvcm5vID0gYGRhdGE6IGltYWdlIC8ganBnOyBiYXNlNjQsICR7aW1nRGVmYXVsdH0gYDtcclxuICAgIGlmIChyb3dEYXRhICYmIGNvbCAmJiByb3dEYXRhW2NvbC5maWVsZF0gJiYgcm93RGF0YVtjb2wuZmllbGRdICE9PSAnJykge1xyXG4gICAgICBpZiAocm93RGF0YVtjb2wuZmllbGRdLmluY2x1ZGVzKCdodHRwJykpIHJldG9ybm8gPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgIGVsc2UgcmV0b3JubyA9IGBkYXRhOiBpbWFnZSAvIGpwZzsgYmFzZTY0LCAke3Jvd0RhdGFbY29sLmZpZWxkXX0gYDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkdsb2JhbEZpbHRlcih0YWJsZTogVGFibGUsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5maWx0ZXJGaWVsZC5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2luYXRlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XHJcbiAgICAgICAgKGV2ZW50Py5maXJzdCA+IDAgPyBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgOiBldmVudC5maXJzdCkgKyAxO1xyXG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xyXG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuZ2xvYmFsRmlsdGVyKSB0ZXJtb1Blc3F1aXNhID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnNvcnRGaWVsZClcclxuICAgICAgICBvcmRlbmFjYW8gPSBgJHtldmVudC5zb3J0RmllbGR9ICR7ZXZlbnQuc29ydE9yZGVyID09PSAxID8gJ0FTQycgOiAnREVTQyd9IGA7XHJcblxyXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XHJcbiAgICAgICAgcGFnaW5hSW5pY2lhbDogcGFnaW5hSW5pY2lhbCxcclxuICAgICAgICB0YW1hbmhvUGFnaW5hOiBldmVudC5yb3dzLFxyXG4gICAgICAgIHRlcm1vUGVzcXVpc2E6IHRlcm1vUGVzcXVpc2EsXHJcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXHJcbiAgICAgICAgb3JkZXJuYWNhb0dyb3VwOiB7IGNvbHVtbjogZXZlbnQuc29ydEZpZWxkLCBkaXJlY3Rpb246IGV2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnIH0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb25zT2Zmc2V0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICAgIHRoaXMuY3JlYXRlVGFibGVBY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2UodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gTsOjbyBlc3TDoSB2ZXJpZmljYW5kbyBzZSByb3dEYXRhW2NvbC5maWVsZF0gcG9kZSBzZXIgcGFzc2FkbyBwYXJhIERhdGVcclxuICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgIGxldCByb3dDbGFzczogc3RyaW5nO1xyXG5cclxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcclxuXHJcbiAgICBpZiAoY29sLmV4cGlyZWREYXRlID09IHRydWUpIHtcclxuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxyXG4gICAgICAgID8gKHJvd0NsYXNzID0gcm93Q2xhc3MgKyAnIHRleHQtcmVkLTQwMCBmb250LXNlbWlib2xkJylcclxuICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgLy8gTsOjbyDDqSB1c2FkYVxyXG4gIHByaXZhdGUgZXhwaXJlZEZpbGUocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhWydkYXRhdmVuY2ltZW50byddO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKCkgJiYgY29sLmZpZWxkID09ICdhcmVhJztcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG5cclxuICAgIGlmIChjb2wudHJhbnNmb3JtKSB7XHJcbiAgICAgIHJldHVybiBjb2wudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB1bmRlZmluZWQpICYmIHRoaXMucmVwbGFjZUVtcHR5VmFsdWVzICYmIHRoaXMuaXNMb2FkaW5nU2tlbGV0b24oKSkge1xyXG4gICAgICByZXR1cm4gJy0nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICghY29sLnBpcGUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcclxuICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXknLCAnVVRDJyk7XHJcbiAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eSBoaDptbScpO1xyXG4gICAgICAgIGNhc2UgJ2RhdGVNb250aFllYXInOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnTU0veXl5eScpO1xyXG4gICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlLCAnMS4yLTInLCAncHQtQlInKTtcclxuICAgICAgICBjYXNlICdjcGZjbnBqJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNwZkNucGpQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAndGVsZWZvbmUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnY2FwaXRhbGl6ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1DYXBpdGFsaXplKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdtb25leSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRhclZhbG9yKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcclxuICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX0gJSBgO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHRyYW5zZm9ybURhdGUoZGF0ZTogYW55KSB7XHJcbiAgLy8gICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAvLyAgIGNvbnN0IHV0Y0RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcclxuXHJcbiAgLy8gICAvLyBBanVzdGUgYSBkYXRhIHBhcmEgbyBmdXNvIGhvcsOhcmlvIGxvY2FsXHJcbiAgLy8gICBjb25zdCBsb2NhbERhdGUgPSBuZXcgRGF0ZSh1dGNEYXRlLmdldFRpbWUoKSArICh1dGNEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG5cclxuICAvLyAgIGNvbnNvbGUubG9nKCdsb2NhbERhdGUnLCBsb2NhbERhdGUsIFwiaW5wdXQgZGF0ZVwiLCBkYXRlKTtcclxuXHJcbiAgLy8gICAvLyBUcmFuc2Zvcm1lIGEgZGF0YSBsb2NhbCBwYXJhIG8gZm9ybWF0byBkZXNlamFkb1xyXG4gIC8vICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShsb2NhbERhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgLy8gfVxyXG5cclxuICB0cmFuc2Zvcm1DYXBpdGFsaXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnICcpLm1hcCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgd29yZFVwcGVyID0gd29yZC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBjb25zdCB3b3JkTG93ZXIgPSB3b3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAvLyBWZXJpZmljYSBudW1lcmFpcyByb21hbm9zXHJcbiAgICAgIGlmICh0aGlzLnJvbWFuTnVtZXJhbHMuaGFzKHdvcmRVcHBlcikpIHtcclxuICAgICAgICByZXR1cm4gd29yZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVmVyaWZpY2Egc2lnbGFzXHJcbiAgICAgIGlmICh0aGlzLnNpZ2xhcy5oYXMod29yZFVwcGVyKSkge1xyXG4gICAgICAgIHJldHVybiB3b3JkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBWZXJpZmljYSBwcmVwb3Npw6fDtWVzLCBtYXMgbsOjbyBhbHRlcmEgYSBwcmltZWlyYSBwYWxhdnJhXHJcbiAgICAgIGlmIChpbmRleCAhPT0gMCAmJiB0aGlzLnByZXBvc2l0aW9ucy5oYXMod29yZExvd2VyKSkge1xyXG4gICAgICAgIHJldHVybiB3b3JkTG93ZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENhcGl0YWxpemEgYSBwcmltZWlyYSBsZXRyYSBkYXMgZGVtYWlzIHBhbGF2cmFzXHJcbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b0xvY2FsZVVwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgfSkuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0YXJWYWxvcih2YWxvcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7XHJcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxyXG4gICAgICBjdXJyZW5jeTogJ0JSTCcsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWxvcik7XHJcbiAgfVxyXG5cclxuICBhZGp1c3RUYWJsZVNpemUoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVNpemUgPCA4MDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAncC1kYXRhdGFibGUtc20nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvdWJsZUNsaWNrKGU6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICBsZXQgZXZlbnREb3VibGVDbGljayA9IHsgZXZlbnQ6IGUsIHJvd0RhdGE6IHJvd0RhdGEgfTtcclxuXHJcbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBlLnRhcmdldC5jbGFzc0xpc3QuZm9yRWFjaCgoeDogYW55KSA9PiBhcnJheS5wdXNoKHgpKTtcclxuXHJcbiAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcclxuICB9XHJcblxyXG4gIC8vIGFsaWduQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgLy8gICBpZiAoY29sLmFsaWduKSB7XHJcbiAgLy8gICAgIHJldHVybiBgdGV4dCAtIGFsaWduOiAkeyBjb2wuYWxpZ24gfSBgO1xyXG4gIC8vICAgfSBlbHNlIHJldHVybiAnJztcclxuICAvLyB9XHJcblxyXG4gIC8vIGFsaWduQ29sdW5hc0hlYWRlcihjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgLy8gICBpZiAoY29sLmFsaWduKSB7XHJcbiAgLy8gICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XHJcbiAgLy8gICAgIGVsc2UgcmV0dXJuICcnO1xyXG4gIC8vICAgfSBlbHNlIHJldHVybiAnJztcclxuICAvLyB9XHJcblxyXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbiwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBfcm93YWN0aW9uID0gdGhpcy5jb25maWcucm93cyA/IHRoaXMuY29uZmlnLnJvd3NbY29sLmZpZWxkXSA6IG51bGw7XHJcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9XHJcbiAgICAgIF9yb3dhY3Rpb24gJiYgX3Jvd2FjdGlvbltmaWVsZF1cclxuICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvblxyXG4gICAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5hcHBseSh0aGlzLCBbcm93RGF0YV0pXHJcbiAgICAgICAgICA6IF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgcmV0dXJuIF9maWVsZDtcclxuICB9XHJcblxyXG4gIC8vIE7Do28gw6kgdXNhZG9cclxuICBwcml2YXRlIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHZpc2libGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgY2hpcCAtIHN0eWxlIHcgLSBhdXRvIGJvcmRlciAtIHJvdW5kIC0gMnhsIHAgLSAyIHRleHQgLSAke3RoaXMucmV0b3JuYXJSb3coXHJcbiAgICAgIHJvd0RhdGEsXHJcbiAgICAgIGNvbCxcclxuICAgICAgJ3N0eWxlY2hpcCdcclxuICAgIClcclxuICAgICAgfSBib3JkZXIgLSAke3RoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnc3R5bGVjaGlwJyl9IGA7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0ljb24ocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcclxuICB9XHJcblxyXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcHJvdycpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxyXG4gICAgICB4ID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcbiAgICBpZiAoY29sdW1uKSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY29sdW1ucy5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5kZWxldGVkQ29sdW5zLnB1c2goY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbHVtbihmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcclxuICAgICAgKHgpID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID1cclxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZCgoeCkgPT4geC5maWVsZCA9PSBmaWVsZCk7XHJcblxyXG4gICAgICBpZiAoZGVsZXRlZENvbHVtbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5zbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5wdXNoKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaW5hbWljQ29sdW1uU2V0KGU6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgY29sLmNoZWNrZWQgPSBlLmNoZWNrZWQ7XHJcbiAgICBpZiAoZS5jaGVja2VkKSB0aGlzLmFkZENvbHVtbihjb2wuZmllbGQpO1xyXG4gICAgZWxzZSB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpO1xyXG5cclxuICAgIGlmIChjb2wucG9zaXRpb24pIHRoaXMuY29uZmlnLmNvbHVtbnMuc29ydCh0aGlzLnNvcnRCeVBvc2l0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgYWJyaXJNZW51RmlsdHJvKGU6IGFueSkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gIXRoaXMubWVudUZpbHRybztcclxuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA3MDApXHJcbiAgICAgIHRoaXMuc3R5bGVTZXR0ZXIoXHJcbiAgICAgICAgJ2xlZnQnLFxyXG4gICAgICAgIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN0eWxlU2V0dGVyKFxyXG4gICAgICAgICdsZWZ0JyxcclxuICAgICAgICB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIDQwICsgJ3B4J1xyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKTtcclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBmZWNoYXJNZW51RmlsdHJvKCkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xyXG4gICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XHJcbiAgICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cclxuICAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xyXG4gICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxyXG4gICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxyXG4gICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcclxuXHJcbiAgICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5tZW51RmlsdHJvRGl2Lm5hdGl2ZUVsZW1lbnQsIHN0eWxlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgZGVsZXRlZENvbHVtbiA9IHRoaXMuZGVsZXRlZENvbHVucy5maW5kKFxyXG4gICAgICB4ID0+IHguZmllbGQgPT0gY29sLmZpZWxkXHJcbiAgICApO1xyXG4gICAgaWYgKGRlbGV0ZWRDb2x1bW4pIGNvbC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBlbHNlIGNvbC5jaGVja2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNvcnRCeVBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtMTogYW55LCBlbGVtMjogYW55KSB7XHJcbiAgICAgIGlmIChlbGVtMS5wb3NpdGlvbiA8IGVsZW0yLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW0xLnBvc2l0aW9uID4gZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGlmIChjb2wuZml4ZWRDb2x1bW4pIHJldHVybiBjb2wuZml4ZWRDb2x1bW47XHJcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNoZWNrSGlkZUNvbHVtbnMoKSB7XHJcbiAgICBsZXQgaGlkZUNvbHVtbnNDb25maWcgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmhpZGVDb2x1bW4gPT0gdHJ1ZVxyXG4gICAgKTtcclxuICAgIGhpZGVDb2x1bW5zQ29uZmlnLmZvckVhY2goY29sID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcblxyXG4gIG9uU3dpdGNoQ2hhbmdlKGVzdGFkbzogYW55LCByb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIHRoaXMub25Td2l0Y2hUYWJsZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZXN0YWRvOiBlc3RhZG8sXHJcbiAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgIGNvbDogY29sLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcm93RGF0YVtjb2wuZmllbGRdID0gZXN0YWRvO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGFibGVBY3Rpb25zKCkge1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbnMgPSB0aGlzLmRhdGFTb3VyY2U/Lm1hcCgoeCkgPT5cclxuICAgICAgdGhpcy5jb25maWcuYWN0aW9uc1xyXG4gICAgICAgID8gdGhpcy5jb25maWcuYWN0aW9ucy5tYXAoKHkpID0+IG1hcFRvTWVudUl0ZW0oeSwgeCkpXHJcbiAgICAgICAgOiBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uU29ydChlOiBhbnkpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbmZpZygpOiBUYWJsZUNvbmZpZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpITtcclxuICB9XHJcblxyXG4gIGNvbHVtbnNGaWx0ZXIgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBkeW5hbWljQ29sdW1ucyA9ICh0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcihjb2wgPT4gIWNvbC5maXhlZENvbHVtbik7XHJcblxyXG4gICAgcmV0dXJuIFsuLi5keW5hbWljQ29sdW1ucywgLi4udGhpcy5kZWxldGVkQ29sdW5zXTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuTWF4V2lkdGggPSBjb21wdXRlZCgoKSA9PiAod2lkdGhDb2w6IHN0cmluZykgPT4ge1xyXG4gICAgbGV0IHdpZHRoVGFibGUgPSB0aGlzLnRhYmxlQ2VsbCgpPy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICBsZXQgcGVyY2VudCA9IE51bWJlcih3aWR0aENvbC5yZXBsYWNlKCclJywgJycpKTtcclxuXHJcbiAgICBsZXQgd2lkdGhDYWxjID0gd2lkdGhUYWJsZSAqIHBlcmNlbnQgLyAxMDA7XHJcblxyXG4gICAgcmV0dXJuIGAke3dpZHRoQ2FsY31weGA7XHJcbiAgfSlcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwia3YtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgQGlmIChjb25maWcpIHtcclxuICA8cC10YWJsZVxyXG4gICAgI2R0XHJcbiAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIlxyXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgIFtyb3dzXT1cInJvd3MoKVwiXHJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXHJcbiAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9uc1wiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc31cIlxyXG4gICAgW3Jvd0hvdmVyXT1cInRydWVcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgW2xhenldPVwiY29uZmlnLmxhenlcIlxyXG4gICAgW2ZpcnN0XT1cImZpcnN0KClcIlxyXG4gICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIChvblNvcnQpPVwib25Tb3J0KCRldmVudClcIlxyXG4gICAgKG9uUGFnZSk9XCJvblBhZ2UoJGV2ZW50KVwiXHJcbiAgICByb3dHcm91cE1vZGU9XCJyb3dzcGFuXCJcclxuICAgIFtncm91cFJvd3NCeV09XCJjb25maWcuZmllbGRHcm91cFwiXHJcbiAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwid2lkdGhQYWdlKCkgPiA5NjAgPyB0cnVlIDogZmFsc2VcIlxyXG4gICAgW3BhZ2VMaW5rc109XCJ3aWR0aFBhZ2UoKSA+IDk2MCA/IDIgOiAxXCJcclxuICAgIFtyZXNwb25zaXZlXT1cInRydWVcIlxyXG4gICAgW3Jlc3BvbnNpdmVMYXlvdXRdPVwicmVzcG9uc2l2ZUxheW91dCA/ICdzdGFjaycgOiAnJ1wiXHJcbiAgICBbc2Nyb2xsYWJsZV09XCJpc1RhYmxlU2Nyb2xsYWJsZVwiXHJcbiAgICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXHJcbiAgICBbcm93VHJhY2tCeV09XCJyb3dUcmFja0J5XCJcclxuICA+XHJcbiAgICBAaWYgKGNvbmZpZz8uZW5hYmxlQ2F0aW9uKSB7XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBncmlkIGZvcm1ncmlkIHAtZmx1aWQgY29sLTEyIG0tMCBtYi0yXCJcclxuICAgICAgICBbc3R5bGUucGFkZGluZy5yZW1dPVwiMC4xXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgQGlmIChjb25maWcudGl0bGUpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCBteS0zXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9IEBpZiAoY29uZmlnLnN1YnRpdGxlKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcclxuICAgICAgICAgICAgd2lkdGhQYWdlKCkgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInXHJcbiAgICAgICAgICB9fSAgZ2FwLTEgcC0wXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBAaWYgKGNvbmZpZz8uZW5hYmxlRmlsdGVyKSB7XHJcbiAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2ggdGV4dC1zbVwiPjwvaT5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXHJcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ3aWR0aFBhZ2UoKSA+IDgwMFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcihkdCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICNpbnB1dEZpZWxkXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cIndpZHRoUGFnZSgpID4gODAwXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKGR0LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgI2lucHV0RmllbGRcclxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gY29sLTZcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgfSBAaWYoZmlsdGVyQ29sdW1uc0J0bikge1xyXG4gICAgICAgICAgPGRpdiAjYm90YW9GaWx0cm8+XHJcbiAgICAgICAgICAgIDxrdi1idXR0b24gXHJcbiAgICAgICAgICAgICAgaWQ9XCJib3Rhb0ZpbHRyb1wiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2FsaWduX3ZlcnRpY2FsX3RvcCdcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFicmlyTWVudUZpbHRybygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBzZXZlcml0eT1cInRlcnRpYXJ5XCJcclxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIk9jdWx0YXIvRXhpYmlyIGNvbHVuYXNcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9rdi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICNtZW51RmlsdHJvRGl2XHJcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXHJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTQgYmctZ3JheS0yMDAgbWVudS1jb2x1bW5zLWZpbHRyb1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwLWNhcmQgc3R5bGVDbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB0ZXh0LW1lZGl1bSB3LTE1cmVtIHAtMVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNGaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgY2hlY2tNZW51RmlsdHJvKGNvbCkgfX1cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICNmaWx0ZXJDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2wuaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiZGluYW1pY0NvbHVtblNldCgkZXZlbnQsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3AtY2FyZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb2wtMiBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yIHAtMFwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZTsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAoKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgKGdldE9yRXhlY3V0ZShhY3Rpb24udmlzaWJsZSwgc2VsZWN0ZWRJdGVtcykgPz8gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldE9yRXhlY3V0ZShhY3Rpb24udG9vbHRpcCwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5kaXNhYmxlZCwgc2VsZWN0ZWRJdGVtcykgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImdldE9yRXhlY3V0ZShhY3Rpb24uaWNvbiwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3Rpb24uc2V2ZXJpdHkgfHwgJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5sYWJlbCwgc2VsZWN0ZWRJdGVtcykgfHwgJydcIlxyXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhY3Rpb24uaXRlbXMgfHwgW11cIlxyXG4gICAgICAgICAgICAgIFtwb3B1cF09XCJhY3Rpb24uaXRlbXMgJiYgYWN0aW9uLml0ZW1zLmxlbmd0aCA+IDAgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiAgIGxldC1jb2x1bW5zPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgQGlmIChjb25maWcuZW5hYmxlU2VsZWN0KSB7XHJcbiAgICAgICAgPHRoPlxyXG4gICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveFxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRIZWFkZXJDaGVja2JveFwiXHJcbiAgICAgICAgICA+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICB9IEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8dGhcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZFwiPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlKSB7XHJcbiAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIiBjbGFzcz1cInBiLTFcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIH0gQGlmIChjb2wuaGVhZGVyVG9vbHRpcCkge1xyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICA+aW5mbzwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfSBAaWYgKGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICBwVGVtcGxhdGU9XCJib2R5XCJcclxuICAgICAgbGV0LXJvd0RhdGFcclxuICAgICAgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcclxuICAgICAgbGV0LXJvd2dyb3VwPVwicm93Z3JvdXBcIlxyXG4gICAgICBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIlxyXG4gICAgICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXHJcbiAgICA+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQsXHJcbiAgICAgICAgICBsYXN0OiByb3dJbmRleCA9PT0gZGF0YVNvdXJjZS5sZW5ndGggLSAxXHJcbiAgICAgICAgfVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ci10ZCB7eyBpc0Rpc2FibGVkUm93KHJvd0RhdGEpID8gJ2Rpc2FibGVkLXJvdycgOiAnJyB9fVwiXHJcbiAgICAgID5cclxuICAgICAgICBAaWYgKGNvbmZpZy5lbmFibGVTZWxlY3QpIHtcclxuICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogOHB4ICFpbXBvcnRhbnRcIj5cclxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIH0gQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICBAaWYgKHJvd2dyb3VwICYmICFjb2wudGVtcGxhdGUpIHtcclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgIGNvbC5zdHlsZUNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IGNvbC5zdHlsZUNsYXNzKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGUgdGV4dC14c1wiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgQGlmICghaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbCkgJiZcclxuICAgICAgICAgICAgICAhaXNFbXB0eURhdGFTb3VyY2UoKSkge1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIHt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIH19IHRleHQteHMge3sgZWxsaXBzaXNUZXh0KCkgJiYgJ2VsbGlwc2lzLXRleHQnIH19XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImVsbGlwc2lzVGV4dCgpICYmIHJldHVybk1heFdpZHRoKCkoY29sLndpZHRoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIEBpZiAoaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14c1wiXHJcbiAgICAgICAgICAgICAgICAgID57eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTYuOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjguOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzMwcHgnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgQGlmIChpc0ltYWdlRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBpZiAoY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIEBpZiAoIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgZm9udC1zZW1pYm9sZFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICB9IEBpZiAoaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjVweFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC5zd2l0Y2hEaXNhYmxlKXtcclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2wuc3dpdGNoRGlzYWJsZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9IEBpZihpc0VtcHR5RGF0YVNvdXJjZSgpICYmIHRoaXMuaXNMb2FkaW5nU2tlbGV0b24oKSkge1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIEBpZighaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXgge3tcclxuICAgICAgICAgICAgICAgICAgICBjb2wuY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJ3aWR0aFJhbmRvbSgpKGNvbCwgcm93SW5kZXgpICsgJyUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNi44cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyOC44cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMzBweCdcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIH0gQGlmICghcm93Z3JvdXAgJiYgIWNvbC5ncm91cGVkICYmICFjb2wudGVtcGxhdGUpIHtcclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAjdGFibGVDZWxsXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGUge3tcclxuICAgICAgICAgICAgICBjb2wuc3R5bGVDbGFzc1xyXG4gICAgICAgICAgICAgICAgPyBjb2wuc3R5bGVDbGFzcyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgfX0gXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGUgdGV4dC14c1wiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgQGlmKCFpc0VtcHR5RGF0YVNvdXJjZSgpKSB7XHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgJyArXHJcbiAgICAgICAgICAgICAgICAoY29sPy5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJylcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJlbGxpcHNpc1RleHQoKSAmJiByZXR1cm5NYXhXaWR0aCgpKGNvbC53aWR0aClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGFnXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcgJiZcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50YWdDb2xvcihyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICB9IEBpZiAoIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpKXtcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMge3sgZWxsaXBzaXNUZXh0KCkgJiYgJ2VsbGlwc2lzLXRleHQnIH19XCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGNvbC5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9IEBpZiAoaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14c1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAaWYgKGlzSW1hZ2VGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbkZpZWxkKSB7XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgQGlmICghY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyBmb250LXNlbWlib2xkXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgICAgJyBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAyNXB4XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBAaWYoY29sLnN3aXRjaERpc2FibGUpe1xyXG4gICAgICAgICAgICAgICAgPGt2LXN3aXRjaFxyXG4gICAgICAgICAgICAgICAgICAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbC5zd2l0Y2hEaXNhYmxlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPGt2LXN3aXRjaFxyXG4gICAgICAgICAgICAgICAgICAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIEBpZihpc0VtcHR5RGF0YVNvdXJjZSgpICYmIHRoaXMuaXNMb2FkaW5nU2tlbGV0b24oKSkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgQGlmKCFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XHJcbiAgICAgICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIj5cclxuICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTYuOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMzBweCdcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgfSBAaWYgKGNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGUge3tcclxuICAgICAgICAgICAgICBjb2wuc3R5bGVDbGFzc1xyXG4gICAgICAgICAgICAgICAgPyBjb2wuc3R5bGVDbGFzcyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgfX0gXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZSB0ZXh0LXhzXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZiAoZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpKSB7XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICcganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLnRvb2x0aXBUYWcgJiYgY29sLnRvb2x0aXBUYWcocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgIH0gQGlmKCFpc0VtcHR5RGF0YVNvdXJjZSgpKSB7XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XHJcbiAgICAgICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIlxyXG4gICAgICAgICAgICA+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICB9IH1cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgfSBAaWYgKGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmVcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4OyBwYWRkaW5nOiAwLjFyZW07bWFyZ2luLXJpZ2h0OiAuNXJlbTtcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIG1vcmVfdmVydCAtLT5cclxuICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8cC10aWVyZWRNZW51XHJcbiAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW21vZGVsXT1cInRhYmxlQWN0aW9uc1tyb3dJbmRleCAtIGFjdGlvbnNPZmZzZXRdXCJcclxuICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0udG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGllcmVkTWVudT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBwVG9vbHRpcD1cInt7IHRhYmxlQWN0aW9uc1tyb3dJbmRleCAtIGFjdGlvbnNPZmZzZXRdWzBdPy50b29sdGlwIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+YTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIH1cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiIGxldC1jb2x1bW5zPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoICsgMlwiXHJcbiAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbWVkaXVtIG0tMCB0ZXh0LXhzXCI+TmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG88L3A+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRhYmxlPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bGlua1xyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zXCJcclxuLz5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDQ4LDQwMCwwLDBcIlxyXG4vPlxyXG4iXX0=