keevo-components 2.0.54 → 2.0.56

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 (655) hide show
  1. package/ng-package.json +14 -0
  2. package/package.json +27 -40
  3. package/src/assets/.gitkeep +0 -0
  4. package/src/index.ts +1 -0
  5. package/src/lib/api/base-components/base-component-button.ts +29 -0
  6. package/src/lib/api/base-components/base-component-chart.ts +118 -0
  7. package/src/lib/api/base-components/base-component-crud-form.ts +377 -0
  8. package/src/lib/api/base-components/base-component-crud-list.ts +129 -0
  9. package/src/lib/api/base-components/base-component-crud.ts +92 -0
  10. package/src/lib/api/base-components/base-component-dropdown-external.ts +29 -0
  11. package/src/lib/api/base-components/base-component-dropdown-new.ts +112 -0
  12. package/src/lib/api/base-components/base-component-dropdown.ts +257 -0
  13. package/src/lib/api/base-components/base-component-input.ts +121 -0
  14. package/src/lib/api/base-components/base-component-multi-select.ts +187 -0
  15. package/src/lib/api/base-components/base-component-table.ts +366 -0
  16. package/src/lib/api/base-components/base-component.ts +47 -0
  17. package/src/lib/api/components/chart/chart.config.ts +15 -0
  18. package/src/lib/api/components/chart/chart.model.ts +12 -0
  19. package/src/lib/api/components/chart/orchart.config.ts +51 -0
  20. package/src/lib/api/components/chart/orchartnode.ts +44 -0
  21. package/src/lib/api/components/dropdown/filtro.combo.ts +4 -0
  22. package/{lib/api/components/step/step.model.d.ts → src/lib/api/components/step/step.model.ts} +15 -13
  23. package/src/lib/api/components/stepper/kv-stepperpanel.ts +10 -0
  24. package/src/lib/api/components/table/action-item.ts +13 -0
  25. package/src/lib/api/components/table/kv-menuitem.ts +198 -0
  26. package/src/lib/api/components/table/table-dropdown-control.ts +6 -0
  27. package/src/lib/api/components/table/table.config.column.ts +38 -0
  28. package/src/lib/api/components/table/table.config.ts +37 -0
  29. package/src/lib/api/components/table/table.paginate.ts +7 -0
  30. package/{lib/api/components/table/tabledit.config.d.ts → src/lib/api/components/table/tabledit.config.ts} +9 -8
  31. package/src/lib/api/components/table/tableedit.config.column.ts +11 -0
  32. package/src/lib/api/components/tree-table/tree-table-keys.ts +12 -0
  33. package/src/lib/api/components/tree-table/tree-table.config.ts +34 -0
  34. package/src/lib/api/directives/directives.module.ts +19 -0
  35. package/src/lib/api/directives/drag/drag.directive.ts +40 -0
  36. package/src/lib/api/directives/stepper/dynamicinput.directive.ts +23 -0
  37. package/src/lib/api/directives/template/template.directive.ts +15 -0
  38. package/src/lib/api/helpers/component-providers.ts +16 -0
  39. package/src/lib/api/helpers/keevo-validators.ts +174 -0
  40. package/src/lib/api/helpers/severity-color.ts +77 -0
  41. package/src/lib/api/helpers/translate-primeng.ts +25 -0
  42. package/src/lib/api/modules/primeng.module.ts +144 -0
  43. package/src/lib/api/pipes/capitalize.pipe.ts +47 -0
  44. package/src/lib/api/pipes/cpfcnpj.pipe.ts +21 -0
  45. package/src/lib/api/pipes/mask.pipe.ts +24 -0
  46. package/src/lib/api/pipes/pipes.module.ts +26 -0
  47. package/src/lib/api/pipes/telefone.pipe.ts +38 -0
  48. package/src/lib/api/services/base.api.service.ts +115 -0
  49. package/src/lib/api/services/breadcrumbs.service.ts +71 -0
  50. package/src/lib/api/services/chat.service.ts +39 -0
  51. package/src/lib/api/services/component.service.ts +44 -0
  52. package/src/lib/api/services/docs.service.ts +129 -0
  53. package/src/lib/api/services/form.service.ts +139 -0
  54. package/src/lib/api/services/image.cutter.service.ts +291 -0
  55. package/src/lib/api/services/imagens.service.ts +28 -0
  56. package/src/lib/api/services/notification.service.ts +88 -0
  57. package/src/lib/api/services/object.service.ts +33 -0
  58. package/src/lib/api/services/orgchart.service.ts +77 -0
  59. package/src/lib/api/types/breadcrumb.model.ts +5 -0
  60. package/src/lib/api/types/severity.ts +3 -0
  61. package/src/lib/api/types/stimulsoft.reports.d.ts +67463 -0
  62. package/src/lib/components/keevo-components.module.ts +100 -0
  63. package/src/lib/components/kv-avatar/kv-avatar.component.html +34 -0
  64. package/src/lib/components/kv-avatar/kv-avatar.component.scss +114 -0
  65. package/src/lib/components/kv-avatar/kv-avatar.component.spec.ts +23 -0
  66. package/src/lib/components/kv-avatar/kv-avatar.component.ts +154 -0
  67. package/src/lib/components/kv-avatar/kv-avatar.module.ts +32 -0
  68. package/src/lib/components/kv-button/kv-button.component.html +24 -0
  69. package/src/lib/components/kv-button/kv-button.component.spec.ts +23 -0
  70. package/src/lib/components/kv-button/kv-button.component.ts +54 -0
  71. package/src/lib/components/kv-button/kv-button.module.ts +20 -0
  72. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.html +14 -0
  73. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.scss +6 -0
  74. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.ts +25 -0
  75. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.html +13 -0
  76. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.scss +33 -0
  77. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.ts +41 -0
  78. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.html +12 -0
  79. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.scss +18 -0
  80. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.ts +14 -0
  81. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.html +11 -0
  82. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.scss +17 -0
  83. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.ts +14 -0
  84. package/src/lib/components/kv-buttons/kv-button.module.ts +26 -0
  85. package/src/lib/components/kv-card-selection/kv-card-selection.component.html +63 -0
  86. package/src/lib/components/kv-card-selection/kv-card-selection.component.scss +54 -0
  87. package/src/lib/components/kv-card-selection/kv-card-selection.component.spec.ts +23 -0
  88. package/src/lib/components/kv-card-selection/kv-card-selection.component.ts +73 -0
  89. package/src/lib/components/kv-card-selection/kv-card-selection.module.ts +19 -0
  90. package/src/lib/components/kv-carousel/kv-carousel.component.html +26 -0
  91. package/src/lib/components/kv-carousel/kv-carousel.component.scss +47 -0
  92. package/src/lib/components/kv-carousel/kv-carousel.component.spec.ts +23 -0
  93. package/src/lib/components/kv-carousel/kv-carousel.component.ts +40 -0
  94. package/src/lib/components/kv-carousel/kv-carousel.module.ts +19 -0
  95. package/src/lib/components/kv-chart/kv-chart.component.html +38 -0
  96. package/src/lib/components/kv-chart/kv-chart.component.scss +0 -0
  97. package/src/lib/components/kv-chart/kv-chart.component.spec.ts +28 -0
  98. package/src/lib/components/kv-chart/kv-chart.component.ts +174 -0
  99. package/src/lib/components/kv-chart/kv-chart.module.ts +21 -0
  100. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.html +9 -0
  101. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.scss +7 -0
  102. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.spec.ts +23 -0
  103. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.ts +32 -0
  104. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.ts +14 -0
  105. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.html +229 -0
  106. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.scss +153 -0
  107. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.spec.ts +23 -0
  108. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.ts +171 -0
  109. package/src/lib/components/kv-content-viewer/kv-content-viewer.module.ts +26 -0
  110. package/src/lib/components/kv-error/kv-error.component.html +3 -0
  111. package/src/lib/components/kv-error/kv-error.component.scss +5 -0
  112. package/src/lib/components/kv-error/kv-error.component.ts +27 -0
  113. package/src/lib/components/kv-error/kv-error.module.ts +26 -0
  114. package/src/lib/components/kv-file-upload/kv-file-upload.component.html +56 -0
  115. package/src/lib/components/kv-file-upload/kv-file-upload.component.scss +9 -0
  116. package/src/lib/components/kv-file-upload/kv-file-upload.component.spec.ts +23 -0
  117. package/src/lib/components/kv-file-upload/kv-file-upload.component.ts +164 -0
  118. package/src/lib/components/kv-file-upload/kv-file-upload.module.ts +10 -0
  119. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.html +16 -0
  120. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.scss +18 -0
  121. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.ts +42 -0
  122. package/src/lib/components/kv-file-viewer/kv-file-viewer.module.ts +14 -0
  123. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.html +34 -0
  124. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.scss +17 -0
  125. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.ts +80 -0
  126. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.ts +15 -0
  127. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.html +103 -0
  128. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.scss +153 -0
  129. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.spec.ts +23 -0
  130. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.ts +73 -0
  131. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.module.ts +18 -0
  132. package/src/lib/components/kv-filter-card/kv-filter-card.component.html +12 -0
  133. package/src/lib/components/kv-filter-card/kv-filter-card.component.scss +76 -0
  134. package/src/lib/components/kv-filter-card/kv-filter-card.component.spec.ts +23 -0
  135. package/src/lib/components/kv-filter-card/kv-filter-card.component.ts +18 -0
  136. package/src/lib/components/kv-filter-card/kv-filter-card.module.ts +23 -0
  137. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.html +25 -0
  138. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.scss +22 -0
  139. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.spec.ts +23 -0
  140. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.ts +20 -0
  141. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.ts +20 -0
  142. package/src/lib/components/kv-g-icon/kv-g-icon.component.html +1 -0
  143. package/src/lib/components/kv-g-icon/kv-g-icon.component.scss +0 -0
  144. package/src/lib/components/kv-g-icon/kv-g-icon.component.spec.ts +23 -0
  145. package/src/lib/components/kv-g-icon/kv-g-icon.component.ts +10 -0
  146. package/src/lib/components/kv-g-icon/kv-g-icon.module.ts +11 -0
  147. package/src/lib/components/kv-home-card/kv-home-card.component.html +35 -0
  148. package/src/lib/components/kv-home-card/kv-home-card.component.scss +5 -0
  149. package/src/lib/components/kv-home-card/kv-home-card.component.spec.ts +23 -0
  150. package/src/lib/components/kv-home-card/kv-home-card.component.ts +33 -0
  151. package/src/lib/components/kv-home-card/kv-home-card.module.ts +18 -0
  152. package/src/lib/components/kv-image-upload/kv-image-upload.component.html +64 -0
  153. package/src/lib/components/kv-image-upload/kv-image-upload.component.scss +0 -0
  154. package/src/lib/components/kv-image-upload/kv-image-upload.component.ts +153 -0
  155. package/src/lib/components/kv-image-upload/kv-image-upload.module.ts +10 -0
  156. package/src/lib/components/kv-inputs/kv-check/kv-check.component.html +12 -0
  157. package/src/lib/components/kv-inputs/kv-check/kv-check.component.scss +38 -0
  158. package/src/lib/components/kv-inputs/kv-check/kv-check.component.ts +32 -0
  159. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.html +87 -0
  160. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.ts +119 -0
  161. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.html +102 -0
  162. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.scss +45 -0
  163. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.ts +235 -0
  164. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.html +37 -0
  165. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.scss +23 -0
  166. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.ts +197 -0
  167. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.html +24 -0
  168. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.scss +0 -0
  169. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.ts +35 -0
  170. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.html +23 -0
  171. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.scss +0 -0
  172. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.ts +61 -0
  173. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.html +33 -0
  174. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.scss +5 -0
  175. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.ts +63 -0
  176. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.html +24 -0
  177. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.scss +0 -0
  178. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.ts +26 -0
  179. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.html +23 -0
  180. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.scss +18 -0
  181. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.ts +40 -0
  182. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.html +30 -0
  183. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.scss +26 -0
  184. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.ts +38 -0
  185. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.html +53 -0
  186. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.scss +41 -0
  187. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.spec.ts +23 -0
  188. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.ts +48 -0
  189. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.html +23 -0
  190. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.scss +0 -0
  191. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.ts +40 -0
  192. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.html +24 -0
  193. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.scss +0 -0
  194. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.ts +27 -0
  195. package/src/lib/components/kv-inputs/kv-inputs.module.ts +89 -0
  196. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.html +87 -0
  197. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.scss +62 -0
  198. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.ts +54 -0
  199. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.html +19 -0
  200. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.scss +22 -0
  201. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.ts +63 -0
  202. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.html +26 -0
  203. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.scss +5 -0
  204. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.spec.ts +21 -0
  205. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.ts +30 -0
  206. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.html +28 -0
  207. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.scss +41 -0
  208. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.spec.ts +23 -0
  209. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.ts +43 -0
  210. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.html +23 -0
  211. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.scss +35 -0
  212. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.ts +54 -0
  213. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.html +68 -0
  214. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.scss +86 -0
  215. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.ts +59 -0
  216. package/src/lib/components/kv-label/kv-label.component.html +3 -0
  217. package/src/lib/components/kv-label/kv-label.component.scss +15 -0
  218. package/src/lib/components/kv-label/kv-label.component.spec.ts +23 -0
  219. package/src/lib/components/kv-label/kv-label.component.ts +14 -0
  220. package/src/lib/components/kv-label/kv-label.module.ts +17 -0
  221. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.html +25 -0
  222. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.scss +19 -0
  223. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.spec.ts +28 -0
  224. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.ts +34 -0
  225. package/src/lib/components/kv-layout/kv-layout.module.ts +44 -0
  226. package/src/lib/components/kv-layout/layout/kv-layout.component.html +538 -0
  227. package/src/lib/components/kv-layout/layout/kv-layout.component.scss +265 -0
  228. package/src/lib/components/kv-layout/layout/kv-layout.component.spec.ts +23 -0
  229. package/src/lib/components/kv-layout/layout/kv-layout.component.ts +503 -0
  230. package/src/lib/components/kv-layout/top-icons/top-icons.component.html +26 -0
  231. package/src/lib/components/kv-layout/top-icons/top-icons.component.scss +71 -0
  232. package/src/lib/components/kv-layout/top-icons/top-icons.component.spec.ts +23 -0
  233. package/src/lib/components/kv-layout/top-icons/top-icons.component.ts +26 -0
  234. package/src/lib/components/kv-loader/kv-loader.component.html +1 -0
  235. package/src/lib/components/kv-loader/kv-loader.component.ts +11 -0
  236. package/src/lib/components/kv-loader/kv-loader.module.ts +17 -0
  237. package/src/lib/components/kv-loader/kv-loader.service.ts +29 -0
  238. package/src/lib/components/kv-login/kv-login.component.html +101 -0
  239. package/src/lib/components/kv-login/kv-login.component.scss +99 -0
  240. package/src/lib/components/kv-login/kv-login.component.spec.ts +23 -0
  241. package/src/lib/components/kv-login/kv-login.component.ts +97 -0
  242. package/src/lib/components/kv-login/kv-login.module.ts +33 -0
  243. package/src/lib/components/kv-modal/kv-modal.component.html +20 -0
  244. package/src/lib/components/kv-modal/kv-modal.component.scss +37 -0
  245. package/src/lib/components/kv-modal/kv-modal.component.spec.ts +21 -0
  246. package/src/lib/components/kv-modal/kv-modal.component.ts +111 -0
  247. package/src/lib/components/kv-modal/kv-modal.module.ts +12 -0
  248. package/src/lib/components/kv-orgchart/kv-orgchart.component.html +125 -0
  249. package/src/lib/components/kv-orgchart/kv-orgchart.component.scss +73 -0
  250. package/src/lib/components/kv-orgchart/kv-orgchart.component.ts +283 -0
  251. package/src/lib/components/kv-orgchart/kv-orgchart.module.ts +31 -0
  252. package/src/lib/components/kv-page-form/kv-page-form.component.html +94 -0
  253. package/src/lib/components/kv-page-form/kv-page-form.component.scss +74 -0
  254. package/src/lib/components/kv-page-form/kv-page-form.component.spec.ts +28 -0
  255. package/src/lib/components/kv-page-form/kv-page-form.component.ts +206 -0
  256. package/src/lib/components/kv-page-form/kv-page-form.module.ts +33 -0
  257. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.html +276 -0
  258. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.scss +85 -0
  259. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.spec.ts +23 -0
  260. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.ts +223 -0
  261. package/src/lib/components/kv-page-stepper/kv-page-stepper.module.ts +36 -0
  262. package/src/lib/components/kv-pick-list/kv-pick-list.component.html +32 -0
  263. package/src/lib/components/kv-pick-list/kv-pick-list.component.scss +57 -0
  264. package/src/lib/components/kv-pick-list/kv-pick-list.component.spec.ts +26 -0
  265. package/src/lib/components/kv-pick-list/kv-pick-list.component.ts +461 -0
  266. package/src/lib/components/kv-pick-list/kv-pick-list.module.ts +24 -0
  267. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.html +38 -0
  268. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.scss +128 -0
  269. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.spec.ts +21 -0
  270. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.ts +75 -0
  271. package/src/lib/components/kv-progress-bar/kv-progress-bar.module.ts +19 -0
  272. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.html +43 -0
  273. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.scss +130 -0
  274. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.spec.ts +23 -0
  275. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.ts +82 -0
  276. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.ts +18 -0
  277. package/src/lib/components/kv-report/kv-report.component.html +3 -0
  278. package/src/lib/components/kv-report/kv-report.component.scss +14 -0
  279. package/src/lib/components/kv-report/kv-report.component.spec.ts +28 -0
  280. package/src/lib/components/kv-report/kv-report.component.ts +44 -0
  281. package/src/lib/components/kv-report/kv-report.module.ts +18 -0
  282. package/src/lib/components/kv-stepper/kv-stepper.component.html +94 -0
  283. package/src/lib/components/kv-stepper/kv-stepper.component.scss +43 -0
  284. package/src/lib/components/kv-stepper/kv-stepper.component.spec.ts +23 -0
  285. package/src/lib/components/kv-stepper/kv-stepper.component.ts +73 -0
  286. package/src/lib/components/kv-stepper/kv-stepper.module.ts +27 -0
  287. package/src/lib/components/kv-steps/kv-steps.component.html +53 -0
  288. package/src/lib/components/kv-steps/kv-steps.component.scss +120 -0
  289. package/src/lib/components/kv-steps/kv-steps.component.ts +122 -0
  290. package/src/lib/components/kv-table/kv-table.component.html +652 -0
  291. package/src/lib/components/kv-table/kv-table.component.spec.ts +28 -0
  292. package/src/lib/components/kv-table/kv-table.component.ts +792 -0
  293. package/src/lib/components/kv-table/kv-table.module.ts +25 -0
  294. package/src/lib/components/kv-table-edit/kv-table-edit.component.html +772 -0
  295. package/src/lib/components/kv-table-edit/kv-table-edit.component.scss +731 -0
  296. package/src/lib/components/kv-table-edit/kv-table-edit.component.ts +388 -0
  297. package/src/lib/components/kv-table-edit/kv-table-edit.module.ts +31 -0
  298. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.html +634 -0
  299. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.scss +387 -0
  300. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.ts +546 -0
  301. package/src/lib/components/kv-table-expandable/kv-table-expandable.module.ts +22 -0
  302. package/src/lib/components/kv-tag/kv-tag.component.html +3 -0
  303. package/src/lib/components/kv-tag/kv-tag.component.scss +65 -0
  304. package/src/lib/components/kv-tag/kv-tag.component.spec.ts +23 -0
  305. package/src/lib/components/kv-tag/kv-tag.component.ts +16 -0
  306. package/src/lib/components/kv-tag/kv-tag.module.ts +18 -0
  307. package/src/lib/components/kv-tree-table/kv-tree-table.component.html +492 -0
  308. package/src/lib/components/kv-tree-table/kv-tree-table.component.scss +187 -0
  309. package/src/lib/components/kv-tree-table/kv-tree-table.component.spec.ts +21 -0
  310. package/src/lib/components/kv-tree-table/kv-tree-table.component.ts +355 -0
  311. package/src/lib/components/kv-tree-table/kv-tree-table.module.ts +23 -0
  312. package/src/lib/components/kv-tree-view/kv-tree-view.component.html +16 -0
  313. package/src/lib/components/kv-tree-view/kv-tree-view.component.scss +19 -0
  314. package/src/lib/components/kv-tree-view/kv-tree-view.component.spec.ts +23 -0
  315. package/src/lib/components/kv-tree-view/kv-tree-view.component.ts +73 -0
  316. package/src/lib/components/kv-tree-view/kv-tree-view.module.ts +19 -0
  317. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.html +22 -0
  318. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.scss +36 -0
  319. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.spec.ts +28 -0
  320. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.ts +41 -0
  321. package/src/lib/components/kv-workspace/kv-workspace.module.ts +45 -0
  322. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.html +20 -0
  323. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.scss +0 -0
  324. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.spec.ts +28 -0
  325. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.ts +18 -0
  326. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.html +35 -0
  327. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.scss +29 -0
  328. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.spec.ts +28 -0
  329. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.ts +98 -0
  330. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.html +63 -0
  331. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.scss +62 -0
  332. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.ts +91 -0
  333. package/{public-api.d.ts → src/public-api.ts} +319 -269
  334. package/tsconfig.lib.json +14 -0
  335. package/tsconfig.lib.prod.json +10 -0
  336. package/tsconfig.spec.json +14 -0
  337. package/esm2022/keevo-components.mjs +0 -5
  338. package/esm2022/lib/api/base-components/base-component-button.mjs +0 -39
  339. package/esm2022/lib/api/base-components/base-component-chart.mjs +0 -104
  340. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +0 -308
  341. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +0 -91
  342. package/esm2022/lib/api/base-components/base-component-crud.mjs +0 -80
  343. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +0 -31
  344. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +0 -238
  345. package/esm2022/lib/api/base-components/base-component-input.mjs +0 -101
  346. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +0 -174
  347. package/esm2022/lib/api/base-components/base-component-table.mjs +0 -354
  348. package/esm2022/lib/api/base-components/base-component.mjs +0 -51
  349. package/esm2022/lib/api/components/chart/chart.config.mjs +0 -2
  350. package/esm2022/lib/api/components/chart/chart.model.mjs +0 -2
  351. package/esm2022/lib/api/components/chart/orchart.config.mjs +0 -2
  352. package/esm2022/lib/api/components/chart/orchartnode.mjs +0 -2
  353. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +0 -2
  354. package/esm2022/lib/api/components/step/step.model.mjs +0 -2
  355. package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +0 -2
  356. package/esm2022/lib/api/components/table/action-item.mjs +0 -2
  357. package/esm2022/lib/api/components/table/kv-menuitem.mjs +0 -46
  358. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +0 -2
  359. package/esm2022/lib/api/components/table/table.config.column.mjs +0 -2
  360. package/esm2022/lib/api/components/table/table.config.mjs +0 -2
  361. package/esm2022/lib/api/components/table/table.paginate.mjs +0 -10
  362. package/esm2022/lib/api/components/table/tabledit.config.mjs +0 -2
  363. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +0 -2
  364. package/esm2022/lib/api/components/tree-table/tree-table-keys.mjs +0 -2
  365. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +0 -3
  366. package/esm2022/lib/api/directives/directives.module.mjs +0 -30
  367. package/esm2022/lib/api/directives/drag/drag.directive.mjs +0 -52
  368. package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +0 -31
  369. package/esm2022/lib/api/directives/template/template.directive.mjs +0 -24
  370. package/esm2022/lib/api/helpers/component-providers.mjs +0 -16
  371. package/esm2022/lib/api/helpers/keevo-validators.mjs +0 -144
  372. package/esm2022/lib/api/helpers/translate-primeng.mjs +0 -23
  373. package/esm2022/lib/api/modules/primeng.module.mjs +0 -283
  374. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +0 -47
  375. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +0 -25
  376. package/esm2022/lib/api/pipes/mask.pipe.mjs +0 -29
  377. package/esm2022/lib/api/pipes/pipes.module.mjs +0 -39
  378. package/esm2022/lib/api/pipes/telefone.pipe.mjs +0 -45
  379. package/esm2022/lib/api/services/base.api.service.mjs +0 -74
  380. package/esm2022/lib/api/services/breadcrumbs.service.mjs +0 -62
  381. package/esm2022/lib/api/services/chat.service.mjs +0 -37
  382. package/esm2022/lib/api/services/component.service.mjs +0 -37
  383. package/esm2022/lib/api/services/docs.service.mjs +0 -129
  384. package/esm2022/lib/api/services/form.service.mjs +0 -95
  385. package/esm2022/lib/api/services/image.cutter.service.mjs +0 -191
  386. package/esm2022/lib/api/services/imagens.service.mjs +0 -28
  387. package/esm2022/lib/api/services/notification.service.mjs +0 -69
  388. package/esm2022/lib/api/services/object.service.mjs +0 -39
  389. package/esm2022/lib/api/services/orgchart.service.mjs +0 -64
  390. package/esm2022/lib/api/types/breadcrumb.model.mjs +0 -2
  391. package/esm2022/lib/components/keevo-components.module.mjs +0 -221
  392. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +0 -133
  393. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +0 -55
  394. package/esm2022/lib/components/kv-button/kv-button.component.mjs +0 -51
  395. package/esm2022/lib/components/kv-button/kv-button.module.mjs +0 -28
  396. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +0 -25
  397. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +0 -39
  398. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +0 -17
  399. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +0 -17
  400. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +0 -39
  401. package/esm2022/lib/components/kv-card-selection/kv-card-selection.component.mjs +0 -60
  402. package/esm2022/lib/components/kv-card-selection/kv-card-selection.module.mjs +0 -31
  403. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +0 -34
  404. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +0 -28
  405. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +0 -166
  406. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +0 -32
  407. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.mjs +0 -32
  408. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.mjs +0 -22
  409. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.component.mjs +0 -185
  410. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.module.mjs +0 -44
  411. package/esm2022/lib/components/kv-error/kv-error.component.mjs +0 -26
  412. package/esm2022/lib/components/kv-error/kv-error.module.mjs +0 -35
  413. package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +0 -162
  414. package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +0 -18
  415. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +0 -46
  416. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +0 -20
  417. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.mjs +0 -68
  418. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.mjs +0 -24
  419. package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +0 -29
  420. package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +0 -34
  421. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +0 -26
  422. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +0 -28
  423. package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +0 -11
  424. package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +0 -19
  425. package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +0 -27
  426. package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +0 -32
  427. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +0 -135
  428. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +0 -18
  429. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +0 -29
  430. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +0 -102
  431. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +0 -181
  432. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +0 -168
  433. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +0 -30
  434. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +0 -59
  435. package/esm2022/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.mjs +0 -66
  436. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +0 -33
  437. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +0 -38
  438. package/esm2022/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.mjs +0 -42
  439. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +0 -50
  440. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +0 -43
  441. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +0 -24
  442. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +0 -141
  443. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +0 -60
  444. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +0 -60
  445. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +0 -46
  446. package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +0 -37
  447. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +0 -42
  448. package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +0 -58
  449. package/esm2022/lib/components/kv-label/kv-label.component.mjs +0 -15
  450. package/esm2022/lib/components/kv-label/kv-label.module.mjs +0 -24
  451. package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +0 -28
  452. package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +0 -72
  453. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +0 -433
  454. package/esm2022/lib/components/kv-layout/top-icons/top-icons.component.mjs +0 -15
  455. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +0 -16
  456. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +0 -28
  457. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +0 -29
  458. package/esm2022/lib/components/kv-login/kv-login.component.mjs +0 -62
  459. package/esm2022/lib/components/kv-login/kv-login.module.mjs +0 -47
  460. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +0 -98
  461. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +0 -20
  462. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +0 -225
  463. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +0 -59
  464. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +0 -215
  465. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +0 -41
  466. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +0 -205
  467. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +0 -51
  468. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +0 -386
  469. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +0 -39
  470. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +0 -58
  471. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +0 -28
  472. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.mjs +0 -62
  473. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.mjs +0 -28
  474. package/esm2022/lib/components/kv-report/kv-report.component.mjs +0 -44
  475. package/esm2022/lib/components/kv-report/kv-report.module.mjs +0 -24
  476. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +0 -74
  477. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +0 -47
  478. package/esm2022/lib/components/kv-steps/kv-steps.component.mjs +0 -105
  479. package/esm2022/lib/components/kv-table/kv-table.component.mjs +0 -673
  480. package/esm2022/lib/components/kv-table/kv-table.module.mjs +0 -40
  481. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +0 -323
  482. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +0 -45
  483. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +0 -516
  484. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +0 -40
  485. package/esm2022/lib/components/kv-tag/kv-tag.component.mjs +0 -18
  486. package/esm2022/lib/components/kv-tag/kv-tag.module.mjs +0 -24
  487. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +0 -331
  488. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +0 -39
  489. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +0 -70
  490. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +0 -28
  491. package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +0 -40
  492. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +0 -68
  493. package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +0 -22
  494. package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +0 -78
  495. package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +0 -87
  496. package/esm2022/public-api.mjs +0 -274
  497. package/fesm2022/keevo-components.mjs +0 -10714
  498. package/fesm2022/keevo-components.mjs.map +0 -1
  499. package/index.d.ts +0 -5
  500. package/lib/api/base-components/base-component-button.d.ts +0 -15
  501. package/lib/api/base-components/base-component-chart.d.ts +0 -40
  502. package/lib/api/base-components/base-component-crud-form.d.ts +0 -149
  503. package/lib/api/base-components/base-component-crud-list.d.ts +0 -70
  504. package/lib/api/base-components/base-component-crud.d.ts +0 -36
  505. package/lib/api/base-components/base-component-dropdown-external.d.ts +0 -15
  506. package/lib/api/base-components/base-component-dropdown.d.ts +0 -57
  507. package/lib/api/base-components/base-component-input.d.ts +0 -33
  508. package/lib/api/base-components/base-component-multi-select.d.ts +0 -40
  509. package/lib/api/base-components/base-component-table.d.ts +0 -88
  510. package/lib/api/base-components/base-component.d.ts +0 -22
  511. package/lib/api/components/chart/chart.config.d.ts +0 -14
  512. package/lib/api/components/chart/chart.model.d.ts +0 -12
  513. package/lib/api/components/chart/orchart.config.d.ts +0 -41
  514. package/lib/api/components/chart/orchartnode.d.ts +0 -34
  515. package/lib/api/components/dropdown/filtro.combo.d.ts +0 -4
  516. package/lib/api/components/stepper/kv-stepperpanel.d.ts +0 -9
  517. package/lib/api/components/table/action-item.d.ts +0 -13
  518. package/lib/api/components/table/kv-menuitem.d.ts +0 -152
  519. package/lib/api/components/table/table-dropdown-control.d.ts +0 -6
  520. package/lib/api/components/table/table.config.column.d.ts +0 -38
  521. package/lib/api/components/table/table.config.d.ts +0 -34
  522. package/lib/api/components/table/table.paginate.d.ts +0 -10
  523. package/lib/api/components/table/tableedit.config.column.d.ts +0 -10
  524. package/lib/api/components/tree-table/tree-table-keys.d.ts +0 -12
  525. package/lib/api/components/tree-table/tree-table.config.d.ts +0 -31
  526. package/lib/api/directives/directives.module.d.ts +0 -9
  527. package/lib/api/directives/drag/drag.directive.d.ts +0 -11
  528. package/lib/api/directives/stepper/dynamicinput.directive.d.ts +0 -15
  529. package/lib/api/directives/template/template.directive.d.ts +0 -11
  530. package/lib/api/helpers/component-providers.d.ts +0 -2
  531. package/lib/api/helpers/keevo-validators.d.ts +0 -18
  532. package/lib/api/helpers/translate-primeng.d.ts +0 -4
  533. package/lib/api/modules/primeng.module.d.ts +0 -69
  534. package/lib/api/pipes/capitalize.pipe.d.ts +0 -10
  535. package/lib/api/pipes/cpfcnpj.pipe.d.ts +0 -7
  536. package/lib/api/pipes/mask.pipe.d.ts +0 -7
  537. package/lib/api/pipes/pipes.module.d.ts +0 -11
  538. package/lib/api/pipes/telefone.pipe.d.ts +0 -7
  539. package/lib/api/services/base.api.service.d.ts +0 -25
  540. package/lib/api/services/breadcrumbs.service.d.ts +0 -16
  541. package/lib/api/services/chat.service.d.ts +0 -17
  542. package/lib/api/services/component.service.d.ts +0 -11
  543. package/lib/api/services/docs.service.d.ts +0 -12
  544. package/lib/api/services/form.service.d.ts +0 -31
  545. package/lib/api/services/image.cutter.service.d.ts +0 -15
  546. package/lib/api/services/imagens.service.d.ts +0 -10
  547. package/lib/api/services/notification.service.d.ts +0 -26
  548. package/lib/api/services/object.service.d.ts +0 -9
  549. package/lib/api/services/orgchart.service.d.ts +0 -20
  550. package/lib/api/types/breadcrumb.model.d.ts +0 -5
  551. package/lib/components/keevo-components.module.d.ts +0 -36
  552. package/lib/components/kv-avatar/kv-avatar.component.d.ts +0 -35
  553. package/lib/components/kv-avatar/kv-avatar.module.d.ts +0 -15
  554. package/lib/components/kv-button/kv-button.component.d.ts +0 -24
  555. package/lib/components/kv-button/kv-button.module.d.ts +0 -9
  556. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +0 -11
  557. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +0 -19
  558. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +0 -7
  559. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +0 -7
  560. package/lib/components/kv-buttons/kv-button.module.d.ts +0 -11
  561. package/lib/components/kv-card-selection/kv-card-selection.component.d.ts +0 -25
  562. package/lib/components/kv-card-selection/kv-card-selection.module.d.ts +0 -10
  563. package/lib/components/kv-carousel/kv-carousel.component.d.ts +0 -17
  564. package/lib/components/kv-carousel/kv-carousel.module.d.ts +0 -9
  565. package/lib/components/kv-chart/kv-chart.component.d.ts +0 -57
  566. package/lib/components/kv-chart/kv-chart.module.d.ts +0 -10
  567. package/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.d.ts +0 -12
  568. package/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.d.ts +0 -10
  569. package/lib/components/kv-content-viewer/kv-content-viewer.component.d.ts +0 -56
  570. package/lib/components/kv-content-viewer/kv-content-viewer.module.d.ts +0 -14
  571. package/lib/components/kv-error/kv-error.component.d.ts +0 -12
  572. package/lib/components/kv-error/kv-error.module.d.ts +0 -10
  573. package/lib/components/kv-file-upload/kv-file-upload.component.d.ts +0 -32
  574. package/lib/components/kv-file-upload/kv-file-upload.module.d.ts +0 -8
  575. package/lib/components/kv-file-viewer/kv-file-viewer.component.d.ts +0 -21
  576. package/lib/components/kv-file-viewer/kv-file-viewer.module.d.ts +0 -8
  577. package/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.d.ts +0 -24
  578. package/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.d.ts +0 -9
  579. package/lib/components/kv-filter-card/kv-filter-card.component.d.ts +0 -13
  580. package/lib/components/kv-filter-card/kv-filter-card.module.d.ts +0 -10
  581. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.d.ts +0 -10
  582. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.d.ts +0 -9
  583. package/lib/components/kv-g-icon/kv-g-icon.component.d.ts +0 -5
  584. package/lib/components/kv-g-icon/kv-g-icon.module.d.ts +0 -9
  585. package/lib/components/kv-home-card/kv-home-card.component.d.ts +0 -24
  586. package/lib/components/kv-home-card/kv-home-card.module.d.ts +0 -11
  587. package/lib/components/kv-image-upload/kv-image-upload.component.d.ts +0 -33
  588. package/lib/components/kv-image-upload/kv-image-upload.module.d.ts +0 -8
  589. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +0 -12
  590. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +0 -33
  591. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +0 -35
  592. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +0 -34
  593. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +0 -12
  594. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +0 -19
  595. package/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.d.ts +0 -21
  596. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +0 -13
  597. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +0 -11
  598. package/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.d.ts +0 -13
  599. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +0 -18
  600. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +0 -16
  601. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +0 -10
  602. package/lib/components/kv-inputs/kv-inputs.module.d.ts +0 -32
  603. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +0 -20
  604. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +0 -20
  605. package/lib/components/kv-inputs/kv-select-button/kv-select-button.component.d.ts +0 -19
  606. package/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.d.ts +0 -26
  607. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +0 -16
  608. package/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.d.ts +0 -25
  609. package/lib/components/kv-label/kv-label.component.d.ts +0 -7
  610. package/lib/components/kv-label/kv-label.module.d.ts +0 -8
  611. package/lib/components/kv-layout/dropdown-master/dropdown-master.component.d.ts +0 -12
  612. package/lib/components/kv-layout/kv-layout.module.d.ts +0 -18
  613. package/lib/components/kv-layout/layout/kv-layout.component.d.ts +0 -156
  614. package/lib/components/kv-layout/top-icons/top-icons.component.d.ts +0 -16
  615. package/lib/components/kv-loader/kv-loader.component.d.ts +0 -7
  616. package/lib/components/kv-loader/kv-loader.module.d.ts +0 -9
  617. package/lib/components/kv-loader/kv-loader.service.d.ts +0 -10
  618. package/lib/components/kv-login/kv-login.component.d.ts +0 -32
  619. package/lib/components/kv-login/kv-login.module.d.ts +0 -13
  620. package/lib/components/kv-modal/kv-modal.component.d.ts +0 -27
  621. package/lib/components/kv-modal/kv-modal.module.d.ts +0 -10
  622. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +0 -45
  623. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +0 -17
  624. package/lib/components/kv-page-form/kv-page-form.component.d.ts +0 -104
  625. package/lib/components/kv-page-form/kv-page-form.module.d.ts +0 -12
  626. package/lib/components/kv-page-stepper/kv-page-stepper.component.d.ts +0 -84
  627. package/lib/components/kv-page-stepper/kv-page-stepper.module.d.ts +0 -14
  628. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +0 -70
  629. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +0 -11
  630. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +0 -67
  631. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +0 -9
  632. package/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.d.ts +0 -71
  633. package/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.d.ts +0 -9
  634. package/lib/components/kv-report/kv-report.component.d.ts +0 -18
  635. package/lib/components/kv-report/kv-report.module.d.ts +0 -8
  636. package/lib/components/kv-stepper/kv-stepper.component.d.ts +0 -32
  637. package/lib/components/kv-stepper/kv-stepper.module.d.ts +0 -13
  638. package/lib/components/kv-steps/kv-steps.component.d.ts +0 -21
  639. package/lib/components/kv-table/kv-table.component.d.ts +0 -154
  640. package/lib/components/kv-table/kv-table.module.d.ts +0 -12
  641. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +0 -61
  642. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +0 -15
  643. package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +0 -119
  644. package/lib/components/kv-table-expandable/kv-table-expandable.module.d.ts +0 -13
  645. package/lib/components/kv-tag/kv-tag.component.d.ts +0 -7
  646. package/lib/components/kv-tag/kv-tag.module.d.ts +0 -8
  647. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +0 -86
  648. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +0 -11
  649. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +0 -21
  650. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +0 -9
  651. package/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.d.ts +0 -14
  652. package/lib/components/kv-workspace/kv-workspace.module.d.ts +0 -19
  653. package/lib/components/kv-workspace/logo/kv-workspace-logo.component.d.ts +0 -11
  654. package/lib/components/kv-workspace/master/kv-workspace-master.component.d.ts +0 -25
  655. package/lib/components/kv-workspace/workspace/kv-workspace.component.d.ts +0 -37
@@ -1,433 +0,0 @@
1
- import { Component, effect, EventEmitter, HostListener, input, Input, model, Output, signal, ViewChild, } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/forms";
4
- import * as i2 from "@angular/router";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "../../kv-button/kv-button.component";
7
- import * as i5 from "primeng/api";
8
- import * as i6 from "primeng/breadcrumb";
9
- import * as i7 from "primeng/tooltip";
10
- import * as i8 from "primeng/divider";
11
- import * as i9 from "primeng/overlaypanel";
12
- import * as i10 from "primeng/sidebar";
13
- import * as i11 from "../top-icons/top-icons.component";
14
- import * as i12 from "primeng/avatar";
15
- import * as i13 from "../dropdown-master/dropdown-master.component";
16
- import * as i14 from "../../../api/pipes/cpfcnpj.pipe";
17
- export class KvLayoutComponent {
18
- constructor(cdr, fb, router, activatedRoute) {
19
- this.cdr = cdr;
20
- this.fb = fb;
21
- this.router = router;
22
- this.activatedRoute = activatedRoute;
23
- this.apps = [];
24
- this.actions = [];
25
- this.useCard = true;
26
- /**
27
- * Indica quais menus são visíveis no topo.
28
- *
29
- * @type {Array<{id: number, numNotifications?: number, action?: (e: any) => void}>}
30
- *
31
- * Opções disponíveis:
32
- * - 2 - Kiara
33
- * - 3 - Notificações
34
- * - 4 - Tarefas
35
- * - 5 - Comunicador
36
- *
37
- * @property {number} id - identificador do menu.
38
- * @property {number} [numNotifications] - Número de notificações (opcional).
39
- * @property {(e: any) => void} [action] - Ação do clique, que retorna o evento do clique (optional).
40
- *
41
- */
42
- this.topMenusVisible = input([]);
43
- this.topMenuOptions = [
44
- { id: 1, visible: true, icon: 'person', tooltip: 'Meus Dados', numNotifications: 0, action: (e) => { this.meusDadosPanel.toggle(e); } },
45
- { id: 2, visible: false, icon: 'kiara', tooltip: 'Kiara', numNotifications: 0, action: () => { } },
46
- { id: 3, visible: false, icon: 'notifications', tooltip: 'Notificações', numNotifications: 0, action: () => { } },
47
- { id: 4, visible: false, icon: 'checklist', tooltip: 'Tarefas', numNotifications: 0, action: () => { } },
48
- { id: 5, visible: false, icon: 'chat', tooltip: 'Comunicador', numNotifications: 0, action: () => { } },
49
- ];
50
- this.topMenuOptionsReversed = false;
51
- this.processar_menus = effect(() => {
52
- const menusVisiveis = this.topMenusVisible();
53
- if (this.profileImage()) {
54
- this.topMenuOptions[0].img = this.profileImage();
55
- }
56
- //inverter o topMenuOptions
57
- if (!this.topMenuOptionsReversed) {
58
- this.topMenuOptions.reverse();
59
- this.topMenuOptionsReversed = true;
60
- }
61
- menusVisiveis.forEach((item) => {
62
- let menu = this.topMenuOptions.find((x) => x.id === item.id);
63
- if (menu) {
64
- menu.visible = true;
65
- if (item.action) {
66
- menu.action = item.action;
67
- }
68
- if (item.numNotifications != undefined && item.numNotifications != null) {
69
- menu.numNotifications = item.numNotifications;
70
- }
71
- if (item.boolNotifications != undefined && item.boolNotifications != null) {
72
- menu.boolNotifications = item.boolNotifications;
73
- }
74
- }
75
- });
76
- });
77
- this.profileImage = input('');
78
- this.breadCrumbItems = [];
79
- this.masters = [];
80
- this.menus = model([]);
81
- this.menuVisivel = signal(undefined);
82
- this.showMenuSistemas = signal(false);
83
- this.expandMenu = model(true);
84
- this.showButtonApps = true;
85
- this.showButtonUser = true;
86
- this.showExpandMenu = true;
87
- this.showDropdownLicenca = true;
88
- this.showMenu = true;
89
- this.showTrocaEmpresa = false;
90
- this.showBreadcrumb = true;
91
- this.userName = 'Usuário';
92
- this.userEmail = '';
93
- this.idsAplicativosMenuHide = [];
94
- this.useSelectionApps = true;
95
- this.showTrilhaConhecimento = false;
96
- this.isDisableSelectionEmpresa = false;
97
- this.accessKeePassEmit = new EventEmitter();
98
- this.changeEmpresaEmit = new EventEmitter();
99
- this.changeLicenseEmit = new EventEmitter();
100
- this.expandMenuEmit = new EventEmitter();
101
- this.logoutEmit = new EventEmitter();
102
- this.selectAppEmit = new EventEmitter();
103
- this.navigateToDefaultRouteEmit = new EventEmitter();
104
- this.downloadDocEmit = new EventEmitter();
105
- this.showVideoDocEmit = new EventEmitter();
106
- this.widthPage = signal(0);
107
- this.trilhaConhecimento = [
108
- {
109
- title: 'Cadastre as suas empresas',
110
- icon: 'business',
111
- subtitle: 'Saiba como cadastrar informações essenciais das empresas.',
112
- doc: 'https://work-assets.keevo.com.br/keevo-center/1+-+Cadastro+de+Empresas.pdf',
113
- video: 'https://work-assets.keevo.com.br/keevo-center/1+-+Cadastro+de+Empresas+no+Keevo+Center.mp4'
114
- },
115
- {
116
- title: 'Cadastro de Certificados e Procuração',
117
- icon: 'verified_user',
118
- subtitle: 'Veja como cadastrar um certificado e procuração necessários para as empresas.',
119
- doc: 'https://work-assets.keevo.com.br/keevo-center/2+-+Cadastro+de+Certificados+e+Procura%C3%A7%C3%B5es.pdf',
120
- video: 'https://work-assets.keevo.com.br/keevo-center/2+-+Cadastro+de+Certificados+e+Procura%C3%A7%C3%B5es.mp4',
121
- },
122
- {
123
- title: 'Configuração da Gestão de Licença',
124
- icon: 'fact_check',
125
- subtitle: 'Aprenda a vincular as licenças para cada empresa aqui.',
126
- doc: 'https://work-assets.keevo.com.br/keevo-center/3+-+Configura%C3%A7%C3%A3o+da+Gest%C3%A3o+de+Licen%C3%A7a.pdf',
127
- video: 'https://work-assets.keevo.com.br/keevo-center/3+-+Configura%C3%A7%C3%A3o+de+Gest%C3%A3o+de+Licen%C3%A7as.mp4',
128
- },
129
- {
130
- title: 'Cadastro de Usuário',
131
- icon: 'person_add',
132
- subtitle: 'Saiba como cadastrar usuários que terão acesso aos sistemas da Keevo.',
133
- doc: 'https://work-assets.keevo.com.br/keevo-center/4+-+Cadastro+de+Usu%C3%A1rio.pdf',
134
- video: 'https://work-assets.keevo.com.br/keevo-center/4+-+Cadastro+de+Usu%C3%A1rio.mp4',
135
- },
136
- {
137
- title: 'Papéis e Permissões',
138
- icon: 'manage_accounts',
139
- subtitle: 'Descubra como configurar papéis e permissões dos seus usuários registrados.',
140
- doc: 'https://work-assets.keevo.com.br/keevo-center/5+-+Pap%C3%A9is+e+Permiss%C3%B5es.pdf',
141
- video: 'https://work-assets.keevo.com.br/keevo-center/5+-+Pap%C3%A9is+e+Permiss%C3%B5es.mp4',
142
- },
143
- {
144
- title: 'Cadastro de Contadores',
145
- icon: 'badge',
146
- subtitle: 'Aprenda como cadastrar seus contadores.',
147
- doc: 'https://work-assets.keevo.com.br/keevo-center/6+-+Cadastro+de+Contadores.pdf',
148
- video: 'https://work-assets.keevo.com.br/keevo-center/6+-+Cadastro+de+Contadores.mp4',
149
- },
150
- ];
151
- this.menuSelecionado = signal(null);
152
- }
153
- ngOnInit() {
154
- this.formGroup = this.fb.group({
155
- idmaster: [this.selectedMaster, []],
156
- });
157
- // this.processarMenus();
158
- this.adjustWidthCard();
159
- this.verifyMenuBehavior();
160
- this.expandMenuEvent();
161
- }
162
- // processarMenus() {
163
- // }
164
- accessKeePass(event) {
165
- this.accessKeePassEmit.emit(event);
166
- }
167
- adjustHeightCard() {
168
- if (this.widthCard > 400) {
169
- if (this.widthPage() < 992 && this.showLicencas())
170
- return 145;
171
- if (this.breadCrumbItems.length > 0)
172
- return 95;
173
- else
174
- return 85;
175
- }
176
- return 125;
177
- }
178
- adjustWidthCard() {
179
- this.widthPage.set(window.innerWidth);
180
- this.heightCard = Number(document.getElementById('page-content')?.offsetHeight);
181
- if (this.showMenu)
182
- this.widthCard =
183
- Number(window.innerWidth) - (this.expandMenu() ? 333 : 93);
184
- else
185
- this.widthCard = Number(window.innerWidth);
186
- }
187
- callRoute(rota, expand) {
188
- if (!expand && !this.expandMenu() && this.showExpandMenu)
189
- this.expandMenu.update((currentValue) => !currentValue);
190
- if (this.widthPage() != 0 && this.widthPage() < 800 && this.expandMenu() && this.showExpandMenu)
191
- this.expandMenu.set(false);
192
- this.router.navigateByUrl(rota);
193
- }
194
- changeEmpresa(event) {
195
- this.changeEmpresaEmit.emit(event);
196
- }
197
- changeLicense(event) {
198
- this.changeLicenseEmit.emit(event);
199
- }
200
- verifyMenuBehavior() {
201
- if (this.widthPage() < 800)
202
- this.expandMenu.set(false);
203
- }
204
- expandMenuEvent() {
205
- this.expandMenuEmit.emit(this.expandMenu());
206
- }
207
- logout(event) {
208
- this.logoutEmit.emit(event);
209
- }
210
- menusPerApp() {
211
- if (this.router.url && this.menus() && this.menus().length > 0) {
212
- if (this.router.url === '/') {
213
- // this.navigateToFirstMenu();
214
- }
215
- else {
216
- const menuSelecionado = this.menus().find((menu) => menu.link && menu.link.includes(this.router.url.slice(1)));
217
- if (menuSelecionado) {
218
- this.navigateToMenu(menuSelecionado);
219
- }
220
- }
221
- }
222
- }
223
- nameEmpresa(nomeLicenca) {
224
- if (nomeLicenca) {
225
- if (nomeLicenca.length > 23)
226
- return nomeLicenca.substring(0, 23) + '...';
227
- else
228
- return nomeLicenca;
229
- }
230
- else
231
- return '';
232
- }
233
- navigateToFirstMenu() {
234
- const firstMenu = this.menus()[0];
235
- if (firstMenu.indmenupai) {
236
- const filhos = this.returnMenuChild(firstMenu.idmenu);
237
- if (filhos) {
238
- this.callRoute(filhos[0].link, true);
239
- }
240
- }
241
- else {
242
- this.callRoute(firstMenu.link, true);
243
- }
244
- }
245
- navigateToMenu(menu) {
246
- if (menu.menupai) {
247
- const filhos = this.returnMenuChild(menu.idmenu);
248
- if (filhos) {
249
- this.callRoute(filhos[0].link, true);
250
- }
251
- }
252
- else {
253
- this.callRoute(menu.link, true);
254
- }
255
- }
256
- ngOnChanges(changes) {
257
- const latestRequest = changes['menus'];
258
- if (latestRequest?.currentValue) {
259
- this.menusPerApp();
260
- }
261
- this.selecionarMenu();
262
- }
263
- onWindowResize() {
264
- this.adjustWidthCard();
265
- // this.verifyMenuBehavior();
266
- this.cdr.detectChanges();
267
- }
268
- isSelectedMenuPai(menu) {
269
- if (!this.expandMenu() && menu.indmenupai)
270
- return menu.idmenu === this.menuSelecionado()?.idmenupai;
271
- return false;
272
- }
273
- selecionarMenu() {
274
- const url = new URL(this.router.url, window.origin);
275
- const currentPath = url.pathname;
276
- const purePath = currentPath.match(/^[^;]*/i);
277
- const paths = purePath[0];
278
- this.menus.set(this.menus().map((menu) => {
279
- if (menu.link) {
280
- return {
281
- ...menu,
282
- bgColor: paths.includes(menu.link) ? 'rgb(41, 185, 45)' : '',
283
- textColor: paths.includes(menu.link) ? 'text-white' : '',
284
- };
285
- }
286
- return menu;
287
- }));
288
- const menu = this.menus().find((menu) => {
289
- return menu.link && paths.includes(menu.link);
290
- });
291
- this.menuSelecionado.set(menu);
292
- }
293
- returnMenuChild(idmenu) {
294
- return this.menus().filter((x) => x.idmenupai == idmenu);
295
- }
296
- selectApp(idaplicativo) {
297
- this.selectAppEmit.emit(idaplicativo);
298
- }
299
- showLicencas() {
300
- return this.showDropdownLicenca && (this.masters || []).length > 1;
301
- }
302
- toggleMenu() {
303
- this.expandMenu.update((currentValue) => !currentValue);
304
- this.expandMenuEvent();
305
- }
306
- navigateToDefaultRoute() {
307
- if (this.widthPage() < 800 && this.expandMenu())
308
- this.expandMenu.set(false);
309
- this.navigateToDefaultRouteEmit.emit();
310
- }
311
- get exibirNomes() {
312
- return !this.showLicencas() && (this.masterName || this.empresaName);
313
- }
314
- exibirMenuChild(event, index) {
315
- this.menuVisivel.set(index);
316
- let menuParent;
317
- let menuChild;
318
- if (index === -1) {
319
- menuParent = document.getElementById(`menu-sistemas-parent`);
320
- menuChild = document.getElementById(`menu-sistemas-child`);
321
- }
322
- else {
323
- menuParent = document.getElementById(`menu-parent-${index}`);
324
- menuChild = document.getElementById(`menu-child-${index}`);
325
- }
326
- if (menuParent) {
327
- const rect_parent = menuParent.getBoundingClientRect();
328
- let x = rect_parent.right - 10;
329
- let y = rect_parent.top - 5;
330
- if (menuChild) {
331
- const rect_child = menuChild.getBoundingClientRect();
332
- const viewportHeight = window.innerHeight;
333
- //Verifica se o menu filho vai utrapassar o final do viewport pra baixo
334
- if (rect_parent.bottom + rect_child.height > viewportHeight) {
335
- y = rect_parent.bottom - rect_child.height - 10;
336
- }
337
- // Verifica se o menu pai está muito em cima
338
- if (rect_parent.top <= 0) {
339
- y = rect_parent.bottom + 5;
340
- }
341
- menuChild.style.top = `${y}px`;
342
- menuChild.style.left = `${x}px`;
343
- }
344
- }
345
- }
346
- downloadDoc(trilha) {
347
- this.downloadDocEmit.emit(trilha);
348
- }
349
- showVideoDoc(trilha) {
350
- this.showVideoDocEmit.emit(trilha);
351
- }
352
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormBuilder }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
353
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvLayoutComponent, selector: "kv-layout", inputs: { apps: { classPropertyName: "apps", publicName: "apps", isSignal: false, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: false, isRequired: false, transformFunction: null }, useCard: { classPropertyName: "useCard", publicName: "useCard", isSignal: false, isRequired: false, transformFunction: null }, topMenusVisible: { classPropertyName: "topMenusVisible", publicName: "topMenusVisible", isSignal: true, isRequired: false, transformFunction: null }, profileImage: { classPropertyName: "profileImage", publicName: "profileImage", isSignal: true, isRequired: false, transformFunction: null }, breadCrumbItems: { classPropertyName: "breadCrumbItems", publicName: "breadCrumbItems", isSignal: false, isRequired: false, transformFunction: null }, masters: { classPropertyName: "masters", publicName: "masters", isSignal: false, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, expandMenu: { classPropertyName: "expandMenu", publicName: "expandMenu", isSignal: true, isRequired: false, transformFunction: null }, logoMenuExpand: { classPropertyName: "logoMenuExpand", publicName: "logoMenuExpand", isSignal: false, isRequired: false, transformFunction: null }, logoMenuHide: { classPropertyName: "logoMenuHide", publicName: "logoMenuHide", isSignal: false, isRequired: false, transformFunction: null }, selectedApp: { classPropertyName: "selectedApp", publicName: "selectedApp", isSignal: false, isRequired: false, transformFunction: null }, selectedEmpresa: { classPropertyName: "selectedEmpresa", publicName: "selectedEmpresa", isSignal: false, isRequired: false, transformFunction: null }, selectedMaster: { classPropertyName: "selectedMaster", publicName: "selectedMaster", isSignal: false, isRequired: false, transformFunction: null }, showButtonApps: { classPropertyName: "showButtonApps", publicName: "showButtonApps", isSignal: false, isRequired: false, transformFunction: null }, showButtonUser: { classPropertyName: "showButtonUser", publicName: "showButtonUser", isSignal: false, isRequired: false, transformFunction: null }, showExpandMenu: { classPropertyName: "showExpandMenu", publicName: "showExpandMenu", isSignal: false, isRequired: false, transformFunction: null }, showDropdownLicenca: { classPropertyName: "showDropdownLicenca", publicName: "showDropdownLicenca", isSignal: false, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: false, isRequired: false, transformFunction: null }, showTrocaEmpresa: { classPropertyName: "showTrocaEmpresa", publicName: "showTrocaEmpresa", isSignal: false, isRequired: false, transformFunction: null }, showBreadcrumb: { classPropertyName: "showBreadcrumb", publicName: "showBreadcrumb", isSignal: false, isRequired: false, transformFunction: null }, userName: { classPropertyName: "userName", publicName: "userName", isSignal: false, isRequired: false, transformFunction: null }, userEmail: { classPropertyName: "userEmail", publicName: "userEmail", isSignal: false, isRequired: false, transformFunction: null }, masterName: { classPropertyName: "masterName", publicName: "masterName", isSignal: false, isRequired: false, transformFunction: null }, empresaName: { classPropertyName: "empresaName", publicName: "empresaName", isSignal: false, isRequired: false, transformFunction: null }, idsAplicativosMenuHide: { classPropertyName: "idsAplicativosMenuHide", publicName: "idsAplicativosMenuHide", isSignal: false, isRequired: false, transformFunction: null }, useSelectionApps: { classPropertyName: "useSelectionApps", publicName: "useSelectionApps", isSignal: false, isRequired: false, transformFunction: null }, showTrilhaConhecimento: { classPropertyName: "showTrilhaConhecimento", publicName: "showTrilhaConhecimento", isSignal: false, isRequired: false, transformFunction: null }, isDisableSelectionEmpresa: { classPropertyName: "isDisableSelectionEmpresa", publicName: "isDisableSelectionEmpresa", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menus: "menusChange", expandMenu: "expandMenuChange", accessKeePassEmit: "accessKeePassEmit", changeEmpresaEmit: "changeEmpresaEmit", changeLicenseEmit: "changeLicenseEmit", expandMenuEmit: "expandMenuEmit", logoutEmit: "logoutEmit", selectAppEmit: "selectAppEmit", navigateToDefaultRouteEmit: "navigateToDefaultRouteEmit", downloadDocEmit: "downloadDocEmit", showVideoDocEmit: "showVideoDocEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 troca-empresa-container mb-3 py-2 {{\r\n !isDisableSelectionEmpresa && 'selectable-troca-empresa'\r\n }}\"\r\n [pTooltip]=\"isDisableSelectionEmpresa ? '' : 'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"!isDisableSelectionEmpresa && changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div class=\"flex flex-column w-full\">\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span class=\"text-xs font-semibold mr-2 color-system\">\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span class=\"text-xs mt-1 color-system\">{{\r\n this.selectedEmpresa.cpfcnpj | cpfCnpj\r\n }}</span>\r\n }\r\n </div>\r\n\r\n } @if(!isDisableSelectionEmpresa) {\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n <p-divider\r\n class=\"p-0 m-0\"\r\n [style.opacity]=\"1\"\r\n type=\"solid\"\r\n ></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n @if(useSelectionApps) {\r\n <!-- APPS E SAIR -->\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <!-- <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n \r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div> -->\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item-system troca-sistema-container py-2\"\r\n >\r\n <!-- <p-avatar\r\n icon=\"pi pi-th-large\"\r\n styleClass=\"mr-2\"\r\n size=\"normal\"\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), 1)',\r\n color: 'white'\r\n }\"\r\n /> -->\r\n <div\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), .2)',\r\n color: 'rgb(var(--kv-color-system), 1)',\r\n 'border-radius': '.5rem',\r\n padding: '.25rem'\r\n }\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <span class=\"material-symbols-outlined\">\r\n dashboard_customize\r\n </span>\r\n </div>\r\n\r\n @if(expandMenu()) {\r\n <div class=\"flex flex-column w-full\">\r\n <span class=\"text-sm font-semibold mr-2 color-system\">\r\n Meus Sistemas\r\n </span>\r\n </div>\r\n\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [style.color]=\"'rgb(var(--kv-color-system), 1)'\"\r\n >unfold_more</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-3 flex flex-column gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n showTrilhaConhecimento && 'justify-content-between'\r\n }} gap-2\"\r\n >\r\n <p-avatar\r\n icon=\"pi pi-user\"\r\n class=\"mr-2\"\r\n size=\"xlarge\"\r\n shape=\"circle\"\r\n [style]=\"{ width: '4.5rem', height: '4.5rem' }\"\r\n />\r\n\r\n <div\r\n class=\"flex flex-column {{\r\n showTrilhaConhecimento ? 'w-18rem' : 'w-12rem'\r\n }} justify-content-between\"\r\n [style]=\"{ height: '4.5rem' }\"\r\n >\r\n <span\r\n class=\"text-medium text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >Ol\u00E1, {{ userName.split(\" \")[0] }}!</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n size=\"small\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n class=\"w-12rem\"\r\n ></kv-button>\r\n </div>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-2\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n } @if(showTrilhaConhecimento) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column gap-3\">\r\n <span class=\"text-sm font-semibold text-gray-500\"\r\n >Trilha do Conhecimento</span\r\n >\r\n @for(trilha of trilhaConhecimento; track $index) {\r\n\r\n <div class=\"flex flex-row gap-2 max-w-25rem\">\r\n <div\r\n class=\"flex align-items-center justify-content-center border-round-md trilha-icon\"\r\n >\r\n <span class=\"material-symbols-outlined text-2xl\">{{\r\n trilha.icon\r\n }}</span>\r\n </div>\r\n <div class=\"flex flex-column justify-content-between w-20rem\">\r\n <span\r\n class=\"text-sm font-medium overflow-hidden white-space-nowrap text-overflow-ellipsis text-gray-500\"\r\n >{{ trilha.title }}</span\r\n >\r\n <span\r\n class=\"text-xs text-gray-400 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n [pTooltip]=\"trilha.subtitle\"\r\n [tooltipPosition]=\"'left'\"\r\n >{{ trilha.subtitle }}</span\r\n >\r\n <div class=\"flex flex-row gap-2\">\r\n <span\r\n class=\"material-symbols-outlined button-icon\"\r\n [pTooltip]=\"'Baixar Documento'\"\r\n (click)=\"downloadDoc(trilha)\"\r\n >download</span\r\n >\r\n <span\r\n class=\"material-symbols-outlined button-icon\"\r\n [pTooltip]=\"'Assistir V\u00EDdeo'\"\r\n (click)=\"showVideoDoc(trilha)\"\r\n >videocam</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-2\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n <label>Sair</label>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::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-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .p-checkbox-label{font-size:.875rem}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}.side-menu-item-system{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item-system:hover{background-color:rgb(var(--kv-color-system),.08);color:rgb(var(--kv-color-system),1)}.side-menu-item-system label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-empresa-container{font-size:.75rem;opacity:.8;border:1px solid #c1cfe1;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05);transition:all .2s ease-in-out;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.selectable-troca-empresa:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1);cursor:pointer;background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}.meus-sistemas{background-color:rgb(var(--kv-color-system),.05)}.button-icon{color:rgb(var(--kv-color-system),.75)}.button-icon:hover{color:rgb(var(--kv-color-system),.9);cursor:pointer}.button-icon:active{color:rgb(var(--kv-color-system),1)}.trilha-icon{width:3.5rem;height:3.5rem;background-color:rgb(var(--kv-color-system),.2);color:rgb(var(--kv-color-system),1)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup"], outputs: ["iconChange", "onClick"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i7.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: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.TopIconsComponent, selector: "kv-top-icons", inputs: ["topActions"] }, { kind: "component", type: i12.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: i13.DropdownMasterComponent, selector: "dropdown-master", inputs: ["formControlName", "masters"] }, { kind: "pipe", type: i14.CpfCnpjPipe, name: "cpfCnpj" }] }); }
354
- }
355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvLayoutComponent, decorators: [{
356
- type: Component,
357
- args: [{ selector: 'kv-layout', template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 troca-empresa-container mb-3 py-2 {{\r\n !isDisableSelectionEmpresa && 'selectable-troca-empresa'\r\n }}\"\r\n [pTooltip]=\"isDisableSelectionEmpresa ? '' : 'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"!isDisableSelectionEmpresa && changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div class=\"flex flex-column w-full\">\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span class=\"text-xs font-semibold mr-2 color-system\">\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span class=\"text-xs mt-1 color-system\">{{\r\n this.selectedEmpresa.cpfcnpj | cpfCnpj\r\n }}</span>\r\n }\r\n </div>\r\n\r\n } @if(!isDisableSelectionEmpresa) {\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n <p-divider\r\n class=\"p-0 m-0\"\r\n [style.opacity]=\"1\"\r\n type=\"solid\"\r\n ></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n @if(useSelectionApps) {\r\n <!-- APPS E SAIR -->\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <!-- <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n \r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div> -->\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item-system troca-sistema-container py-2\"\r\n >\r\n <!-- <p-avatar\r\n icon=\"pi pi-th-large\"\r\n styleClass=\"mr-2\"\r\n size=\"normal\"\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), 1)',\r\n color: 'white'\r\n }\"\r\n /> -->\r\n <div\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), .2)',\r\n color: 'rgb(var(--kv-color-system), 1)',\r\n 'border-radius': '.5rem',\r\n padding: '.25rem'\r\n }\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <span class=\"material-symbols-outlined\">\r\n dashboard_customize\r\n </span>\r\n </div>\r\n\r\n @if(expandMenu()) {\r\n <div class=\"flex flex-column w-full\">\r\n <span class=\"text-sm font-semibold mr-2 color-system\">\r\n Meus Sistemas\r\n </span>\r\n </div>\r\n\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [style.color]=\"'rgb(var(--kv-color-system), 1)'\"\r\n >unfold_more</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-3 flex flex-column gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n showTrilhaConhecimento && 'justify-content-between'\r\n }} gap-2\"\r\n >\r\n <p-avatar\r\n icon=\"pi pi-user\"\r\n class=\"mr-2\"\r\n size=\"xlarge\"\r\n shape=\"circle\"\r\n [style]=\"{ width: '4.5rem', height: '4.5rem' }\"\r\n />\r\n\r\n <div\r\n class=\"flex flex-column {{\r\n showTrilhaConhecimento ? 'w-18rem' : 'w-12rem'\r\n }} justify-content-between\"\r\n [style]=\"{ height: '4.5rem' }\"\r\n >\r\n <span\r\n class=\"text-medium text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >Ol\u00E1, {{ userName.split(\" \")[0] }}!</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n size=\"small\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n class=\"w-12rem\"\r\n ></kv-button>\r\n </div>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-2\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n } @if(showTrilhaConhecimento) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column gap-3\">\r\n <span class=\"text-sm font-semibold text-gray-500\"\r\n >Trilha do Conhecimento</span\r\n >\r\n @for(trilha of trilhaConhecimento; track $index) {\r\n\r\n <div class=\"flex flex-row gap-2 max-w-25rem\">\r\n <div\r\n class=\"flex align-items-center justify-content-center border-round-md trilha-icon\"\r\n >\r\n <span class=\"material-symbols-outlined text-2xl\">{{\r\n trilha.icon\r\n }}</span>\r\n </div>\r\n <div class=\"flex flex-column justify-content-between w-20rem\">\r\n <span\r\n class=\"text-sm font-medium overflow-hidden white-space-nowrap text-overflow-ellipsis text-gray-500\"\r\n >{{ trilha.title }}</span\r\n >\r\n <span\r\n class=\"text-xs text-gray-400 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n [pTooltip]=\"trilha.subtitle\"\r\n [tooltipPosition]=\"'left'\"\r\n >{{ trilha.subtitle }}</span\r\n >\r\n <div class=\"flex flex-row gap-2\">\r\n <span\r\n class=\"material-symbols-outlined button-icon\"\r\n [pTooltip]=\"'Baixar Documento'\"\r\n (click)=\"downloadDoc(trilha)\"\r\n >download</span\r\n >\r\n <span\r\n class=\"material-symbols-outlined button-icon\"\r\n [pTooltip]=\"'Assistir V\u00EDdeo'\"\r\n (click)=\"showVideoDoc(trilha)\"\r\n >videocam</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-2\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n <label>Sair</label>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::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-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .p-checkbox-label{font-size:.875rem}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}.side-menu-item-system{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item-system:hover{background-color:rgb(var(--kv-color-system),.08);color:rgb(var(--kv-color-system),1)}.side-menu-item-system label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-empresa-container{font-size:.75rem;opacity:.8;border:1px solid #c1cfe1;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05);transition:all .2s ease-in-out;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.selectable-troca-empresa:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1);cursor:pointer;background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}.meus-sistemas{background-color:rgb(var(--kv-color-system),.05)}.button-icon{color:rgb(var(--kv-color-system),.75)}.button-icon:hover{color:rgb(var(--kv-color-system),.9);cursor:pointer}.button-icon:active{color:rgb(var(--kv-color-system),1)}.trilha-icon{width:3.5rem;height:3.5rem;background-color:rgb(var(--kv-color-system),.2);color:rgb(var(--kv-color-system),1)}\n"] }]
358
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }], propDecorators: { apps: [{
359
- type: Input
360
- }], actions: [{
361
- type: Input
362
- }], useCard: [{
363
- type: Input
364
- }], breadCrumbItems: [{
365
- type: Input
366
- }], masters: [{
367
- type: Input
368
- }], logoMenuExpand: [{
369
- type: Input
370
- }], logoMenuHide: [{
371
- type: Input
372
- }], selectedApp: [{
373
- type: Input
374
- }], selectedEmpresa: [{
375
- type: Input
376
- }], selectedMaster: [{
377
- type: Input
378
- }], showButtonApps: [{
379
- type: Input
380
- }], showButtonUser: [{
381
- type: Input
382
- }], showExpandMenu: [{
383
- type: Input
384
- }], showDropdownLicenca: [{
385
- type: Input
386
- }], showMenu: [{
387
- type: Input
388
- }], showTrocaEmpresa: [{
389
- type: Input
390
- }], showBreadcrumb: [{
391
- type: Input
392
- }], userName: [{
393
- type: Input
394
- }], userEmail: [{
395
- type: Input
396
- }], masterName: [{
397
- type: Input
398
- }], empresaName: [{
399
- type: Input
400
- }], idsAplicativosMenuHide: [{
401
- type: Input
402
- }], useSelectionApps: [{
403
- type: Input
404
- }], showTrilhaConhecimento: [{
405
- type: Input
406
- }], isDisableSelectionEmpresa: [{
407
- type: Input
408
- }], accessKeePassEmit: [{
409
- type: Output
410
- }], changeEmpresaEmit: [{
411
- type: Output
412
- }], changeLicenseEmit: [{
413
- type: Output
414
- }], expandMenuEmit: [{
415
- type: Output
416
- }], logoutEmit: [{
417
- type: Output
418
- }], selectAppEmit: [{
419
- type: Output
420
- }], navigateToDefaultRouteEmit: [{
421
- type: Output
422
- }], downloadDocEmit: [{
423
- type: Output
424
- }], showVideoDocEmit: [{
425
- type: Output
426
- }], meusDadosPanel: [{
427
- type: ViewChild,
428
- args: ['meusDadosPanel']
429
- }], onWindowResize: [{
430
- type: HostListener,
431
- args: ['window:resize', ['$event']]
432
- }] } });
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ3ZCLE1BQU0sT0FBTyxpQkFBaUI7SUE4TDVCLFlBQ1UsR0FBc0IsRUFDdEIsRUFBZSxFQUNiLE1BQWMsRUFDZCxjQUE4QjtRQUhoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpNakMsU0FBSSxHQVVQLEVBQUUsQ0FBQztRQUVBLFlBQU8sR0FBMEQsRUFBRSxDQUFDO1FBRXBFLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFeEI7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBQ0gsb0JBQWUsR0FBRyxLQUFLLENBQXNHLEVBQUUsQ0FBQyxDQUFDO1FBRWpJLG1CQUFjLEdBQXNCO1lBQ2xDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0Is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QUEzQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUdzQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkF3TXBCLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBjb250ZW50Q2hpbGRyZW4sXHJcbiAgZWZmZWN0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRlLFxyXG4gIHN0YXRlLFxyXG4gIHN0eWxlLFxyXG4gIHRyYW5zaXRpb24sXHJcbiAgdHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgVG9wQWN0aW9uc01vZGVsIH0gZnJvbSAnLi4vdG9wLWljb25zL3RvcC1pY29ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0TWVudUl0ZW0ge1xyXG4gIGlkbWVudTogbnVtYmVyO1xyXG4gIGlkbWVudXBhaTogbnVtYmVyIHwgbnVsbDtcclxuICBpZGFwbGljYXRpdm86IG51bWJlcjtcclxuICBkZXNjcmljYW9tZW51OiBzdHJpbmc7XHJcbiAgbGluazogc3RyaW5nIHwgbnVsbDtcclxuICBpY29uZTogc3RyaW5nIHwgbnVsbDtcclxuICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgaW5kbWVudXBhaTogYm9vbGVhbjtcclxuICBsaXN0YWlkdmlzYW9tZW51OiBudW1iZXJbXTtcclxuICBiZ0NvbG9yPzogc3RyaW5nO1xyXG4gIHRleHRDb2xvcj86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWxheW91dC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgYXBwczoge1xyXG4gICAgaWRhcGxpY2F0aXZvOiBudW1iZXI7XHJcbiAgICBpZHNpc3RlbWE6IG51bWJlcjtcclxuICAgIG5vbWVhcGxpY2F0aXZvOiBzdHJpbmc7XHJcbiAgICBkZXNjcmljYW9hcGxpY2F0aXZvOiBzdHJpbmc7XHJcbiAgICByb3RhcGFkcmFvOiBzdHJpbmc7XHJcbiAgICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgICBpbmRwdWJsaWNhY2FvZ3JhZGF0aXZhOiBib29sZWFuO1xyXG4gICAgaW5kZXhpZ2VlbXByZXNhZW50cmFkYTogYm9vbGVhbjtcclxuICAgIHVybGljb25lPzogc3RyaW5nO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhY3Rpb25zOiB7IGljb246IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgYWN0aW9uOiAoKSA9PiB2b2lkIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSB1c2VDYXJkID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHF1YWlzIG1lbnVzIHPDo28gdmlzw612ZWlzIG5vIHRvcG8uXHJcbiAgICogXHJcbiAgICogQHR5cGUge0FycmF5PHtpZDogbnVtYmVyLCBudW1Ob3RpZmljYXRpb25zPzogbnVtYmVyLCBhY3Rpb24/OiAoZTogYW55KSA9PiB2b2lkfT59XHJcbiAgICogXHJcbiAgICogT3DDp8O1ZXMgZGlzcG9uw612ZWlzOlxyXG4gICAqIC0gMiAtIEtpYXJhIFxyXG4gICAqIC0gMyAtIE5vdGlmaWNhw6fDtWVzXHJcbiAgICogLSA0IC0gVGFyZWZhc1xyXG4gICAqIC0gNSAtIENvbXVuaWNhZG9yXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGlkIC0gaWRlbnRpZmljYWRvciBkbyBtZW51LlxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbnVtTm90aWZpY2F0aW9uc10gLSBOw7ptZXJvIGRlIG5vdGlmaWNhw6fDtWVzIChvcGNpb25hbCkuXHJcbiAgICogQHByb3BlcnR5IHsoZTogYW55KSA9PiB2b2lkfSBbYWN0aW9uXSAtIEHDp8OjbyBkbyBjbGlxdWUsIHF1ZSByZXRvcm5hIG8gZXZlbnRvIGRvIGNsaXF1ZSAob3B0aW9uYWwpLlxyXG4gICAqIFxyXG4gICAqLyBcclxuICB0b3BNZW51c1Zpc2libGUgPSBpbnB1dDx7IGlkOiBudW1iZXIsIG51bU5vdGlmaWNhdGlvbnM/OiBudW1iZXIsIGJvb2xOb3RpZmljYXRpb25zPzogYm9vbGVhbiwgYWN0aW9uPzogKGU6IGFueSkgPT4gdm9pZCB9W10+KFtdKTtcclxuXHJcbiAgdG9wTWVudU9wdGlvbnM6IFRvcEFjdGlvbnNNb2RlbFtdID0gW1xyXG4gICAgeyBpZDogMSwgdmlzaWJsZTogdHJ1ZSwgaWNvbjogJ3BlcnNvbicsIHRvb2x0aXA6ICdNZXVzIERhZG9zJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoZTogYW55KSA9PiB7IHRoaXMubWV1c0RhZG9zUGFuZWwudG9nZ2xlKGUpIH0gfSxcclxuICAgIHsgaWQ6IDIsIHZpc2libGU6IGZhbHNlLCBpY29uOiAna2lhcmEnLCB0b29sdGlwOiAnS2lhcmEnLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHsgfSB9LFxyXG4gICAgeyBpZDogMywgdmlzaWJsZTogZmFsc2UsIGljb246ICdub3RpZmljYXRpb25zJywgdG9vbHRpcDogJ05vdGlmaWNhw6fDtWVzJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoKSA9PiB7IH0gfSxcclxuICAgIHsgaWQ6IDQsIHZpc2libGU6IGZhbHNlLCBpY29uOiAnY2hlY2tsaXN0JywgdG9vbHRpcDogJ1RhcmVmYXMnLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHsgfSB9LFxyXG4gICAgeyBpZDogNSwgdmlzaWJsZTogZmFsc2UsIGljb246ICdjaGF0JywgdG9vbHRpcDogJ0NvbXVuaWNhZG9yJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoKSA9PiB7IH0gfSxcclxuICBdO1xyXG5cclxuICB0b3BNZW51T3B0aW9uc1JldmVyc2VkID0gZmFsc2U7XHJcblxyXG4gIHByb2Nlc3Nhcl9tZW51cyA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCBtZW51c1Zpc2l2ZWlzID0gdGhpcy50b3BNZW51c1Zpc2libGUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9maWxlSW1hZ2UoKSkge1xyXG4gICAgICB0aGlzLnRvcE1lbnVPcHRpb25zWzBdLmltZyA9IHRoaXMucHJvZmlsZUltYWdlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vaW52ZXJ0ZXIgbyB0b3BNZW51T3B0aW9uc1xyXG4gICAgaWYgKCF0aGlzLnRvcE1lbnVPcHRpb25zUmV2ZXJzZWQpIHtcclxuICAgICAgdGhpcy50b3BNZW51T3B0aW9ucy5yZXZlcnNlKCk7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnNSZXZlcnNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbWVudXNWaXNpdmVpcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IG1lbnUgPSB0aGlzLnRvcE1lbnVPcHRpb25zLmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICBpZiAobWVudSkge1xyXG4gICAgICAgIG1lbnUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7XHJcbiAgICAgICAgICBtZW51LmFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5udW1Ob3RpZmljYXRpb25zICE9IHVuZGVmaW5lZCAmJiBpdGVtLm51bU5vdGlmaWNhdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbWVudS5udW1Ob3RpZmljYXRpb25zID0gaXRlbS5udW1Ob3RpZmljYXRpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5ib29sTm90aWZpY2F0aW9ucyAhPSB1bmRlZmluZWQgJiYgaXRlbS5ib29sTm90aWZpY2F0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICBtZW51LmJvb2xOb3RpZmljYXRpb25zID0gaXRlbS5ib29sTm90aWZpY2F0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICBwcm9maWxlSW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgQElucHV0KCkgYnJlYWRDcnVtYkl0ZW1zOiB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgcm91dGVyTGluazogc3RyaW5nO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBtYXN0ZXJzOiB7XHJcbiAgICBpZG1hc3RlcjogbnVtYmVyO1xyXG4gICAgY3BmY25wajogc3RyaW5nO1xyXG4gICAgbm9tZTogc3RyaW5nO1xyXG4gICAgaWRtYXN0ZXJub21lOiBzdHJpbmc7XHJcbiAgfVtdID0gW107XHJcblxyXG4gIG1lbnVzID0gbW9kZWw8TGF5b3V0TWVudUl0ZW1bXT4oW10pO1xyXG4gIG1lbnVWaXNpdmVsID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBzaG93TWVudVNpc3RlbWFzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXhwYW5kTWVudSA9IG1vZGVsPGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBASW5wdXQoKSBsb2dvTWVudUV4cGFuZCE6IGFueTtcclxuICBASW5wdXQoKSBsb2dvTWVudUhpZGUhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQXBwITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRW1wcmVzYSE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZE1hc3RlciE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0J1dHRvbkFwcHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCdXR0b25Vc2VyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwYW5kTWVudTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Ryb3Bkb3duTGljZW5jYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd01lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dUcm9jYUVtcHJlc2E6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QnJlYWRjcnVtYjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdXNlck5hbWU6IHN0cmluZyA9ICdVc3XDoXJpbyc7XHJcbiAgQElucHV0KCkgdXNlckVtYWlsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXN0ZXJOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVtcHJlc2FOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkc0FwbGljYXRpdm9zTWVudUhpZGU6IG51bWJlcltdID0gW107XHJcbiAgQElucHV0KCkgdXNlU2VsZWN0aW9uQXBwcyA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1RyaWxoYUNvbmhlY2ltZW50byA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZVNlbGVjdGlvbkVtcHJlc2EgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGFjY2Vzc0tlZVBhc3NFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlRW1wcmVzYUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlTGljZW5zZUVtaXQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBleHBhbmRNZW51RW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBsb2dvdXRFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0QXBwRW1pdDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG5hdmlnYXRlVG9EZWZhdWx0Um91dGVFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIGRvd25sb2FkRG9jRW1pdDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNob3dWaWRlb0RvY0VtaXQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnbWV1c0RhZG9zUGFuZWwnKSBtZXVzRGFkb3NQYW5lbCE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgLy8gdG9wTWVudUFjdGlvbnMgPSBjb250ZW50Q2hpbGRyZW48VGVtcGxhdGVSZWY8YW55Pj4oJ3RvcE1lbnVBY3Rpb24nKTtcclxuXHJcbiAgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gIGhlaWdodENhcmQhOiBudW1iZXI7XHJcbiAgbW91c2VPdmVyRmlsaG9JbmRleDogYW55O1xyXG4gIG1vdXNlT3ZlckluZGV4OiBhbnk7XHJcbiAgd2lkdGhDYXJkITogbnVtYmVyO1xyXG5cclxuICB3aWR0aFBhZ2UgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHJcbiAgdHJpbGhhQ29uaGVjaW1lbnRvID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ0NhZGFzdHJlIGFzIHN1YXMgZW1wcmVzYXMnLFxyXG4gICAgICBpY29uOiAnYnVzaW5lc3MnLFxyXG4gICAgICBzdWJ0aXRsZTogJ1NhaWJhIGNvbW8gY2FkYXN0cmFyIGluZm9ybWHDp8O1ZXMgZXNzZW5jaWFpcyBkYXMgZW1wcmVzYXMuJyxcclxuICAgICAgZG9jOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzErLStDYWRhc3RybytkZStFbXByZXNhcy5wZGYnLFxyXG4gICAgICB2aWRlbzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci8xKy0rQ2FkYXN0cm8rZGUrRW1wcmVzYXMrbm8rS2Vldm8rQ2VudGVyLm1wNCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnQ2FkYXN0cm8gZGUgQ2VydGlmaWNhZG9zIGUgUHJvY3VyYcOnw6NvJyxcclxuICAgICAgaWNvbjogJ3ZlcmlmaWVkX3VzZXInLFxyXG4gICAgICBzdWJ0aXRsZTpcclxuICAgICAgICAnVmVqYSBjb21vIGNhZGFzdHJhciB1bSBjZXJ0aWZpY2FkbyBlIHByb2N1cmHDp8OjbyBuZWNlc3PDoXJpb3MgcGFyYSBhcyBlbXByZXNhcy4nLFxyXG4gICAgICBkb2M6ICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9rZWV2by1jZW50ZXIvMistK0NhZGFzdHJvK2RlK0NlcnRpZmljYWRvcytlK1Byb2N1cmElQzMlQTclQzMlQjVlcy5wZGYnLFxyXG4gICAgICB2aWRlbzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci8yKy0rQ2FkYXN0cm8rZGUrQ2VydGlmaWNhZG9zK2UrUHJvY3VyYSVDMyVBNyVDMyVCNWVzLm1wNCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ0NvbmZpZ3VyYcOnw6NvIGRhIEdlc3TDo28gZGUgTGljZW7Dp2EnLFxyXG4gICAgICBpY29uOiAnZmFjdF9jaGVjaycsXHJcbiAgICAgIHN1YnRpdGxlOiAnQXByZW5kYSBhIHZpbmN1bGFyIGFzIGxpY2Vuw6dhcyBwYXJhIGNhZGEgZW1wcmVzYSBhcXVpLicsXHJcbiAgICAgIGRvYzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci8zKy0rQ29uZmlndXJhJUMzJUE3JUMzJUEzbytkYStHZXN0JUMzJUEzbytkZStMaWNlbiVDMyVBN2EucGRmJyxcclxuICAgICAgdmlkZW86ICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9rZWV2by1jZW50ZXIvMystK0NvbmZpZ3VyYSVDMyVBNyVDMyVBM28rZGUrR2VzdCVDMyVBM28rZGUrTGljZW4lQzMlQTdhcy5tcDQnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdDYWRhc3RybyBkZSBVc3XDoXJpbycsXHJcbiAgICAgIGljb246ICdwZXJzb25fYWRkJyxcclxuICAgICAgc3VidGl0bGU6XHJcbiAgICAgICAgJ1NhaWJhIGNvbW8gY2FkYXN0cmFyIHVzdcOhcmlvcyBxdWUgdGVyw6NvIGFjZXNzbyBhb3Mgc2lzdGVtYXMgZGEgS2Vldm8uJyxcclxuICAgICAgZG9jOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzQrLStDYWRhc3RybytkZStVc3UlQzMlQTFyaW8ucGRmJyxcclxuICAgICAgdmlkZW86ICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9rZWV2by1jZW50ZXIvNCstK0NhZGFzdHJvK2RlK1VzdSVDMyVBMXJpby5tcDQnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQYXDDqWlzIGUgUGVybWlzc8O1ZXMnLFxyXG4gICAgICBpY29uOiAnbWFuYWdlX2FjY291bnRzJyxcclxuICAgICAgc3VidGl0bGU6XHJcbiAgICAgICAgJ0Rlc2N1YnJhIGNvbW8gY29uZmlndXJhciBwYXDDqWlzIGUgcGVybWlzc8O1ZXMgZG9zIHNldXMgdXN1w6FyaW9zIHJlZ2lzdHJhZG9zLicsXHJcbiAgICAgIGRvYzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci81Ky0rUGFwJUMzJUE5aXMrZStQZXJtaXNzJUMzJUI1ZXMucGRmJyxcclxuICAgICAgdmlkZW86ICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9rZWV2by1jZW50ZXIvNSstK1BhcCVDMyVBOWlzK2UrUGVybWlzcyVDMyVCNWVzLm1wNCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ0NhZGFzdHJvIGRlIENvbnRhZG9yZXMnLFxyXG4gICAgICBpY29uOiAnYmFkZ2UnLFxyXG4gICAgICBzdWJ0aXRsZTogJ0FwcmVuZGEgY29tbyBjYWRhc3RyYXIgc2V1cyBjb250YWRvcmVzLicsXHJcbiAgICAgIGRvYzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci82Ky0rQ2FkYXN0cm8rZGUrQ29udGFkb3Jlcy5wZGYnLFxyXG4gICAgICB2aWRlbzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci82Ky0rQ2FkYXN0cm8rZGUrQ29udGFkb3Jlcy5tcDQnLFxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgaWRtYXN0ZXI6IFt0aGlzLnNlbGVjdGVkTWFzdGVyLCBbXV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyB0aGlzLnByb2Nlc3Nhck1lbnVzKCk7XHJcbiAgICB0aGlzLmFkanVzdFdpZHRoQ2FyZCgpO1xyXG4gICAgdGhpcy52ZXJpZnlNZW51QmVoYXZpb3IoKTtcclxuICAgIHRoaXMuZXhwYW5kTWVudUV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBcclxuXHJcbiAgLy8gcHJvY2Vzc2FyTWVudXMoKSB7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgYWNjZXNzS2VlUGFzcyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmFjY2Vzc0tlZVBhc3NFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkanVzdEhlaWdodENhcmQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLndpZHRoQ2FyZCA+IDQwMCkge1xyXG4gICAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSA8IDk5MiAmJiB0aGlzLnNob3dMaWNlbmNhcygpKSByZXR1cm4gMTQ1O1xyXG5cclxuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCA+IDApIHJldHVybiA5NTtcclxuICAgICAgZWxzZSByZXR1cm4gODU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDEyNTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRqdXN0V2lkdGhDYXJkKCkge1xyXG4gICAgdGhpcy53aWR0aFBhZ2Uuc2V0KHdpbmRvdy5pbm5lcldpZHRoKTtcclxuXHJcbiAgICB0aGlzLmhlaWdodENhcmQgPSBOdW1iZXIoXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWNvbnRlbnQnKT8ub2Zmc2V0SGVpZ2h0XHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuc2hvd01lbnUpXHJcbiAgICAgIHRoaXMud2lkdGhDYXJkID1cclxuICAgICAgICBOdW1iZXIod2luZG93LmlubmVyV2lkdGgpIC0gKHRoaXMuZXhwYW5kTWVudSgpID8gMzMzIDogOTMpO1xyXG4gICAgZWxzZSB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsbFJvdXRlKHJvdGE6IGFueSwgZXhwYW5kPzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFleHBhbmQgJiYgIXRoaXMuZXhwYW5kTWVudSgpICYmIHRoaXMuc2hvd0V4cGFuZE1lbnUpXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS51cGRhdGUoKGN1cnJlbnRWYWx1ZTogYm9vbGVhbikgPT4gIWN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgIT0gMCAmJiB0aGlzLndpZHRoUGFnZSgpIDwgODAwICYmIHRoaXMuZXhwYW5kTWVudSgpICYmIHRoaXMuc2hvd0V4cGFuZE1lbnUpXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS5zZXQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm90YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlRW1wcmVzYShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNoYW5nZUVtcHJlc2FFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZUxpY2Vuc2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jaGFuZ2VMaWNlbnNlRW1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmVyaWZ5TWVudUJlaGF2aW9yKCkge1xyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA4MDApXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRNZW51RXZlbnQoKSB7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnVFbWl0LmVtaXQodGhpcy5leHBhbmRNZW51KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ291dChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmxvZ291dEVtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lbnVzUGVyQXBwKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAmJiB0aGlzLm1lbnVzKCkgJiYgdGhpcy5tZW51cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCA9PT0gJy8nKSB7XHJcbiAgICAgICAgLy8gdGhpcy5uYXZpZ2F0ZVRvRmlyc3RNZW51KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbWVudVNlbGVjaW9uYWRvID0gdGhpcy5tZW51cygpLmZpbmQoXHJcbiAgICAgICAgICAobWVudTogYW55KSA9PlxyXG4gICAgICAgICAgICBtZW51LmxpbmsgJiYgbWVudS5saW5rLmluY2x1ZGVzKHRoaXMucm91dGVyLnVybC5zbGljZSgxKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChtZW51U2VsZWNpb25hZG8pIHtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb01lbnUobWVudVNlbGVjaW9uYWRvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuYW1lRW1wcmVzYShub21lTGljZW5jYTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChub21lTGljZW5jYSkge1xyXG4gICAgICBpZiAobm9tZUxpY2VuY2EubGVuZ3RoID4gMjMpIHJldHVybiBub21lTGljZW5jYS5zdWJzdHJpbmcoMCwgMjMpICsgJy4uLic7XHJcbiAgICAgIGVsc2UgcmV0dXJuIG5vbWVMaWNlbmNhO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVUb0ZpcnN0TWVudSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0TWVudSA9IHRoaXMubWVudXMoKVswXTtcclxuICAgIGlmIChmaXJzdE1lbnUuaW5kbWVudXBhaSkge1xyXG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldHVybk1lbnVDaGlsZChmaXJzdE1lbnUuaWRtZW51KTtcclxuICAgICAgaWYgKGZpbGhvcykge1xyXG4gICAgICAgIHRoaXMuY2FsbFJvdXRlKGZpbGhvc1swXS5saW5rLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxsUm91dGUoZmlyc3RNZW51LmxpbmssIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvTWVudShtZW51OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChtZW51Lm1lbnVwYWkpIHtcclxuICAgICAgY29uc3QgZmlsaG9zID0gdGhpcy5yZXR1cm5NZW51Q2hpbGQobWVudS5pZG1lbnUpO1xyXG4gICAgICBpZiAoZmlsaG9zKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbGxSb3V0ZShtZW51LmxpbmssIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVudVNlbGVjaW9uYWRvID0gc2lnbmFsPGFueT4obnVsbCk7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxhdGVzdFJlcXVlc3QgPSBjaGFuZ2VzWydtZW51cyddO1xyXG4gICAgaWYgKGxhdGVzdFJlcXVlc3Q/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1lbnVzUGVyQXBwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY2lvbmFyTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RXaWR0aENhcmQoKTtcclxuICAgIC8vIHRoaXMudmVyaWZ5TWVudUJlaGF2aW9yKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkTWVudVBhaShtZW51OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5leHBhbmRNZW51KCkgJiYgbWVudS5pbmRtZW51cGFpKVxyXG4gICAgICByZXR1cm4gbWVudS5pZG1lbnUgPT09IHRoaXMubWVudVNlbGVjaW9uYWRvKCk/LmlkbWVudXBhaTtcclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyTWVudSgpIHtcclxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5yb3V0ZXIudXJsLCB3aW5kb3cub3JpZ2luKTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHVybC5wYXRobmFtZTtcclxuICAgIGNvbnN0IHB1cmVQYXRoID0gY3VycmVudFBhdGgubWF0Y2goL15bXjtdKi9pKTtcclxuXHJcbiAgICBjb25zdCBwYXRocyA9IHB1cmVQYXRoIVswXTtcclxuXHJcbiAgICB0aGlzLm1lbnVzLnNldChcclxuICAgICAgdGhpcy5tZW51cygpLm1hcCgobWVudSkgPT4ge1xyXG4gICAgICAgIGlmIChtZW51LmxpbmspIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLm1lbnUsXHJcbiAgICAgICAgICAgIGJnQ29sb3I6IHBhdGhzLmluY2x1ZGVzKG1lbnUubGluayEpID8gJ3JnYig0MSwgMTg1LCA0NSknIDogJycsXHJcbiAgICAgICAgICAgIHRleHRDb2xvcjogcGF0aHMuaW5jbHVkZXMobWVudS5saW5rISkgPyAndGV4dC13aGl0ZScgOiAnJyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZW51O1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLm1lbnVzKCkuZmluZCgobWVudTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBtZW51LmxpbmsgJiYgcGF0aHMuaW5jbHVkZXMobWVudS5saW5rISk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1lbnVTZWxlY2lvbmFkby5zZXQobWVudSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmV0dXJuTWVudUNoaWxkKGlkbWVudTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZW51cygpLmZpbHRlcigoeDogYW55KSA9PiB4LmlkbWVudXBhaSA9PSBpZG1lbnUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBcHAoaWRhcGxpY2F0aXZvOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0QXBwRW1pdC5lbWl0KGlkYXBsaWNhdGl2byk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0xpY2VuY2FzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0Ryb3Bkb3duTGljZW5jYSAmJiAodGhpcy5tYXN0ZXJzIHx8IFtdKS5sZW5ndGggPiAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZU1lbnUoKSB7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnUudXBkYXRlKChjdXJyZW50VmFsdWU6IGJvb2xlYW4pID0+ICFjdXJyZW50VmFsdWUpO1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9EZWZhdWx0Um91dGUoKSB7XHJcbiAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSA8IDgwMCAmJiB0aGlzLmV4cGFuZE1lbnUoKSlcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnNldChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlRW1pdC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXhpYmlyTm9tZXMoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuc2hvd0xpY2VuY2FzKCkgJiYgKHRoaXMubWFzdGVyTmFtZSB8fCB0aGlzLmVtcHJlc2FOYW1lKTtcclxuICB9XHJcblxyXG4gIGV4aWJpck1lbnVDaGlsZChldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1lbnVWaXNpdmVsLnNldChpbmRleCk7XHJcbiAgICBsZXQgbWVudVBhcmVudDtcclxuICAgIGxldCBtZW51Q2hpbGQ7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIG1lbnVQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1zaXN0ZW1hcy1wYXJlbnRgKTtcclxuICAgICAgbWVudUNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtc2lzdGVtYXMtY2hpbGRgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBtZW51UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtcGFyZW50LSR7aW5kZXh9YCk7XHJcbiAgICAgIG1lbnVDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtZW51LWNoaWxkLSR7aW5kZXh9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1lbnVQYXJlbnQpIHtcclxuICAgICAgY29uc3QgcmVjdF9wYXJlbnQgPSBtZW51UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBsZXQgeCA9IHJlY3RfcGFyZW50LnJpZ2h0IC0gMTA7XHJcbiAgICAgIGxldCB5ID0gcmVjdF9wYXJlbnQudG9wIC0gNTtcclxuXHJcbiAgICAgIGlmIChtZW51Q2hpbGQpIHtcclxuICAgICAgICBjb25zdCByZWN0X2NoaWxkID0gbWVudUNoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgICAvL1ZlcmlmaWNhIHNlIG8gbWVudSBmaWxobyB2YWkgdXRyYXBhc3NhciBvIGZpbmFsIGRvIHZpZXdwb3J0IHByYSBiYWl4b1xyXG4gICAgICAgIGlmIChyZWN0X3BhcmVudC5ib3R0b20gKyByZWN0X2NoaWxkLmhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0KSB7XHJcbiAgICAgICAgICB5ID0gcmVjdF9wYXJlbnQuYm90dG9tIC0gcmVjdF9jaGlsZC5oZWlnaHQgLSAxMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIG8gbWVudSBwYWkgZXN0w6EgbXVpdG8gZW0gY2ltYVxyXG4gICAgICAgIGlmIChyZWN0X3BhcmVudC50b3AgPD0gMCkge1xyXG4gICAgICAgICAgeSA9IHJlY3RfcGFyZW50LmJvdHRvbSArIDU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtZW51Q2hpbGQuc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgbWVudUNoaWxkLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWREb2ModHJpbGhhOiBhbnkpIHtcclxuICAgIHRoaXMuZG93bmxvYWREb2NFbWl0LmVtaXQodHJpbGhhKTtcclxuICB9XHJcblxyXG4gIHNob3dWaWRlb0RvYyh0cmlsaGE6IGFueSkge1xyXG4gICAgdGhpcy5zaG93VmlkZW9Eb2NFbWl0LmVtaXQodHJpbGhhKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZ1bGwtY29udGFpbmVyXCI+XHJcbiAgQGlmKHNob3dNZW51KSB7XHJcbiAgPHAtc2lkZWJhclxyXG4gICAgI3NpZGViYXJSZWZcclxuICAgIFt2aXNpYmxlXT1cInRydWVcIlxyXG4gICAgW3Nob3dDbG9zZUljb25dPVwiZmFsc2VcIlxyXG4gICAgW21vZGFsXT1cImZhbHNlXCJcclxuICAgIFtzdHlsZV09XCJ7IHdpZHRoOiBleHBhbmRNZW51KCkgPyAnMTdyZW0nIDogJzMuNjVyZW0nIH1cIlxyXG4gICAgc3R5bGVDbGFzcz1cInRyYW5zaXRpb24tYWxsXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGxlc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlbiBwLTJcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZSBmbGV4IGZsZXgtY29sdW1uIGdhcC0zIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIExPR08gLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdmbGV4LXJvdycgOiAnZmxleC1jb2x1bW4nXHJcbiAgICAgICAgICAgIH19IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKVxyXG4gICAgICAgICAgICAgICAgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nXHJcbiAgICAgICAgICAgICAgICA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICB9fSBwLTJcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgZXhwYW5kaWRvIC0tPlxyXG4gICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpICYmIGxvZ29NZW51RXhwYW5kKXtcclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgIGFsdD1cIkNhcmRcIlxyXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nb01lbnVFeHBhbmRcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgbWluaW1pemFkby0tPlxyXG4gICAgICAgICAgICBAaWYoIWV4cGFuZE1lbnUoKSAmJiBsb2dvTWVudUhpZGUpe1xyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvTWVudUhpZGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTFcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRvZ2dsZSBtZW51IC0tPlxyXG4gICAgICAgICAgICBAaWYoc2hvd0V4cGFuZE1lbnUpe1xyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzaWRlLW1lbnUtaXRlbVwiIChjbGljayk9XCJleHBhbmRNZW51LnNldCghZXhwYW5kTWVudSgpKVwiPm1lbnU8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICBAaWYoc2hvd1Ryb2NhRW1wcmVzYSl7XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgfX0gZ2FwLTIgdHJvY2EtZW1wcmVzYS1jb250YWluZXIgbWItMyBweS0yIHt7XHJcbiAgICAgICAgICAgICAgIWlzRGlzYWJsZVNlbGVjdGlvbkVtcHJlc2EgJiYgJ3NlbGVjdGFibGUtdHJvY2EtZW1wcmVzYSdcclxuICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiaXNEaXNhYmxlU2VsZWN0aW9uRW1wcmVzYSA/ICcnIDogJ1Ryb2NhciBkZSBlbXByZXNhJ1wiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhaXNEaXNhYmxlU2VsZWN0aW9uRW1wcmVzYSAmJiBjaGFuZ2VFbXByZXNhKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpICYmIHNlbGVjdGVkRW1wcmVzYSl7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIEBpZih0aGlzLnNlbGVjdGVkRW1wcmVzYS5yYXphb3NvY2lhbCl7XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgbXItMiBjb2xvci1zeXN0ZW1cIj5cclxuICAgICAgICAgICAgICAgIHt7IG5hbWVFbXByZXNhKHRoaXMuc2VsZWN0ZWRFbXByZXNhLnJhemFvc29jaWFsKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICB9IEBpZih0aGlzLnNlbGVjdGVkRW1wcmVzYS5jcGZjbnBqKXtcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgbXQtMSBjb2xvci1zeXN0ZW1cIj57e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVtcHJlc2EuY3BmY25waiB8IGNwZkNucGpcclxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgfSBAaWYoIWlzRGlzYWJsZVNlbGVjdGlvbkVtcHJlc2EpIHtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+c3dhcF9ob3Jpejwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBNRU5VUyAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXgtMSBsaXN0LW5vbmUgbS0wIG92ZXJmbG93LXktYXV0byBtYXgtaC1mdWxsIG1lbnVzLWNvbnRhaW5lclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSBtZW51cyAtLT5cclxuICAgICAgICAgIEBmb3IgKG1lbnUgb2YgbWVudXMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICBAaWYoIWlkc0FwbGljYXRpdm9zTWVudUhpZGUuaW5jbHVkZXMobWVudS5pZGFwbGljYXRpdm8pKXtcclxuICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgPCEtLSBtZW51IHF1ZSBuw6NvIHRlbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgQGlmKCAhbWVudS5pbmRtZW51cGFpICYmICghbWVudS5pZG1lbnVwYWkgfHwgbWVudS5pZG1lbnVwYWkgPT0gMCkpe1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKG1lbnUubGluaylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+e3tcclxuICAgICAgICAgICAgICAgIG1lbnUuaWNvbmUgfHwgXCJsZW5zX2JsdXJcIlxyXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgIDxsYWJlbD57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPCEtLSBtZW51IGNvbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgQGlmKG1lbnUuaW5kbWVudXBhaSl7XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtcGFyZW50XCJcclxuICAgICAgICAgICAgICBpZD1cIm1lbnUtcGFyZW50LXt7ICRpbmRleCB9fVwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZXhpYmlyTWVudUNoaWxkKCRldmVudCwgJGluZGV4KVwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibWVudVZpc2l2ZWwuc2V0KHVuZGVmaW5lZClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+e3tcclxuICAgICAgICAgICAgICAgICAgbWVudS5pY29uZSB8fCBcImxlbnNfYmx1clwiXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jaGV2cm9uX3JpZ2h0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtY2hpbGRzXCJcclxuICAgICAgICAgICAgICAgIGlkPVwibWVudS1jaGlsZC17eyAkaW5kZXggfX1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwibWVudVZpc2l2ZWwoKSA9PT0gJGluZGV4ID8gJzEnIDogJzAnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wb2ludGVyRXZlbnRzXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtZW51VmlzaXZlbCgpID09PSAkaW5kZXggPyAnYXV0bycgOiAnbm9uZSdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicC0wIG0tMCBmb250LWJvbGQgcHQtMiBweC0yIHRleHQteHNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBtZW51LmRlc2NyaWNhb21lbnUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cC1kaXZpZGVyXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0wIG0tMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic29saWRcIlxyXG4gICAgICAgICAgICAgICAgPjwvcC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2hpbGRzLWNvbnRlbnQgcC0wIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJldHVybk1lbnVDaGlsZChtZW51LmlkbWVudSk7IHRyYWNrICRpbmRleCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2lkZS1tZW51LWl0ZW0gcHktMiBweC0yIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUoaXRlbS5saW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRlc2NyaWNhb21lbnUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIH0gfVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYodXNlU2VsZWN0aW9uQXBwcykge1xyXG4gICAgICAgIDwhLS0gQVBQUyBFIFNBSVIgLS0+XHJcbiAgICAgICAgPHAtZGl2aWRlciBjbGFzcz1cInB4LTJcIiBbc3R5bGUub3BhY2l0eV09XCIxXCIgdHlwZT1cInNvbGlkXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LW5vbmUgbGlzdC1ub25lIG0tMCBvdmVyZmxvdy15LWF1dG8gbWF4LWgtZnVsbFwiPlxyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJtZW51LXNpc3RlbWFzLXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZXhpYmlyTWVudUNoaWxkKCRldmVudCwgLTEpXCJcclxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtZW51VmlzaXZlbC5zZXQodW5kZWZpbmVkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUoKSA/ICdTaXN0ZW1hcycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Z3JpZF92aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICAgIDxsYWJlbD5TaXN0ZW1hczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jaGV2cm9uX3JpZ2h0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtLXN5c3RlbSB0cm9jYS1zaXN0ZW1hLWNvbnRhaW5lciBweS0yXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxwLWF2YXRhclxyXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdGgtbGFyZ2VcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJub3JtYWxcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3JnYih2YXIoLS1rdi1jb2xvci1zeXN0ZW0pLCAxKScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZSdcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAvPiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdyZ2IodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgLjIpJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYih2YXIoLS1rdi1jb2xvci1zeXN0ZW0pLCAxKScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnLjVyZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcuMjVyZW0nXHJcbiAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRfY3VzdG9taXplXHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCBtci0yIGNvbG9yLXN5c3RlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE1ldXMgU2lzdGVtYXNcclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIidyZ2IodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgMSknXCJcclxuICAgICAgICAgICAgICAgICAgPnVuZm9sZF9tb3JlPC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1jaGlsZHNcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJtZW51LXNpc3RlbWFzLWNoaWxkXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIm1lbnVWaXNpdmVsKCkgPT09IC0xID8gJzEnIDogJzAnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wb2ludGVyRXZlbnRzXT1cIm1lbnVWaXNpdmVsKCkgPT09IC0xID8gJ2F1dG8nIDogJ25vbmUnXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInAtMCBtLTAgZm9udC1ib2xkIHB0LTIgcGwtMyB0ZXh0LXhzXCI+U2lzdGVtYXM8L3A+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGFwcHM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHNpZGUtbWVudS1pdGVtIHB5LTIgcGwtMyBwci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxSb3V0ZShpdGVtLnJvdGFwYWRyYW8pOyBzZWxlY3RBcHAoaXRlbS5pZGFwbGljYXRpdm8pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0udXJsaWNvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtIHctMnJlbSBib3JkZXItcm91bmQtbGdcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubm9tZWFwbGljYXRpdm8gfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPCEtLSA8bGk+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC17e1xyXG4gICAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206IDAuNzVyZW1cIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSgpID8gJ1NhaXInIDogJydcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIncmdiYSgyNTIsIDMsIDMsIDAuNiknXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9nb3V0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+ZXhpdF90b19hcHA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgPGxhYmVsPlNhaXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2xpPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3Atc2lkZWJhcj5cclxuICB9XHJcblxyXG4gIDwhLS0gU0XDh8ODTyBDT05URcOaRE8gIC0tPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwidy1hdXRvIGgtc2NyZWVuIHBhZ2UtY29udGVudCBvdmVyZmxvdy15LWhpZGRlbiBmbGV4IGZsZXgtY29sdW1uXCJcclxuICAgIGlkPVwicGFnZS1jb250ZW50XCJcclxuICAgIHN0eWxlPVwid2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnRcIlxyXG4gID5cclxuICAgIDwhLS0gVE9QTyAtLT5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXktMiBteC0zIG1iLTBcIlxyXG4gICAgPlxyXG4gICAgICBAaWYoIXNob3dNZW51KSB7XHJcbiAgICAgIDwhLS0gTG9nbyBob21lIC0tPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJsb2dvTWVudUV4cGFuZFwiIHdpZHRoPVwiMTUwXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8IS0tIEJyZWFkY3J1bWJzIC0tPlxyXG4gICAgICBAaWYoc2hvd0JyZWFkY3J1bWIpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbFwiPlxyXG4gICAgICAgIDxwLWJyZWFkY3J1bWJcclxuICAgICAgICAgICpuZ0lmPVwid2lkdGhDYXJkID4gNDAwXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9uZSBwLTAgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0ycmVtIGJnLXRyYW5zcGFyZW50XCJcclxuICAgICAgICAgIFttb2RlbF09XCJicmVhZENydW1iSXRlbXNcIlxyXG4gICAgICAgICAgKG9uSXRlbUNsaWNrKT1cImNhbGxSb3V0ZSgkZXZlbnQuaXRlbS5yb3V0ZXJMaW5rLCB0cnVlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIEBpZihicmVhZENydW1iSXRlbXMuaW5kZXhPZihpdGVtKSA8IGJyZWFkQ3J1bWJJdGVtcy5sZW5ndGggLSAxKXtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW5vcm1hbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLWJyZWFkY3J1bWI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPCEtLSBHSE9TVCBESVYgUEFSQSBPQ1BVQVIgRVNQQcOHTyBOTyBTUEFDRSBCRVRXRUVOIC0tPlxyXG4gICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICB9IH0gQGlmIChleGliaXJOb21lcykgeyBAaWYod2lkdGhDYXJkID49IDUxNykge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICBAaWYgKG1hc3Rlck5hbWUpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgc3lzdGVtLWNvbG9yXCI+e3sgbWFzdGVyTmFtZSB9fTwvc3Bhbj4gfSBAaWZcclxuICAgICAgICAoZW1wcmVzYU5hbWUpIHs8c3BhbiBjbGFzcz1cImVtcHJlc2EtbmFtZVwiXHJcbiAgICAgICAgICA+T3JnYW5pemHDp8Ojbzoge3sgZW1wcmVzYU5hbWUgfX08L3NwYW5cclxuICAgICAgICA+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gTmF2ZWdhw6fDo28gZGUgc2lzdGVtYXMgZSB1c3XDoXJpb3MgLS0+XHJcbiAgICAgICAgPCEtLSBAZm9yICh0b3BBY3Rpb24gb2YgdG9wTWVudUFjdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BBY3Rpb25cIiAvPlxyXG4gICAgICAgICAgICB9IC0tPlxyXG4gICAgICAgIDxrdi10b3AtaWNvbnMgW3RvcEFjdGlvbnNdPVwidG9wTWVudU9wdGlvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gTmF2ZWdhw6fDo28gZGUgc2lzdGVtYXMgZSB1c3XDoXJpb3MgLS0+XHJcbiAgICAgICAgPCEtLSBAZm9yICh0b3BBY3Rpb24gb2YgdG9wTWVudUFjdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BBY3Rpb25cIiAvPlxyXG4gICAgICAgICAgICB9IC0tPlxyXG4gICAgICAgIDxrdi10b3AtaWNvbnMgW3RvcEFjdGlvbnNdPVwidG9wTWVudU9wdGlvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIEBpZiAobWFzdGVyTmFtZSkgeyA8c3BhbiBjbGFzcz1cIm1hc3Rlci1uYW1lXCI+e3sgbWFzdGVyTmFtZSB9fTwvc3Bhbj4gfVxyXG4gICAgICAgIEBpZiAoZW1wcmVzYU5hbWUpIHs8c3BhbiBjbGFzcz1cImVtcHJlc2EtbmFtZVwiPnt7IGVtcHJlc2FOYW1lIH19PC9zcGFuPiB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IH0gQGVsc2UgeyBAaWYod2lkdGhQYWdlKCkgPiA5OTIpe1xyXG4gICAgICA8IS0tIGRyb3Bkb3duIHBhcmEgc2VsZcOnw6NvIGRlIGVtcHJlc2EvbGljZW5jYSAtLT5cclxuICAgICAgPGRyb3Bkb3duLW1hc3RlclxyXG4gICAgICAgICpuZ0lmPVwic2hvd0xpY2VuY2FzKClcIlxyXG4gICAgICAgIGNsYXNzPVwibWF4LXctMjVyZW0gZmxleC0xXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpZG1hc3RlclwiXHJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgIFttYXN0ZXJzXT1cIm1hc3RlcnNcIlxyXG4gICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdGlvblZhbHVlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9kcm9wZG93bi1tYXN0ZXI+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gTmF2ZWdhw6fDo28gZGUgc2lzdGVtYXMgZSB1c3XDoXJpb3MgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8a3YtdG9wLWljb25zIFt0b3BBY3Rpb25zXT1cInRvcE1lbnVPcHRpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZih3aWR0aFBhZ2UoKSA8PSA5OTIpe1xyXG4gICAgPCEtLSBkcm9wZG93biBwYXJhIHNlbGXDp8OjbyBkZSBlbXByZXNhL2xpY2VuY2EgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC0ycmVtIG14LTNcIj5cclxuICAgICAgPGRyb3Bkb3duLW1hc3RlclxyXG4gICAgICAgICpuZ0lmPVwic2hvd0xpY2VuY2FzKClcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlkbWFzdGVyXCJcclxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgW21hc3RlcnNdPVwibWFzdGVyc1wiXHJcbiAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0aW9uVmFsdWUpPVwiY2hhbmdlTGljZW5zZSgkZXZlbnQpXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIENvbnRhaW5lciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW4gZmxleC0xIHAtMCBtLTAgbWItMiBoLWZ1bGxcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwib3ZlcmZsb3cteS1hdXRvIGgtZnVsbCBtYXgtaC1mdWxsIHt7XHJcbiAgICAgICAgICAhc2hvd01lbnUgJiYgJ3NtOm92ZXJmbG93LXktaGlkZGVuJ1xyXG4gICAgICAgIH19IGNhcmQtY29udGFpbmVyXHJcbiAgICAgICAgXHJcbiAgICAgICAge3sgdXNlQ2FyZCA/ICd1c2UtY2FyZCcgOiAnJyB9fVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUGFpbmVsIGRvIHVzdcOhcmlvIC0tPlxyXG4gIDxwLW92ZXJsYXlQYW5lbFxyXG4gICAgI21ldXNEYWRvc1BhbmVsXHJcbiAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIiczNTBtcyBlYXNlLW91dCdcIlxyXG4gICAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMyBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICBzaG93VHJpbGhhQ29uaGVjaW1lbnRvICYmICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbidcclxuICAgICAgICAgIH19IGdhcC0yXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cC1hdmF0YXJcclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXVzZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICBzaXplPVwieGxhcmdlXCJcclxuICAgICAgICAgICAgc2hhcGU9XCJjaXJjbGVcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzQuNXJlbScsIGhlaWdodDogJzQuNXJlbScgfVwiXHJcbiAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHt7XHJcbiAgICAgICAgICAgICAgc2hvd1RyaWxoYUNvbmhlY2ltZW50byA/ICd3LTE4cmVtJyA6ICd3LTEycmVtJ1xyXG4gICAgICAgICAgICB9fSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzQuNXJlbScgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSB0ZXh0LW1kIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgICAgPk9sw6EsIHt7IHVzZXJOYW1lLnNwbGl0KFwiIFwiKVswXSB9fSE8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC14cyB0ZXh0LWdyYXktNTAwIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgICAgPnt7IHVzZXJFbWFpbCB9fTwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrdi1idXR0b25cclxuICAgICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICBsYWJlbD1cIkdlcmVuY2lhciBLZWVQYXNzXCJcclxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY2Nlc3NLZWVQYXNzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidy0xMnJlbVwiXHJcbiAgICAgICAgICAgID48L2t2LWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYoYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdGV4dC1zbVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcC0yXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmFjdGlvbigpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnt7IGFjdGlvbi5pY29uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IEBpZihzaG93VHJpbGhhQ29uaGVjaW1lbnRvKSB7XHJcbiAgICAgICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS01MDBcIlxyXG4gICAgICAgICAgICA+VHJpbGhhIGRvIENvbmhlY2ltZW50bzwvc3BhblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgQGZvcih0cmlsaGEgb2YgdHJpbGhhQ29uaGVjaW1lbnRvOyB0cmFjayAkaW5kZXgpIHtcclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBtYXgtdy0yNXJlbVwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJvcmRlci1yb3VuZC1tZCB0cmlsaGEtaWNvblwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC0yeGxcIj57e1xyXG4gICAgICAgICAgICAgICAgdHJpbGhhLmljb25cclxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMjByZW1cIj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpcyB0ZXh0LWdyYXktNTAwXCJcclxuICAgICAgICAgICAgICAgID57eyB0cmlsaGEudGl0bGUgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LWdyYXktNDAwIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidHJpbGhhLnN1YnRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgICAgICAgICAgID57eyB0cmlsaGEuc3VidGl0bGUgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBidXR0b24taWNvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQmFpeGFyIERvY3VtZW50bydcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWREb2ModHJpbGhhKVwiXHJcbiAgICAgICAgICAgICAgICAgID5kb3dubG9hZDwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJ1dHRvbi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBc3Npc3RpciBWw61kZW8nXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dWaWRlb0RvYyh0cmlsaGEpXCJcclxuICAgICAgICAgICAgICAgICAgPnZpZGVvY2FtPC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yIHNpZGUtbWVudS1pdGVtIHAtMlwiXHJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3JnYmEoMjUyLCAzLCAzLCAwLjYpJ1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwibG9nb3V0KCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmV4aXRfdG9fYXBwPC9zcGFuPlxyXG4gICAgICAgICAgPGxhYmVsPlNhaXI8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLW92ZXJsYXlQYW5lbD5cclxuPC9kaXY+XHJcbiJdfQ==