@recursyve/nice-ui-kit.v2 18.0.0-beta.144 → 20.0.0-beta.146

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 (659) hide show
  1. package/_index.scss +2 -2
  2. package/fesm2022/recursyve-nice-ui-kit.v2.mjs +899 -738
  3. package/fesm2022/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  4. package/index.d.ts +3664 -3
  5. package/package.json +8 -10
  6. package/src/lib/components/base-form/base-form.theme.scss +2 -1
  7. package/src/lib/components/chip-list/chip-list.theme.scss +2 -2
  8. package/src/lib/components/date-range-picker/date-range-picker.theme.scss +6 -5
  9. package/src/lib/components/horizontal-stepper/horizontal-stepper.theme.scss +3 -2
  10. package/src/lib/components/navigation/vertical/vertical.theme.scss +8 -8
  11. package/src/lib/components/toggle-button-group/toggle-button-group.theme.scss +8 -7
  12. package/src/lib/nice.theme.scss +78 -86
  13. package/src/lib/nice.utils.scss +3 -1
  14. package/styles/main.scss +4 -4
  15. package/styles/nice.scss +3 -1
  16. package/styles/overrides/angular-material.scss +3 -3
  17. package/esm2022/lib/animations/defaults.mjs +0 -32
  18. package/esm2022/lib/animations/expand-collapse.mjs +0 -21
  19. package/esm2022/lib/animations/fade.mjs +0 -210
  20. package/esm2022/lib/animations/index.mjs +0 -2
  21. package/esm2022/lib/animations/public-api.mjs +0 -17
  22. package/esm2022/lib/animations/shake.mjs +0 -63
  23. package/esm2022/lib/animations/slide.mjs +0 -156
  24. package/esm2022/lib/animations/zoom.mjs +0 -46
  25. package/esm2022/lib/api/exceptions/api.exception.mjs +0 -3
  26. package/esm2022/lib/api/exceptions/exception.factory.mjs +0 -9
  27. package/esm2022/lib/api/index.mjs +0 -2
  28. package/esm2022/lib/api/interceptors/transform-response.interceptor.mjs +0 -28
  29. package/esm2022/lib/api/nice.api.mjs +0 -68
  30. package/esm2022/lib/api/public-api.mjs +0 -5
  31. package/esm2022/lib/components/alert/alert.component.mjs +0 -200
  32. package/esm2022/lib/components/alert/alert.module.mjs +0 -32
  33. package/esm2022/lib/components/alert/alert.service.mjs +0 -58
  34. package/esm2022/lib/components/alert/alert.types.mjs +0 -2
  35. package/esm2022/lib/components/alert/index.mjs +0 -2
  36. package/esm2022/lib/components/alert/public-api.mjs +0 -5
  37. package/esm2022/lib/components/assets-carousel/assets-carousel.component.mjs +0 -283
  38. package/esm2022/lib/components/assets-carousel/assets-carousel.constant.mjs +0 -3
  39. package/esm2022/lib/components/assets-carousel/assets-carousel.module.mjs +0 -88
  40. package/esm2022/lib/components/assets-carousel/directives/assets-carousel-active-content.directive.mjs +0 -14
  41. package/esm2022/lib/components/assets-carousel/index.mjs +0 -2
  42. package/esm2022/lib/components/assets-carousel/public-api.mjs +0 -4
  43. package/esm2022/lib/components/async-typeahead/async-typeahead.component.mjs +0 -459
  44. package/esm2022/lib/components/async-typeahead/async-typeahead.constant.mjs +0 -3
  45. package/esm2022/lib/components/async-typeahead/async-typeahead.module.mjs +0 -64
  46. package/esm2022/lib/components/async-typeahead/index.mjs +0 -2
  47. package/esm2022/lib/components/async-typeahead/providers/async-typeahead.provider.mjs +0 -6
  48. package/esm2022/lib/components/async-typeahead/providers/async-typeahead.service.mjs +0 -219
  49. package/esm2022/lib/components/async-typeahead/public-api.mjs +0 -5
  50. package/esm2022/lib/components/base-form/base-form.component.mjs +0 -91
  51. package/esm2022/lib/components/base-form/base-form.module.mjs +0 -16
  52. package/esm2022/lib/components/base-form/form-submit.directive.mjs +0 -20
  53. package/esm2022/lib/components/base-form/index.mjs +0 -2
  54. package/esm2022/lib/components/base-form/nice-base.form.mjs +0 -14
  55. package/esm2022/lib/components/base-form/public-api.mjs +0 -5
  56. package/esm2022/lib/components/card/card.component.mjs +0 -60
  57. package/esm2022/lib/components/card/card.module.mjs +0 -24
  58. package/esm2022/lib/components/card/card.types.mjs +0 -2
  59. package/esm2022/lib/components/card/index.mjs +0 -2
  60. package/esm2022/lib/components/card/public-api.mjs +0 -3
  61. package/esm2022/lib/components/carousel/carousel.component.mjs +0 -51
  62. package/esm2022/lib/components/carousel/carousel.constant.mjs +0 -3
  63. package/esm2022/lib/components/carousel/carousel.module.mjs +0 -54
  64. package/esm2022/lib/components/carousel/index.mjs +0 -2
  65. package/esm2022/lib/components/carousel/interfaces/carousel-options.interface.mjs +0 -2
  66. package/esm2022/lib/components/carousel/picture-modal/index.mjs +0 -2
  67. package/esm2022/lib/components/carousel/picture-modal/picture-modal.component.mjs +0 -11
  68. package/esm2022/lib/components/carousel/picture-modal/picture-modal.service.mjs +0 -34
  69. package/esm2022/lib/components/carousel/picture-modal/public-api.mjs +0 -3
  70. package/esm2022/lib/components/carousel/pipe/carousel-layout.pipe.mjs +0 -17
  71. package/esm2022/lib/components/carousel/public-api.mjs +0 -4
  72. package/esm2022/lib/components/collapsable/collapsable.component.mjs +0 -36
  73. package/esm2022/lib/components/collapsable/collapsable.module.mjs +0 -25
  74. package/esm2022/lib/components/collapsable/index.mjs +0 -2
  75. package/esm2022/lib/components/collapsable/public-api.mjs +0 -3
  76. package/esm2022/lib/components/date-range-picker/components/header/header.component.mjs +0 -57
  77. package/esm2022/lib/components/date-range-picker/components/range-preset/range-preset.component.mjs +0 -107
  78. package/esm2022/lib/components/date-range-picker/date-range-picker.component.mjs +0 -95
  79. package/esm2022/lib/components/date-range-picker/date-range-picker.module.mjs +0 -56
  80. package/esm2022/lib/components/date-range-picker/index.mjs +0 -2
  81. package/esm2022/lib/components/date-range-picker/providers/date-range-picker.service.mjs +0 -17
  82. package/esm2022/lib/components/date-range-picker/public-api.mjs +0 -3
  83. package/esm2022/lib/components/drawer/drawer.component.mjs +0 -372
  84. package/esm2022/lib/components/drawer/drawer.module.mjs +0 -28
  85. package/esm2022/lib/components/drawer/drawer.service.mjs +0 -40
  86. package/esm2022/lib/components/drawer/drawer.types.mjs +0 -2
  87. package/esm2022/lib/components/drawer/index.mjs +0 -2
  88. package/esm2022/lib/components/drawer/public-api.mjs +0 -5
  89. package/esm2022/lib/components/export-bottom-sheet/export-bottom-sheet.component.mjs +0 -33
  90. package/esm2022/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +0 -45
  91. package/esm2022/lib/components/export-bottom-sheet/index.mjs +0 -2
  92. package/esm2022/lib/components/export-bottom-sheet/models/export-strategy.model.mjs +0 -2
  93. package/esm2022/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.mjs +0 -28
  94. package/esm2022/lib/components/export-bottom-sheet/public-api.mjs +0 -5
  95. package/esm2022/lib/components/form-error/control-status.directive.mjs +0 -125
  96. package/esm2022/lib/components/form-error/form-error.component.mjs +0 -53
  97. package/esm2022/lib/components/form-error/form-error.module.mjs +0 -20
  98. package/esm2022/lib/components/form-error/index.mjs +0 -2
  99. package/esm2022/lib/components/form-error/public-api.mjs +0 -4
  100. package/esm2022/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +0 -34
  101. package/esm2022/lib/components/horizontal-stepper/horizontal-stepper.module.mjs +0 -29
  102. package/esm2022/lib/components/horizontal-stepper/index.mjs +0 -2
  103. package/esm2022/lib/components/horizontal-stepper/public-api.mjs +0 -4
  104. package/esm2022/lib/components/horizontal-stepper/step.component.mjs +0 -22
  105. package/esm2022/lib/components/image-cropper/image-cropper.component.mjs +0 -1269
  106. package/esm2022/lib/components/image-cropper/image-cropper.module.mjs +0 -23
  107. package/esm2022/lib/components/image-cropper/index.mjs +0 -2
  108. package/esm2022/lib/components/image-cropper/public-api.mjs +0 -3
  109. package/esm2022/lib/components/image-cropper/resize-canvas.mjs +0 -76
  110. package/esm2022/lib/components/index.mjs +0 -2
  111. package/esm2022/lib/components/layout/index.mjs +0 -2
  112. package/esm2022/lib/components/layout/layout.component.mjs +0 -98
  113. package/esm2022/lib/components/layout/layout.module.mjs +0 -18
  114. package/esm2022/lib/components/layout/public-api.mjs +0 -3
  115. package/esm2022/lib/components/loading-spinner/index.mjs +0 -2
  116. package/esm2022/lib/components/loading-spinner/loading-spinner.component.mjs +0 -22
  117. package/esm2022/lib/components/loading-spinner/loading-spinner.module.mjs +0 -48
  118. package/esm2022/lib/components/loading-spinner/loading.constant.mjs +0 -3
  119. package/esm2022/lib/components/loading-spinner/loading.directive.mjs +0 -56
  120. package/esm2022/lib/components/loading-spinner/public-api.mjs +0 -4
  121. package/esm2022/lib/components/loading-toast/index.mjs +0 -2
  122. package/esm2022/lib/components/loading-toast/loading-toast.component.mjs +0 -38
  123. package/esm2022/lib/components/loading-toast/loading-toast.constant.mjs +0 -3
  124. package/esm2022/lib/components/loading-toast/loading-toast.directive.mjs +0 -64
  125. package/esm2022/lib/components/loading-toast/loading-toast.module.mjs +0 -62
  126. package/esm2022/lib/components/loading-toast/loading-toast.service.mjs +0 -47
  127. package/esm2022/lib/components/loading-toast/public-api.mjs +0 -6
  128. package/esm2022/lib/components/loading-toast/rxjs/show-loading-toast.operator.mjs +0 -12
  129. package/esm2022/lib/components/lottie/index.mjs +0 -2
  130. package/esm2022/lib/components/lottie/lottie.component.mjs +0 -52
  131. package/esm2022/lib/components/lottie/lottie.module.mjs +0 -18
  132. package/esm2022/lib/components/lottie/public-api.mjs +0 -3
  133. package/esm2022/lib/components/navigation/components/hint-component-base.mjs +0 -120
  134. package/esm2022/lib/components/navigation/directives/show-hint.directive.mjs +0 -187
  135. package/esm2022/lib/components/navigation/horizontal/components/basic/basic.component.mjs +0 -62
  136. package/esm2022/lib/components/navigation/horizontal/components/branch/branch.component.mjs +0 -80
  137. package/esm2022/lib/components/navigation/horizontal/components/divider/divider.component.mjs +0 -51
  138. package/esm2022/lib/components/navigation/horizontal/components/spacer/spacer.component.mjs +0 -51
  139. package/esm2022/lib/components/navigation/horizontal/horizontal.component.mjs +0 -50
  140. package/esm2022/lib/components/navigation/index.mjs +0 -2
  141. package/esm2022/lib/components/navigation/navigation.component.mjs +0 -83
  142. package/esm2022/lib/components/navigation/navigation.module.mjs +0 -108
  143. package/esm2022/lib/components/navigation/navigation.service.mjs +0 -188
  144. package/esm2022/lib/components/navigation/navigation.types.mjs +0 -2
  145. package/esm2022/lib/components/navigation/pipes/should-hide.pipe.mjs +0 -31
  146. package/esm2022/lib/components/navigation/pipes/should-show-hint.pipe.mjs +0 -32
  147. package/esm2022/lib/components/navigation/pipes/translate-with-context.pipe.mjs +0 -25
  148. package/esm2022/lib/components/navigation/providers/hide-item.resolver.mjs +0 -3
  149. package/esm2022/lib/components/navigation/providers/hint.resolver.mjs +0 -3
  150. package/esm2022/lib/components/navigation/providers/hint.service.mjs +0 -20
  151. package/esm2022/lib/components/navigation/providers/translation-context.service.mjs +0 -16
  152. package/esm2022/lib/components/navigation/public-api.mjs +0 -20
  153. package/esm2022/lib/components/navigation/vertical/components/aside/aside.component.mjs +0 -145
  154. package/esm2022/lib/components/navigation/vertical/components/basic/basic.component.mjs +0 -76
  155. package/esm2022/lib/components/navigation/vertical/components/collapsable/collapsable.component.mjs +0 -264
  156. package/esm2022/lib/components/navigation/vertical/components/divider/divider.component.mjs +0 -51
  157. package/esm2022/lib/components/navigation/vertical/components/group/group.component.mjs +0 -75
  158. package/esm2022/lib/components/navigation/vertical/components/spacer/spacer.component.mjs +0 -51
  159. package/esm2022/lib/components/navigation/vertical/vertical.component.mjs +0 -599
  160. package/esm2022/lib/components/public-api.mjs +0 -25
  161. package/esm2022/lib/components/search-bar/index.mjs +0 -2
  162. package/esm2022/lib/components/search-bar/public-api.mjs +0 -3
  163. package/esm2022/lib/components/search-bar/search-bar.component.mjs +0 -76
  164. package/esm2022/lib/components/search-bar/search-bar.module.mjs +0 -40
  165. package/esm2022/lib/components/sweet-alert/index.mjs +0 -2
  166. package/esm2022/lib/components/sweet-alert/public-api.mjs +0 -5
  167. package/esm2022/lib/components/sweet-alert/sweet-alert.component.mjs +0 -59
  168. package/esm2022/lib/components/sweet-alert/sweet-alert.constant.mjs +0 -3
  169. package/esm2022/lib/components/sweet-alert/sweet-alert.directive.mjs +0 -37
  170. package/esm2022/lib/components/sweet-alert/sweet-alert.module.mjs +0 -37
  171. package/esm2022/lib/components/sweet-alert/sweet-alert.service.mjs +0 -95
  172. package/esm2022/lib/components/toast/index.mjs +0 -2
  173. package/esm2022/lib/components/toast/public-api.mjs +0 -6
  174. package/esm2022/lib/components/toast/rxjs/show-success-or-error-toast.operator.mjs +0 -22
  175. package/esm2022/lib/components/toast/rxjs/show-toast.operator.mjs +0 -26
  176. package/esm2022/lib/components/toast/toast.component.mjs +0 -25
  177. package/esm2022/lib/components/toast/toast.constant.mjs +0 -3
  178. package/esm2022/lib/components/toast/toast.module.mjs +0 -57
  179. package/esm2022/lib/components/toast/toast.service.mjs +0 -65
  180. package/esm2022/lib/components/toggle-button-group/index.mjs +0 -2
  181. package/esm2022/lib/components/toggle-button-group/public-api.mjs +0 -4
  182. package/esm2022/lib/components/toggle-button-group/toggle-button-group.component.mjs +0 -134
  183. package/esm2022/lib/components/toggle-button-group/toggle-button-group.module.mjs +0 -26
  184. package/esm2022/lib/components/toggle-button-group/toggle-button.component.mjs +0 -19
  185. package/esm2022/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +0 -38
  186. package/esm2022/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +0 -26
  187. package/esm2022/lib/components/translation-form/components/translation-form.component.mjs +0 -172
  188. package/esm2022/lib/components/translation-form/components/translation-form.module.mjs +0 -71
  189. package/esm2022/lib/components/translation-form/decorators/translation-form-group.decorator.mjs +0 -4
  190. package/esm2022/lib/components/translation-form/directives/translation-context.directive.mjs +0 -48
  191. package/esm2022/lib/components/translation-form/index.mjs +0 -2
  192. package/esm2022/lib/components/translation-form/providers/nice-translation-form.service.mjs +0 -59
  193. package/esm2022/lib/components/translation-form/public-api.mjs +0 -11
  194. package/esm2022/lib/components/translation-form/toggle/translation-toggle.component.mjs +0 -26
  195. package/esm2022/lib/components/translation-form/translation.form.mjs +0 -6
  196. package/esm2022/lib/components/translation-form/validators/require-for-languages.validator.mjs +0 -43
  197. package/esm2022/lib/components/typeahead/directives/options-scroll.directive.mjs +0 -68
  198. package/esm2022/lib/components/typeahead/directives/options-scroll.module.mjs +0 -16
  199. package/esm2022/lib/components/typeahead/index.mjs +0 -2
  200. package/esm2022/lib/components/typeahead/public-api.mjs +0 -4
  201. package/esm2022/lib/components/typeahead/typeahead.component.mjs +0 -490
  202. package/esm2022/lib/components/typeahead/typeahead.module.mjs +0 -59
  203. package/esm2022/lib/directives/autofocus/autofocus.directive.mjs +0 -17
  204. package/esm2022/lib/directives/autofocus/autofocus.module.mjs +0 -16
  205. package/esm2022/lib/directives/autofocus/index.mjs +0 -2
  206. package/esm2022/lib/directives/autofocus/public-api.mjs +0 -3
  207. package/esm2022/lib/directives/autogrow/autogrow.directive.mjs +0 -105
  208. package/esm2022/lib/directives/autogrow/autogrow.module.mjs +0 -20
  209. package/esm2022/lib/directives/autogrow/index.mjs +0 -2
  210. package/esm2022/lib/directives/autogrow/public-api.mjs +0 -3
  211. package/esm2022/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.mjs +0 -39
  212. package/esm2022/lib/directives/chip-async-typeahead/index.mjs +0 -2
  213. package/esm2022/lib/directives/chip-async-typeahead/public-api.mjs +0 -2
  214. package/esm2022/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.mjs +0 -14
  215. package/esm2022/lib/directives/chip-list/chip-list-items/chip-list-items.component.mjs +0 -46
  216. package/esm2022/lib/directives/chip-list/chip-list.constant.mjs +0 -3
  217. package/esm2022/lib/directives/chip-list/chip-list.directive.mjs +0 -144
  218. package/esm2022/lib/directives/chip-list/chip-list.module.mjs +0 -40
  219. package/esm2022/lib/directives/chip-list/index.mjs +0 -2
  220. package/esm2022/lib/directives/chip-list/public-api.mjs +0 -5
  221. package/esm2022/lib/directives/draggable-list/draggable-list.directive.mjs +0 -94
  222. package/esm2022/lib/directives/draggable-list/draggable-list.module.mjs +0 -18
  223. package/esm2022/lib/directives/draggable-list/index.mjs +0 -2
  224. package/esm2022/lib/directives/draggable-list/public-api.mjs +0 -3
  225. package/esm2022/lib/directives/dropzone/dropzone.directive.mjs +0 -50
  226. package/esm2022/lib/directives/dropzone/dropzone.module.mjs +0 -18
  227. package/esm2022/lib/directives/dropzone/index.mjs +0 -2
  228. package/esm2022/lib/directives/dropzone/public-api.mjs +0 -3
  229. package/esm2022/lib/directives/image-error-placeholder/image-error-placeholder.directive.mjs +0 -26
  230. package/esm2022/lib/directives/image-error-placeholder/image-error-placeholder.module.mjs +0 -16
  231. package/esm2022/lib/directives/image-error-placeholder/index.mjs +0 -2
  232. package/esm2022/lib/directives/image-error-placeholder/public-api.mjs +0 -3
  233. package/esm2022/lib/directives/index.mjs +0 -2
  234. package/esm2022/lib/directives/material/index.mjs +0 -2
  235. package/esm2022/lib/directives/material/material.module.mjs +0 -25
  236. package/esm2022/lib/directives/material/nice-material-style.directive.mjs +0 -18
  237. package/esm2022/lib/directives/material/nice-rounded-style.directive.mjs +0 -18
  238. package/esm2022/lib/directives/material/public-api.mjs +0 -4
  239. package/esm2022/lib/directives/modals/index.mjs +0 -2
  240. package/esm2022/lib/directives/modals/modal-on-click.directive.mjs +0 -22
  241. package/esm2022/lib/directives/modals/modal-opener.directive.mjs +0 -31
  242. package/esm2022/lib/directives/modals/public-api.mjs +0 -3
  243. package/esm2022/lib/directives/public-api.mjs +0 -16
  244. package/esm2022/lib/directives/rerender/index.mjs +0 -2
  245. package/esm2022/lib/directives/rerender/public-api.mjs +0 -2
  246. package/esm2022/lib/directives/rerender/rerender.directive.mjs +0 -22
  247. package/esm2022/lib/directives/resolve/index.mjs +0 -2
  248. package/esm2022/lib/directives/resolve/public-api.mjs +0 -2
  249. package/esm2022/lib/directives/resolve/resolve.directive.mjs +0 -32
  250. package/esm2022/lib/directives/scroll-reset/index.mjs +0 -2
  251. package/esm2022/lib/directives/scroll-reset/public-api.mjs +0 -3
  252. package/esm2022/lib/directives/scroll-reset/scroll-reset.directive.mjs +0 -47
  253. package/esm2022/lib/directives/scroll-reset/scroll-reset.module.mjs +0 -20
  254. package/esm2022/lib/directives/scrollbar/index.mjs +0 -2
  255. package/esm2022/lib/directives/scrollbar/public-api.mjs +0 -3
  256. package/esm2022/lib/directives/scrollbar/scrollbar.directive.mjs +0 -309
  257. package/esm2022/lib/directives/scrollbar/scrollbar.module.mjs +0 -20
  258. package/esm2022/lib/directives/scrollbar/scrollbar.types.mjs +0 -15
  259. package/esm2022/lib/directives/stop-propagation/click-stop-propagation.directive.mjs +0 -18
  260. package/esm2022/lib/directives/stop-propagation/index.mjs +0 -2
  261. package/esm2022/lib/directives/stop-propagation/public-api.mjs +0 -3
  262. package/esm2022/lib/directives/stop-propagation/stop-propagation.module.mjs +0 -16
  263. package/esm2022/lib/directives/window/index.mjs +0 -2
  264. package/esm2022/lib/directives/window/prevent-close-window.directive.mjs +0 -18
  265. package/esm2022/lib/directives/window/public-api.mjs +0 -3
  266. package/esm2022/lib/directives/window/window-directive.module.mjs +0 -16
  267. package/esm2022/lib/nice.module.mjs +0 -124
  268. package/esm2022/lib/pipes/boolean.pipe.mjs +0 -22
  269. package/esm2022/lib/pipes/capitalize-first-letter.pipe.mjs +0 -18
  270. package/esm2022/lib/pipes/ceil.pipe.mjs +0 -14
  271. package/esm2022/lib/pipes/entries.pipe.mjs +0 -23
  272. package/esm2022/lib/pipes/find-by-key.pipe.mjs +0 -14
  273. package/esm2022/lib/pipes/first-letter.pipe.mjs +0 -14
  274. package/esm2022/lib/pipes/floor.pipe.mjs +0 -14
  275. package/esm2022/lib/pipes/index.mjs +0 -2
  276. package/esm2022/lib/pipes/join-if-defined.pipe.mjs +0 -20
  277. package/esm2022/lib/pipes/link.pipe.mjs +0 -25
  278. package/esm2022/lib/pipes/localized-boolean.pipe.mjs +0 -19
  279. package/esm2022/lib/pipes/localized-currency.pipe.mjs +0 -18
  280. package/esm2022/lib/pipes/localized-date-only.pipe.mjs +0 -21
  281. package/esm2022/lib/pipes/localized-date.pipe.mjs +0 -40
  282. package/esm2022/lib/pipes/minutes-to-time.pipe.mjs +0 -17
  283. package/esm2022/lib/pipes/number-to-ordinal-indicator.pipe.mjs +0 -23
  284. package/esm2022/lib/pipes/pad.pipe.mjs +0 -20
  285. package/esm2022/lib/pipes/phone.pipe.mjs +0 -23
  286. package/esm2022/lib/pipes/pipes.module.mjs +0 -177
  287. package/esm2022/lib/pipes/postal-code.pipe.mjs +0 -22
  288. package/esm2022/lib/pipes/public-api.mjs +0 -25
  289. package/esm2022/lib/pipes/range.pipe.mjs +0 -18
  290. package/esm2022/lib/pipes/round.pipe.mjs +0 -14
  291. package/esm2022/lib/pipes/sanitize-bypass.pipe.mjs +0 -24
  292. package/esm2022/lib/pipes/seconds-to-time.pipe.mjs +0 -18
  293. package/esm2022/lib/pipes/track-by-prop.pipe.mjs +0 -14
  294. package/esm2022/lib/providers/config/config.constants.mjs +0 -3
  295. package/esm2022/lib/providers/config/config.model.mjs +0 -2
  296. package/esm2022/lib/providers/config/config.module.mjs +0 -34
  297. package/esm2022/lib/providers/config/config.service.mjs +0 -51
  298. package/esm2022/lib/providers/config/index.mjs +0 -2
  299. package/esm2022/lib/providers/config/public-api.mjs +0 -3
  300. package/esm2022/lib/providers/index.mjs +0 -2
  301. package/esm2022/lib/providers/media-watcher/index.mjs +0 -2
  302. package/esm2022/lib/providers/media-watcher/media-watcher.module.mjs +0 -26
  303. package/esm2022/lib/providers/media-watcher/media-watcher.service.mjs +0 -106
  304. package/esm2022/lib/providers/media-watcher/public-api.mjs +0 -3
  305. package/esm2022/lib/providers/overlay/dynamic-overlay-container.service.mjs +0 -14
  306. package/esm2022/lib/providers/overlay/dynamic-overlay.service.mjs +0 -31
  307. package/esm2022/lib/providers/public-api.mjs +0 -5
  308. package/esm2022/lib/providers/splash-screen/index.mjs +0 -2
  309. package/esm2022/lib/providers/splash-screen/public-api.mjs +0 -3
  310. package/esm2022/lib/providers/splash-screen/splash-screen.module.mjs +0 -26
  311. package/esm2022/lib/providers/splash-screen/splash-screen.service.mjs +0 -45
  312. package/esm2022/lib/providers/utils/index.mjs +0 -2
  313. package/esm2022/lib/providers/utils/public-api.mjs +0 -3
  314. package/esm2022/lib/providers/utils/utils.module.mjs +0 -19
  315. package/esm2022/lib/providers/utils/utils.service.mjs +0 -27
  316. package/esm2022/lib/types/constructor.mjs +0 -5
  317. package/esm2022/lib/utils/array.utils.mjs +0 -106
  318. package/esm2022/lib/utils/case.utils.mjs +0 -58
  319. package/esm2022/lib/utils/colors.utils.mjs +0 -29
  320. package/esm2022/lib/utils/date.utils.mjs +0 -47
  321. package/esm2022/lib/utils/file.utils.mjs +0 -90
  322. package/esm2022/lib/utils/font-awesome.utils.mjs +0 -40
  323. package/esm2022/lib/utils/form-data.utils.mjs +0 -41
  324. package/esm2022/lib/utils/http-status.utils.mjs +0 -47
  325. package/esm2022/lib/utils/index.mjs +0 -2
  326. package/esm2022/lib/utils/keyboard.utils.mjs +0 -9
  327. package/esm2022/lib/utils/lexorank.utils.mjs +0 -28
  328. package/esm2022/lib/utils/modal.utils.mjs +0 -6
  329. package/esm2022/lib/utils/number.utils.mjs +0 -6
  330. package/esm2022/lib/utils/object.utils.mjs +0 -111
  331. package/esm2022/lib/utils/promise.utils.mjs +0 -7
  332. package/esm2022/lib/utils/public-api.mjs +0 -19
  333. package/esm2022/lib/utils/query-params.utils.mjs +0 -14
  334. package/esm2022/lib/utils/regex.utils.mjs +0 -11
  335. package/esm2022/lib/utils/type.utils.mjs +0 -15
  336. package/esm2022/lib/utils/url.utils.mjs +0 -20
  337. package/esm2022/public-api.mjs +0 -12
  338. package/esm2022/recursyve-nice-ui-kit.v2.mjs +0 -5
  339. package/lib/animations/defaults.d.ts +0 -13
  340. package/lib/animations/expand-collapse.d.ts +0 -2
  341. package/lib/animations/fade.d.ts +0 -11
  342. package/lib/animations/index.d.ts +0 -1
  343. package/lib/animations/public-api.d.ts +0 -1
  344. package/lib/animations/shake.d.ts +0 -2
  345. package/lib/animations/slide.d.ts +0 -9
  346. package/lib/animations/zoom.d.ts +0 -3
  347. package/lib/api/exceptions/api.exception.d.ts +0 -3
  348. package/lib/api/exceptions/exception.factory.d.ts +0 -6
  349. package/lib/api/index.d.ts +0 -1
  350. package/lib/api/interceptors/transform-response.interceptor.d.ts +0 -9
  351. package/lib/api/nice.api.d.ts +0 -33
  352. package/lib/api/public-api.d.ts +0 -4
  353. package/lib/components/alert/alert.component.d.ts +0 -64
  354. package/lib/components/alert/alert.module.d.ts +0 -10
  355. package/lib/components/alert/alert.service.d.ts +0 -24
  356. package/lib/components/alert/alert.types.d.ts +0 -3
  357. package/lib/components/alert/index.d.ts +0 -1
  358. package/lib/components/alert/public-api.d.ts +0 -4
  359. package/lib/components/assets-carousel/assets-carousel.component.d.ts +0 -88
  360. package/lib/components/assets-carousel/assets-carousel.constant.d.ts +0 -2
  361. package/lib/components/assets-carousel/assets-carousel.module.d.ts +0 -19
  362. package/lib/components/assets-carousel/directives/assets-carousel-active-content.directive.d.ts +0 -8
  363. package/lib/components/assets-carousel/index.d.ts +0 -1
  364. package/lib/components/assets-carousel/public-api.d.ts +0 -3
  365. package/lib/components/async-typeahead/async-typeahead.component.d.ts +0 -119
  366. package/lib/components/async-typeahead/async-typeahead.constant.d.ts +0 -2
  367. package/lib/components/async-typeahead/async-typeahead.module.d.ts +0 -19
  368. package/lib/components/async-typeahead/index.d.ts +0 -1
  369. package/lib/components/async-typeahead/providers/async-typeahead.provider.d.ts +0 -11
  370. package/lib/components/async-typeahead/providers/async-typeahead.service.d.ts +0 -51
  371. package/lib/components/async-typeahead/public-api.d.ts +0 -4
  372. package/lib/components/base-form/base-form.component.d.ts +0 -30
  373. package/lib/components/base-form/base-form.module.d.ts +0 -7
  374. package/lib/components/base-form/form-submit.directive.d.ts +0 -8
  375. package/lib/components/base-form/index.d.ts +0 -1
  376. package/lib/components/base-form/nice-base.form.d.ts +0 -4
  377. package/lib/components/base-form/public-api.d.ts +0 -4
  378. package/lib/components/card/card.component.d.ts +0 -21
  379. package/lib/components/card/card.module.d.ts +0 -8
  380. package/lib/components/card/card.types.d.ts +0 -1
  381. package/lib/components/card/index.d.ts +0 -1
  382. package/lib/components/card/public-api.d.ts +0 -2
  383. package/lib/components/carousel/carousel.component.d.ts +0 -23
  384. package/lib/components/carousel/carousel.constant.d.ts +0 -2
  385. package/lib/components/carousel/carousel.module.d.ts +0 -17
  386. package/lib/components/carousel/index.d.ts +0 -1
  387. package/lib/components/carousel/interfaces/carousel-options.interface.d.ts +0 -9
  388. package/lib/components/carousel/picture-modal/index.d.ts +0 -1
  389. package/lib/components/carousel/picture-modal/picture-modal.component.d.ts +0 -6
  390. package/lib/components/carousel/picture-modal/picture-modal.service.d.ts +0 -12
  391. package/lib/components/carousel/picture-modal/public-api.d.ts +0 -2
  392. package/lib/components/carousel/pipe/carousel-layout.pipe.d.ts +0 -7
  393. package/lib/components/carousel/public-api.d.ts +0 -3
  394. package/lib/components/collapsable/collapsable.component.d.ts +0 -15
  395. package/lib/components/collapsable/collapsable.module.d.ts +0 -9
  396. package/lib/components/collapsable/index.d.ts +0 -1
  397. package/lib/components/collapsable/public-api.d.ts +0 -2
  398. package/lib/components/date-range-picker/components/header/header.component.d.ts +0 -20
  399. package/lib/components/date-range-picker/components/range-preset/range-preset.component.d.ts +0 -23
  400. package/lib/components/date-range-picker/date-range-picker.component.d.ts +0 -28
  401. package/lib/components/date-range-picker/date-range-picker.module.d.ts +0 -18
  402. package/lib/components/date-range-picker/index.d.ts +0 -1
  403. package/lib/components/date-range-picker/providers/date-range-picker.service.d.ts +0 -8
  404. package/lib/components/date-range-picker/public-api.d.ts +0 -2
  405. package/lib/components/drawer/drawer.component.d.ts +0 -115
  406. package/lib/components/drawer/drawer.module.d.ts +0 -9
  407. package/lib/components/drawer/drawer.service.d.ts +0 -23
  408. package/lib/components/drawer/drawer.types.d.ts +0 -2
  409. package/lib/components/drawer/index.d.ts +0 -1
  410. package/lib/components/drawer/public-api.d.ts +0 -4
  411. package/lib/components/export-bottom-sheet/export-bottom-sheet.component.d.ts +0 -17
  412. package/lib/components/export-bottom-sheet/export-bottom-sheet.module.d.ts +0 -18
  413. package/lib/components/export-bottom-sheet/index.d.ts +0 -1
  414. package/lib/components/export-bottom-sheet/models/export-strategy.model.d.ts +0 -5
  415. package/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.d.ts +0 -12
  416. package/lib/components/export-bottom-sheet/public-api.d.ts +0 -4
  417. package/lib/components/form-error/control-status.directive.d.ts +0 -20
  418. package/lib/components/form-error/form-error.component.d.ts +0 -8
  419. package/lib/components/form-error/form-error.module.d.ts +0 -10
  420. package/lib/components/form-error/index.d.ts +0 -1
  421. package/lib/components/form-error/public-api.d.ts +0 -3
  422. package/lib/components/horizontal-stepper/horizontal-stepper.component.d.ts +0 -8
  423. package/lib/components/horizontal-stepper/horizontal-stepper.module.d.ts +0 -11
  424. package/lib/components/horizontal-stepper/index.d.ts +0 -1
  425. package/lib/components/horizontal-stepper/public-api.d.ts +0 -3
  426. package/lib/components/horizontal-stepper/step.component.d.ts +0 -6
  427. package/lib/components/image-cropper/image-cropper.component.d.ts +0 -374
  428. package/lib/components/image-cropper/image-cropper.module.d.ts +0 -10
  429. package/lib/components/image-cropper/index.d.ts +0 -1
  430. package/lib/components/image-cropper/public-api.d.ts +0 -2
  431. package/lib/components/image-cropper/resize-canvas.d.ts +0 -1
  432. package/lib/components/index.d.ts +0 -1
  433. package/lib/components/layout/index.d.ts +0 -1
  434. package/lib/components/layout/layout.component.d.ts +0 -39
  435. package/lib/components/layout/layout.module.d.ts +0 -7
  436. package/lib/components/layout/public-api.d.ts +0 -2
  437. package/lib/components/loading-spinner/index.d.ts +0 -1
  438. package/lib/components/loading-spinner/loading-spinner.component.d.ts +0 -9
  439. package/lib/components/loading-spinner/loading-spinner.module.d.ts +0 -13
  440. package/lib/components/loading-spinner/loading.constant.d.ts +0 -2
  441. package/lib/components/loading-spinner/loading.directive.d.ts +0 -17
  442. package/lib/components/loading-spinner/public-api.d.ts +0 -3
  443. package/lib/components/loading-toast/index.d.ts +0 -1
  444. package/lib/components/loading-toast/loading-toast.component.d.ts +0 -19
  445. package/lib/components/loading-toast/loading-toast.constant.d.ts +0 -2
  446. package/lib/components/loading-toast/loading-toast.directive.d.ts +0 -18
  447. package/lib/components/loading-toast/loading-toast.module.d.ts +0 -16
  448. package/lib/components/loading-toast/loading-toast.service.d.ts +0 -20
  449. package/lib/components/loading-toast/public-api.d.ts +0 -5
  450. package/lib/components/loading-toast/rxjs/show-loading-toast.operator.d.ts +0 -6
  451. package/lib/components/lottie/index.d.ts +0 -1
  452. package/lib/components/lottie/lottie.component.d.ts +0 -19
  453. package/lib/components/lottie/lottie.module.d.ts +0 -8
  454. package/lib/components/lottie/public-api.d.ts +0 -2
  455. package/lib/components/navigation/components/hint-component-base.d.ts +0 -65
  456. package/lib/components/navigation/directives/show-hint.directive.d.ts +0 -39
  457. package/lib/components/navigation/horizontal/components/basic/basic.component.d.ts +0 -29
  458. package/lib/components/navigation/horizontal/components/branch/branch.component.d.ts +0 -38
  459. package/lib/components/navigation/horizontal/components/divider/divider.component.d.ts +0 -26
  460. package/lib/components/navigation/horizontal/components/spacer/spacer.component.d.ts +0 -26
  461. package/lib/components/navigation/horizontal/horizontal.component.d.ts +0 -22
  462. package/lib/components/navigation/index.d.ts +0 -1
  463. package/lib/components/navigation/navigation.component.d.ts +0 -32
  464. package/lib/components/navigation/navigation.module.d.ts +0 -32
  465. package/lib/components/navigation/navigation.service.d.ts +0 -69
  466. package/lib/components/navigation/navigation.types.d.ts +0 -42
  467. package/lib/components/navigation/pipes/should-hide.pipe.d.ts +0 -11
  468. package/lib/components/navigation/pipes/should-show-hint.pipe.d.ts +0 -12
  469. package/lib/components/navigation/pipes/translate-with-context.pipe.d.ts +0 -12
  470. package/lib/components/navigation/providers/hide-item.resolver.d.ts +0 -5
  471. package/lib/components/navigation/providers/hint.resolver.d.ts +0 -4
  472. package/lib/components/navigation/providers/hint.service.d.ts +0 -9
  473. package/lib/components/navigation/providers/translation-context.service.d.ts +0 -8
  474. package/lib/components/navigation/public-api.d.ts +0 -19
  475. package/lib/components/navigation/vertical/components/aside/aside.component.d.ts +0 -55
  476. package/lib/components/navigation/vertical/components/basic/basic.component.d.ts +0 -35
  477. package/lib/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +0 -68
  478. package/lib/components/navigation/vertical/components/divider/divider.component.d.ts +0 -26
  479. package/lib/components/navigation/vertical/components/group/group.component.d.ts +0 -36
  480. package/lib/components/navigation/vertical/components/spacer/spacer.component.d.ts +0 -26
  481. package/lib/components/navigation/vertical/vertical.component.d.ts +0 -168
  482. package/lib/components/public-api.d.ts +0 -24
  483. package/lib/components/search-bar/index.d.ts +0 -1
  484. package/lib/components/search-bar/public-api.d.ts +0 -2
  485. package/lib/components/search-bar/search-bar.component.d.ts +0 -20
  486. package/lib/components/search-bar/search-bar.module.d.ts +0 -12
  487. package/lib/components/sweet-alert/index.d.ts +0 -1
  488. package/lib/components/sweet-alert/public-api.d.ts +0 -4
  489. package/lib/components/sweet-alert/sweet-alert.component.d.ts +0 -27
  490. package/lib/components/sweet-alert/sweet-alert.constant.d.ts +0 -2
  491. package/lib/components/sweet-alert/sweet-alert.directive.d.ts +0 -13
  492. package/lib/components/sweet-alert/sweet-alert.module.d.ts +0 -16
  493. package/lib/components/sweet-alert/sweet-alert.service.d.ts +0 -32
  494. package/lib/components/toast/index.d.ts +0 -1
  495. package/lib/components/toast/public-api.d.ts +0 -5
  496. package/lib/components/toast/rxjs/show-success-or-error-toast.operator.d.ts +0 -37
  497. package/lib/components/toast/rxjs/show-toast.operator.d.ts +0 -20
  498. package/lib/components/toast/toast.component.d.ts +0 -17
  499. package/lib/components/toast/toast.constant.d.ts +0 -2
  500. package/lib/components/toast/toast.module.d.ts +0 -15
  501. package/lib/components/toast/toast.service.d.ts +0 -25
  502. package/lib/components/toggle-button-group/index.d.ts +0 -1
  503. package/lib/components/toggle-button-group/public-api.d.ts +0 -3
  504. package/lib/components/toggle-button-group/toggle-button-group.component.d.ts +0 -26
  505. package/lib/components/toggle-button-group/toggle-button-group.module.d.ts +0 -10
  506. package/lib/components/toggle-button-group/toggle-button.component.d.ts +0 -8
  507. package/lib/components/translation-form/components/textarea/translation-form-textarea.component.d.ts +0 -9
  508. package/lib/components/translation-form/components/textfield/translation-form-textfield.component.d.ts +0 -6
  509. package/lib/components/translation-form/components/translation-form.component.d.ts +0 -56
  510. package/lib/components/translation-form/components/translation-form.module.d.ts +0 -16
  511. package/lib/components/translation-form/decorators/translation-form-group.decorator.d.ts +0 -1
  512. package/lib/components/translation-form/directives/translation-context.directive.d.ts +0 -17
  513. package/lib/components/translation-form/index.d.ts +0 -1
  514. package/lib/components/translation-form/providers/nice-translation-form.service.d.ts +0 -16
  515. package/lib/components/translation-form/public-api.d.ts +0 -10
  516. package/lib/components/translation-form/toggle/translation-toggle.component.d.ts +0 -14
  517. package/lib/components/translation-form/translation.form.d.ts +0 -5
  518. package/lib/components/translation-form/validators/require-for-languages.validator.d.ts +0 -14
  519. package/lib/components/typeahead/directives/options-scroll.directive.d.ts +0 -19
  520. package/lib/components/typeahead/directives/options-scroll.module.d.ts +0 -7
  521. package/lib/components/typeahead/index.d.ts +0 -1
  522. package/lib/components/typeahead/public-api.d.ts +0 -3
  523. package/lib/components/typeahead/typeahead.component.d.ts +0 -101
  524. package/lib/components/typeahead/typeahead.module.d.ts +0 -17
  525. package/lib/directives/autofocus/autofocus.directive.d.ts +0 -9
  526. package/lib/directives/autofocus/autofocus.module.d.ts +0 -7
  527. package/lib/directives/autofocus/index.d.ts +0 -1
  528. package/lib/directives/autofocus/public-api.d.ts +0 -2
  529. package/lib/directives/autogrow/autogrow.directive.d.ts +0 -37
  530. package/lib/directives/autogrow/autogrow.module.d.ts +0 -7
  531. package/lib/directives/autogrow/index.d.ts +0 -1
  532. package/lib/directives/autogrow/public-api.d.ts +0 -2
  533. package/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.d.ts +0 -14
  534. package/lib/directives/chip-async-typeahead/index.d.ts +0 -1
  535. package/lib/directives/chip-async-typeahead/public-api.d.ts +0 -1
  536. package/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.d.ts +0 -8
  537. package/lib/directives/chip-list/chip-list-items/chip-list-items.component.d.ts +0 -26
  538. package/lib/directives/chip-list/chip-list.constant.d.ts +0 -2
  539. package/lib/directives/chip-list/chip-list.directive.d.ts +0 -32
  540. package/lib/directives/chip-list/chip-list.module.d.ts +0 -14
  541. package/lib/directives/chip-list/index.d.ts +0 -1
  542. package/lib/directives/chip-list/public-api.d.ts +0 -4
  543. package/lib/directives/draggable-list/draggable-list.directive.d.ts +0 -24
  544. package/lib/directives/draggable-list/draggable-list.module.d.ts +0 -8
  545. package/lib/directives/draggable-list/index.d.ts +0 -1
  546. package/lib/directives/draggable-list/public-api.d.ts +0 -2
  547. package/lib/directives/dropzone/dropzone.directive.d.ts +0 -11
  548. package/lib/directives/dropzone/dropzone.module.d.ts +0 -7
  549. package/lib/directives/dropzone/index.d.ts +0 -1
  550. package/lib/directives/dropzone/public-api.d.ts +0 -2
  551. package/lib/directives/image-error-placeholder/image-error-placeholder.directive.d.ts +0 -11
  552. package/lib/directives/image-error-placeholder/image-error-placeholder.module.d.ts +0 -7
  553. package/lib/directives/image-error-placeholder/index.d.ts +0 -1
  554. package/lib/directives/image-error-placeholder/public-api.d.ts +0 -2
  555. package/lib/directives/index.d.ts +0 -1
  556. package/lib/directives/material/index.d.ts +0 -1
  557. package/lib/directives/material/material.module.d.ts +0 -8
  558. package/lib/directives/material/nice-material-style.directive.d.ts +0 -9
  559. package/lib/directives/material/nice-rounded-style.directive.d.ts +0 -9
  560. package/lib/directives/material/public-api.d.ts +0 -3
  561. package/lib/directives/modals/index.d.ts +0 -1
  562. package/lib/directives/modals/modal-on-click.directive.d.ts +0 -10
  563. package/lib/directives/modals/modal-opener.directive.d.ts +0 -14
  564. package/lib/directives/modals/public-api.d.ts +0 -2
  565. package/lib/directives/public-api.d.ts +0 -15
  566. package/lib/directives/rerender/index.d.ts +0 -1
  567. package/lib/directives/rerender/public-api.d.ts +0 -1
  568. package/lib/directives/rerender/rerender.directive.d.ts +0 -10
  569. package/lib/directives/resolve/index.d.ts +0 -1
  570. package/lib/directives/resolve/public-api.d.ts +0 -1
  571. package/lib/directives/resolve/resolve.directive.d.ts +0 -18
  572. package/lib/directives/scroll-reset/index.d.ts +0 -1
  573. package/lib/directives/scroll-reset/public-api.d.ts +0 -2
  574. package/lib/directives/scroll-reset/scroll-reset.directive.d.ts +0 -22
  575. package/lib/directives/scroll-reset/scroll-reset.module.d.ts +0 -7
  576. package/lib/directives/scrollbar/index.d.ts +0 -1
  577. package/lib/directives/scrollbar/public-api.d.ts +0 -2
  578. package/lib/directives/scrollbar/scrollbar.directive.d.ts +0 -112
  579. package/lib/directives/scrollbar/scrollbar.module.d.ts +0 -7
  580. package/lib/directives/scrollbar/scrollbar.types.d.ts +0 -12
  581. package/lib/directives/stop-propagation/click-stop-propagation.directive.d.ts +0 -6
  582. package/lib/directives/stop-propagation/index.d.ts +0 -1
  583. package/lib/directives/stop-propagation/public-api.d.ts +0 -2
  584. package/lib/directives/stop-propagation/stop-propagation.module.d.ts +0 -7
  585. package/lib/directives/window/index.d.ts +0 -1
  586. package/lib/directives/window/prevent-close-window.directive.d.ts +0 -6
  587. package/lib/directives/window/public-api.d.ts +0 -2
  588. package/lib/directives/window/window-directive.module.d.ts +0 -7
  589. package/lib/nice.module.d.ts +0 -13
  590. package/lib/pipes/boolean.pipe.d.ts +0 -10
  591. package/lib/pipes/capitalize-first-letter.pipe.d.ts +0 -7
  592. package/lib/pipes/ceil.pipe.d.ts +0 -7
  593. package/lib/pipes/entries.pipe.d.ts +0 -10
  594. package/lib/pipes/find-by-key.pipe.d.ts +0 -7
  595. package/lib/pipes/first-letter.pipe.d.ts +0 -7
  596. package/lib/pipes/floor.pipe.d.ts +0 -7
  597. package/lib/pipes/index.d.ts +0 -1
  598. package/lib/pipes/join-if-defined.pipe.d.ts +0 -7
  599. package/lib/pipes/link.pipe.d.ts +0 -15
  600. package/lib/pipes/localized-boolean.pipe.d.ts +0 -10
  601. package/lib/pipes/localized-currency.pipe.d.ts +0 -10
  602. package/lib/pipes/localized-date-only.pipe.d.ts +0 -10
  603. package/lib/pipes/localized-date.pipe.d.ts +0 -11
  604. package/lib/pipes/minutes-to-time.pipe.d.ts +0 -7
  605. package/lib/pipes/number-to-ordinal-indicator.pipe.d.ts +0 -7
  606. package/lib/pipes/pad.pipe.d.ts +0 -7
  607. package/lib/pipes/phone.pipe.d.ts +0 -10
  608. package/lib/pipes/pipes.module.d.ts +0 -29
  609. package/lib/pipes/postal-code.pipe.d.ts +0 -10
  610. package/lib/pipes/public-api.d.ts +0 -24
  611. package/lib/pipes/range.pipe.d.ts +0 -7
  612. package/lib/pipes/round.pipe.d.ts +0 -7
  613. package/lib/pipes/sanitize-bypass.pipe.d.ts +0 -10
  614. package/lib/pipes/seconds-to-time.pipe.d.ts +0 -7
  615. package/lib/pipes/track-by-prop.pipe.d.ts +0 -7
  616. package/lib/providers/config/config.constants.d.ts +0 -2
  617. package/lib/providers/config/config.model.d.ts +0 -14
  618. package/lib/providers/config/config.module.d.ts +0 -18
  619. package/lib/providers/config/config.service.d.ts +0 -21
  620. package/lib/providers/config/index.d.ts +0 -1
  621. package/lib/providers/config/public-api.d.ts +0 -2
  622. package/lib/providers/index.d.ts +0 -1
  623. package/lib/providers/media-watcher/index.d.ts +0 -1
  624. package/lib/providers/media-watcher/media-watcher.module.d.ts +0 -12
  625. package/lib/providers/media-watcher/media-watcher.service.d.ts +0 -27
  626. package/lib/providers/media-watcher/public-api.d.ts +0 -2
  627. package/lib/providers/overlay/dynamic-overlay-container.service.d.ts +0 -7
  628. package/lib/providers/overlay/dynamic-overlay.service.d.ts +0 -14
  629. package/lib/providers/public-api.d.ts +0 -4
  630. package/lib/providers/splash-screen/index.d.ts +0 -1
  631. package/lib/providers/splash-screen/public-api.d.ts +0 -2
  632. package/lib/providers/splash-screen/splash-screen.module.d.ts +0 -12
  633. package/lib/providers/splash-screen/splash-screen.service.d.ts +0 -20
  634. package/lib/providers/utils/index.d.ts +0 -1
  635. package/lib/providers/utils/public-api.d.ts +0 -2
  636. package/lib/providers/utils/utils.module.d.ts +0 -9
  637. package/lib/providers/utils/utils.service.d.ts +0 -9
  638. package/lib/types/constructor.d.ts +0 -5
  639. package/lib/utils/array.utils.d.ts +0 -24
  640. package/lib/utils/case.utils.d.ts +0 -9
  641. package/lib/utils/colors.utils.d.ts +0 -9
  642. package/lib/utils/date.utils.d.ts +0 -11
  643. package/lib/utils/file.utils.d.ts +0 -13
  644. package/lib/utils/font-awesome.utils.d.ts +0 -3
  645. package/lib/utils/form-data.utils.d.ts +0 -4
  646. package/lib/utils/http-status.utils.d.ts +0 -45
  647. package/lib/utils/index.d.ts +0 -1
  648. package/lib/utils/keyboard.utils.d.ts +0 -7
  649. package/lib/utils/lexorank.utils.d.ts +0 -6
  650. package/lib/utils/modal.utils.d.ts +0 -7
  651. package/lib/utils/number.utils.d.ts +0 -7
  652. package/lib/utils/object.utils.d.ts +0 -10
  653. package/lib/utils/promise.utils.d.ts +0 -7
  654. package/lib/utils/public-api.d.ts +0 -18
  655. package/lib/utils/query-params.utils.d.ts +0 -3
  656. package/lib/utils/regex.utils.d.ts +0 -7
  657. package/lib/utils/type.utils.d.ts +0 -6
  658. package/lib/utils/url.utils.d.ts +0 -6
  659. package/public-api.d.ts +0 -8
@@ -1,599 +0,0 @@
1
- import { animate, AnimationBuilder, style } from "@angular/animations";
2
- import { coerceBooleanProperty } from "@angular/cdk/coercion";
3
- import { ScrollStrategyOptions } from "@angular/cdk/overlay";
4
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, Renderer2, ViewChild, ViewChildren, ViewEncapsulation } from "@angular/core";
5
- import { NavigationEnd, Router } from "@angular/router";
6
- import { merge, ReplaySubject } from "rxjs";
7
- import { delay, filter, takeUntil } from "rxjs/operators";
8
- import { niceAnimations } from "../../../animations";
9
- import { NiceScrollbarDirective } from "../../../directives/scrollbar";
10
- import { NiceUtilsService } from "../../../providers/utils";
11
- import { NiceNavigationComponent } from "../navigation.component";
12
- import { NiceNavigationService } from "../navigation.service";
13
- import { NiceNavigationHintService } from "../providers/hint.service";
14
- import { NiceTranslationContextService } from "../providers/translation-context.service";
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "../navigation.service";
17
- import * as i2 from "../../../providers/utils";
18
- import * as i3 from "../providers/translation-context.service";
19
- import * as i4 from "@angular/animations";
20
- import * as i5 from "@angular/router";
21
- import * as i6 from "@angular/cdk/overlay";
22
- import * as i7 from "../providers/hint.service";
23
- import * as i8 from "@angular/common";
24
- import * as i9 from "../../../directives/scrollbar/scrollbar.directive";
25
- import * as i10 from "./components/aside/aside.component";
26
- import * as i11 from "./components/basic/basic.component";
27
- import * as i12 from "./components/collapsable/collapsable.component";
28
- import * as i13 from "./components/divider/divider.component";
29
- import * as i14 from "./components/group/group.component";
30
- import * as i15 from "./components/spacer/spacer.component";
31
- import * as i16 from "../pipes/should-hide.pipe";
32
- export class NiceVerticalNavigationComponent extends NiceNavigationComponent {
33
- set navigation(navigation) {
34
- this._navigation = navigation;
35
- this._changeDetectorRef.markForCheck();
36
- }
37
- get navigation() {
38
- return this._navigation;
39
- }
40
- set forceHovered(forceHovered) {
41
- this._forceHovered = forceHovered;
42
- this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
43
- this._changeDetectorRef.markForCheck();
44
- }
45
- /**
46
- * Constructor
47
- */
48
- constructor(_changeDetectorRef, _niceNavigationService, _niceUtilsService, _translationContextService, _animationBuilder, _elementRef, _renderer2, _router, _scrollStrategyOptions, _hintService) {
49
- super(_changeDetectorRef, _niceNavigationService, _niceUtilsService, _translationContextService);
50
- this._animationBuilder = _animationBuilder;
51
- this._elementRef = _elementRef;
52
- this._renderer2 = _renderer2;
53
- this._router = _router;
54
- this._scrollStrategyOptions = _scrollStrategyOptions;
55
- this._hintService = _hintService;
56
- this._forceHovered = false;
57
- this._animationsEnabled = false;
58
- this._scrollStrategy = this._scrollStrategyOptions.block();
59
- this.name = this._niceUtilsService.randomId();
60
- this.appearance = "default";
61
- this.autoCollapse = true;
62
- this.inner = false;
63
- this.mode = "side";
64
- this.opened = true;
65
- this.hovered = false;
66
- this.hasHint = false;
67
- this.position = "left";
68
- this.showTooltips = false;
69
- this.transparentOverlay = false;
70
- this.tooltipPosition = "after";
71
- this.appearanceChanged = new EventEmitter();
72
- this.modeChanged = new EventEmitter();
73
- this.openedChanged = new EventEmitter();
74
- this.hoveredChanged = new EventEmitter();
75
- this.positionChanged = new EventEmitter();
76
- this.activeAsideItemId = null;
77
- this.onCollapsableItemCollapsed = new ReplaySubject(1);
78
- this.onCollapsableItemExpanded = new ReplaySubject(1);
79
- this._handleAsideOverlayClick = () => {
80
- this.closeAside();
81
- };
82
- this._handleOverlayClick = () => {
83
- this.close();
84
- };
85
- }
86
- // -----------------------------------------------------------------------------------------------------
87
- // @ Accessors
88
- // -----------------------------------------------------------------------------------------------------
89
- /**
90
- * Host binding for component classes
91
- */
92
- get classList() {
93
- return {
94
- "nice-vertical-navigation-animations-enabled": this._animationsEnabled,
95
- [`nice-vertical-navigation-appearance-${this.appearance}`]: true,
96
- "nice-vertical-navigation-hover": this.hovered || this._forceHovered,
97
- "nice-vertical-navigation-inner": this.inner,
98
- "nice-vertical-navigation-mode-over": this.mode === "over",
99
- "nice-vertical-navigation-mode-side": this.mode === "side",
100
- "nice-vertical-navigation-opened": this.opened,
101
- "nice-vertical-navigation-position-left": this.position === "left",
102
- "nice-vertical-navigation-position-right": this.position === "right",
103
- "nice-vertical-navigation-has-hint": this.hasHint
104
- };
105
- }
106
- /**
107
- * Host binding for component inline styles
108
- */
109
- get styleList() {
110
- return {
111
- "visibility": this.opened ? "visible" : "hidden"
112
- };
113
- }
114
- /**
115
- * Setter for niceScrollbarDirectives
116
- */
117
- set niceScrollbarDirectives(niceScrollbarDirectives) {
118
- // Store the directives
119
- this._niceScrollbarDirectives = niceScrollbarDirectives;
120
- // Return if there are no directives
121
- if (niceScrollbarDirectives.length === 0) {
122
- return;
123
- }
124
- // Unsubscribe the previous subscriptions
125
- if (this._niceScrollbarDirectivesSubscription) {
126
- this._niceScrollbarDirectivesSubscription.unsubscribe();
127
- }
128
- // Update the scrollbars on collapsable items' collapse/expand
129
- this._niceScrollbarDirectivesSubscription =
130
- merge(this.onCollapsableItemCollapsed, this.onCollapsableItemExpanded)
131
- .pipe(takeUntil(this._unsubscribeAll), delay(250))
132
- .subscribe(() => {
133
- // Loop through the scrollbars and update them
134
- niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
135
- niceScrollbarDirective.update();
136
- });
137
- });
138
- }
139
- // -----------------------------------------------------------------------------------------------------
140
- // @ Lifecycle hooks
141
- // -----------------------------------------------------------------------------------------------------
142
- /**
143
- * On changes
144
- *
145
- * @param changes
146
- */
147
- ngOnChanges(changes) {
148
- super.ngOnChanges(changes);
149
- // Appearance
150
- if ("appearance" in changes) {
151
- // Execute the observable
152
- this.appearanceChanged.next(changes.appearance.currentValue);
153
- }
154
- // Inner
155
- if ("inner" in changes) {
156
- // Coerce the value to a boolean
157
- this.inner = coerceBooleanProperty(changes.inner.currentValue);
158
- }
159
- // Mode
160
- if ("mode" in changes) {
161
- // Get the previous and current values
162
- const currentMode = changes.mode.currentValue;
163
- const previousMode = changes.mode.previousValue;
164
- // Disable the animations
165
- this._disableAnimations();
166
- // If the mode changes: 'over -> side'
167
- if (previousMode === "over" && currentMode === "side") {
168
- // Hide the overlay
169
- this._hideOverlay();
170
- }
171
- // If the mode changes: 'side -> over'
172
- if (previousMode === "side" && currentMode === "over") {
173
- // Close the aside
174
- this.closeAside();
175
- // If the navigation is opened
176
- if (this.opened) {
177
- // Show the overlay
178
- this._showOverlay();
179
- }
180
- }
181
- // Execute the observable
182
- this.modeChanged.next(currentMode);
183
- // Enable the animations after a delay
184
- // The delay must be bigger than the current transition-duration
185
- // to make sure nothing will be animated while the mode changing
186
- setTimeout(() => {
187
- this._enableAnimations();
188
- }, 500);
189
- }
190
- // Opened
191
- if ("opened" in changes) {
192
- // Coerce the value to a boolean
193
- this.opened = coerceBooleanProperty(changes.opened.currentValue);
194
- // Open/close the navigation
195
- this._toggleOpened(this.opened);
196
- }
197
- // Position
198
- if ("position" in changes) {
199
- // Execute the observable
200
- this.positionChanged.next(changes.position.currentValue);
201
- }
202
- // Transparent overlay
203
- if ("transparentOverlay" in changes) {
204
- // Coerce the value to a boolean
205
- this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);
206
- }
207
- }
208
- /**
209
- * On init
210
- */
211
- ngOnInit() {
212
- super.ngOnInit();
213
- // Make sure the name input is not an empty string
214
- if (this.name === "") {
215
- this.name = this._niceUtilsService.randomId();
216
- }
217
- // Subscribe to the 'NavigationEnd' event
218
- this._router.events
219
- .pipe(filter(event => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
220
- .subscribe(() => {
221
- // If the mode is 'over' and the navigation is opened...
222
- if (this.mode === "over" && this.opened) {
223
- // Close the navigation
224
- this.close();
225
- }
226
- // If the mode is 'side' and the aside is active...
227
- if (this.mode === "side" && this.activeAsideItemId) {
228
- // Close the aside
229
- this.closeAside();
230
- }
231
- });
232
- this._hintService.hasActiveHint$.pipe(takeUntil(this._unsubscribeAll)).subscribe(hasHint => {
233
- this.hasHint = hasHint;
234
- this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
235
- });
236
- }
237
- /**
238
- * After view init
239
- */
240
- ngAfterViewInit() {
241
- setTimeout(() => {
242
- // Return if 'navigation content' element does not exist
243
- if (!this._navigationContentEl) {
244
- return;
245
- }
246
- // If 'navigation content' element doesn't have
247
- // perfect scrollbar activated on it...
248
- if (!this._navigationContentEl.nativeElement.classList.contains("ps")) {
249
- // Find the active item
250
- const activeItem = this._navigationContentEl.nativeElement.querySelector(".nice-vertical-navigation-item-active");
251
- // If the active item exists, scroll it into view
252
- if (activeItem) {
253
- activeItem.scrollIntoView();
254
- }
255
- }
256
- // Otherwise
257
- else {
258
- // Go through all the scrollbar directives
259
- this._niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
260
- // Skip if not enabled
261
- if (!niceScrollbarDirective.isEnabled()) {
262
- return;
263
- }
264
- // Scroll to the active element
265
- niceScrollbarDirective.scrollToElement(".nice-vertical-navigation-item-active", -120, true);
266
- });
267
- }
268
- });
269
- }
270
- // -----------------------------------------------------------------------------------------------------
271
- // @ Public methods
272
- // -----------------------------------------------------------------------------------------------------
273
- /**
274
- * Open the navigation
275
- */
276
- open() {
277
- // Return if the navigation is already open
278
- if (this.opened) {
279
- return;
280
- }
281
- // Set the opened
282
- this._toggleOpened(true);
283
- }
284
- /**
285
- * Close the navigation
286
- */
287
- close() {
288
- // Return if the navigation is already closed
289
- if (!this.opened) {
290
- return;
291
- }
292
- // Close the aside
293
- this.closeAside();
294
- // Set the opened
295
- this._toggleOpened(false);
296
- }
297
- /**
298
- * Toggle the navigation
299
- */
300
- toggle() {
301
- // Toggle
302
- if (this.opened) {
303
- this.close();
304
- }
305
- else {
306
- this.open();
307
- }
308
- }
309
- /**
310
- * Open the aside
311
- */
312
- openAside(item) {
313
- // Return if the item is disabled
314
- if (item.disabled || !item.id) {
315
- return;
316
- }
317
- // Open
318
- this.activeAsideItemId = item.id;
319
- // Show the aside overlay
320
- this._showAsideOverlay();
321
- // Mark for check
322
- this._changeDetectorRef.markForCheck();
323
- }
324
- /**
325
- * Close the aside
326
- */
327
- closeAside() {
328
- // Close
329
- this.activeAsideItemId = null;
330
- // Hide the aside overlay
331
- this._hideAsideOverlay();
332
- // Mark for check
333
- this._changeDetectorRef.markForCheck();
334
- }
335
- /**
336
- * Toggle the aside
337
- */
338
- toggleAside(item) {
339
- // Toggle
340
- if (this.activeAsideItemId === item.id) {
341
- this.closeAside();
342
- }
343
- else {
344
- this.openAside(item);
345
- }
346
- }
347
- // -----------------------------------------------------------------------------------------------------
348
- // @ Private methods
349
- // -----------------------------------------------------------------------------------------------------
350
- /**
351
- * Enable the animations
352
- *
353
- * @private
354
- */
355
- _enableAnimations() {
356
- // Return if the animations are already enabled
357
- if (this._animationsEnabled) {
358
- return;
359
- }
360
- // Enable the animations
361
- this._animationsEnabled = true;
362
- }
363
- /**
364
- * Disable the animations
365
- *
366
- * @private
367
- */
368
- _disableAnimations() {
369
- // Return if the animations are already disabled
370
- if (!this._animationsEnabled) {
371
- return;
372
- }
373
- // Disable the animations
374
- this._animationsEnabled = false;
375
- }
376
- /**
377
- * Show the overlay
378
- *
379
- * @private
380
- */
381
- _showOverlay() {
382
- // Return if there is already an overlay
383
- if (this._asideOverlay) {
384
- return;
385
- }
386
- // Create the overlay element
387
- this._overlay = this._renderer2.createElement("div");
388
- // Add a class to the overlay element
389
- this._overlay.classList.add("nice-vertical-navigation-overlay");
390
- // Add a class depending on the transparentOverlay option
391
- if (this.transparentOverlay) {
392
- this._overlay.classList.add("nice-vertical-navigation-overlay-transparent");
393
- }
394
- // Append the overlay to the parent of the navigation
395
- this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);
396
- // Enable block scroll strategy
397
- this._scrollStrategy.enable();
398
- // Create the enter animation and attach it to the player
399
- this._player = this._animationBuilder.build([
400
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
401
- ]).create(this._overlay);
402
- // Play the animation
403
- this._player.play();
404
- // Add an event listener to the overlay
405
- this._overlay.addEventListener("click", this._handleOverlayClick);
406
- }
407
- /**
408
- * Hide the overlay
409
- *
410
- * @private
411
- */
412
- _hideOverlay() {
413
- if (!this._overlay) {
414
- return;
415
- }
416
- // Create the leave animation and attach it to the player
417
- this._player = this._animationBuilder.build([
418
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
419
- ]).create(this._overlay);
420
- // Play the animation
421
- this._player.play();
422
- // Once the animation is done...
423
- this._player.onDone(() => {
424
- // If the overlay still exists...
425
- if (this._overlay) {
426
- // Remove the event listener
427
- this._overlay.removeEventListener("click", this._handleOverlayClick);
428
- // Remove the overlay
429
- this._overlay.parentNode.removeChild(this._overlay);
430
- this._overlay = null;
431
- }
432
- // Disable block scroll strategy
433
- this._scrollStrategy.disable();
434
- });
435
- }
436
- /**
437
- * Show the aside overlay
438
- *
439
- * @private
440
- */
441
- _showAsideOverlay() {
442
- // Return if there is already an overlay
443
- if (this._asideOverlay) {
444
- return;
445
- }
446
- // Create the aside overlay element
447
- this._asideOverlay = this._renderer2.createElement("div");
448
- // Add a class to the aside overlay element
449
- this._asideOverlay.classList.add("nice-vertical-navigation-aside-overlay");
450
- // Append the aside overlay to the parent of the navigation
451
- this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);
452
- // Create the enter animation and attach it to the player
453
- this._player =
454
- this._animationBuilder
455
- .build([
456
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
457
- ]).create(this._asideOverlay);
458
- // Play the animation
459
- this._player.play();
460
- // Add an event listener to the aside overlay
461
- this._asideOverlay.addEventListener("click", this._handleAsideOverlayClick);
462
- }
463
- /**
464
- * Hide the aside overlay
465
- *
466
- * @private
467
- */
468
- _hideAsideOverlay() {
469
- if (!this._asideOverlay) {
470
- return;
471
- }
472
- // Create the leave animation and attach it to the player
473
- this._player =
474
- this._animationBuilder
475
- .build([
476
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
477
- ]).create(this._asideOverlay);
478
- // Play the animation
479
- this._player.play();
480
- // Once the animation is done...
481
- this._player.onDone(() => {
482
- // If the aside overlay still exists...
483
- if (this._asideOverlay) {
484
- // Remove the event listener
485
- this._asideOverlay.removeEventListener("click", this._handleAsideOverlayClick);
486
- // Remove the aside overlay
487
- this._asideOverlay.parentNode.removeChild(this._asideOverlay);
488
- this._asideOverlay = null;
489
- }
490
- });
491
- }
492
- /**
493
- * On mouseenter
494
- */
495
- _onMouseenter() {
496
- // Enable the animations
497
- this._enableAnimations();
498
- // Set the hovered
499
- this.hovered = true;
500
- this.hoveredChanged.next(this.hovered || this._forceHovered);
501
- }
502
- /**
503
- * On mouseleave
504
- */
505
- _onMouseleave() {
506
- // Enable the animations
507
- this._enableAnimations();
508
- // Set the hovered
509
- this.hovered = false;
510
- this.hoveredChanged.next(this.hovered || this._forceHovered || this.hasHint);
511
- }
512
- /**
513
- * Open/close the navigation
514
- *
515
- * @param open
516
- * @private
517
- */
518
- _toggleOpened(open) {
519
- // Set the opened
520
- this.opened = open;
521
- // Enable the animations
522
- this._enableAnimations();
523
- // If the navigation opened, and the mode
524
- // is 'over', show the overlay
525
- if (this.mode === "over") {
526
- if (this.opened) {
527
- this._showOverlay();
528
- }
529
- else {
530
- this._hideOverlay();
531
- }
532
- }
533
- // Execute the observable
534
- this.openedChanged.next(open);
535
- }
536
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NiceVerticalNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceNavigationService }, { token: i2.NiceUtilsService }, { token: i3.NiceTranslationContextService }, { token: i4.AnimationBuilder }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i5.Router }, { token: i6.ScrollStrategyOptions }, { token: i7.NiceNavigationHintService }], target: i0.ɵɵFactoryTarget.Component }); }
537
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NiceVerticalNavigationComponent, selector: "nice-vertical-navigation", inputs: { name: "name", appearance: "appearance", autoCollapse: "autoCollapse", inner: "inner", mode: "mode", opened: "opened", hovered: "hovered", hasHint: "hasHint", position: "position", showTooltips: "showTooltips", transparentOverlay: "transparentOverlay", tooltipPosition: "tooltipPosition", translationContext: "translationContext", navigation: "navigation" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", hoveredChanged: "hoveredChanged", positionChanged: "positionChanged" }, host: { listeners: { "mouseenter": "_onMouseenter()", "mouseleave": "_onMouseleave()" }, properties: { "class": "this.classList", "style": "this.styleList" } }, providers: [NiceTranslationContextService], viewQueries: [{ propertyName: "_navigationContentEl", first: true, predicate: ["navigationContent"], descendants: true }, { propertyName: "niceScrollbarDirectives", predicate: NiceScrollbarDirective, descendants: true }], exportAs: ["niceVerticalNavigation"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NiceScrollbarDirective, selector: "[niceScrollbar]", inputs: ["niceScrollbar", "niceScrollbarOptions"], exportAs: ["niceScrollbar"] }, { kind: "component", type: i10.NiceVerticalNavigationAsideItemComponent, selector: "nice-vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "name", "showTooltips", "skipChildren", "tooltipPosition"] }, { kind: "component", type: i11.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i12.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i13.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: i14.NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i15.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i16.NiceShouldHidePipe, name: "niceShouldHide" }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
538
- }
539
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NiceVerticalNavigationComponent, decorators: [{
540
- type: Component,
541
- args: [{ selector: "nice-vertical-navigation", animations: niceAnimations, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [NiceTranslationContextService], exportAs: "niceVerticalNavigation", template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n" }]
542
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NiceNavigationService }, { type: i2.NiceUtilsService }, { type: i3.NiceTranslationContextService }, { type: i4.AnimationBuilder }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i5.Router }, { type: i6.ScrollStrategyOptions }, { type: i7.NiceNavigationHintService }], propDecorators: { name: [{
543
- type: Input
544
- }], appearance: [{
545
- type: Input
546
- }], autoCollapse: [{
547
- type: Input
548
- }], inner: [{
549
- type: Input
550
- }], mode: [{
551
- type: Input
552
- }], opened: [{
553
- type: Input
554
- }], hovered: [{
555
- type: Input
556
- }], hasHint: [{
557
- type: Input
558
- }], position: [{
559
- type: Input
560
- }], showTooltips: [{
561
- type: Input
562
- }], transparentOverlay: [{
563
- type: Input
564
- }], tooltipPosition: [{
565
- type: Input
566
- }], translationContext: [{
567
- type: Input
568
- }], appearanceChanged: [{
569
- type: Output
570
- }], modeChanged: [{
571
- type: Output
572
- }], openedChanged: [{
573
- type: Output
574
- }], hoveredChanged: [{
575
- type: Output
576
- }], positionChanged: [{
577
- type: Output
578
- }], _navigationContentEl: [{
579
- type: ViewChild,
580
- args: ["navigationContent"]
581
- }], navigation: [{
582
- type: Input
583
- }], classList: [{
584
- type: HostBinding,
585
- args: ["class"]
586
- }], styleList: [{
587
- type: HostBinding,
588
- args: ["style"]
589
- }], niceScrollbarDirectives: [{
590
- type: ViewChildren,
591
- args: [NiceScrollbarDirective]
592
- }], _onMouseenter: [{
593
- type: HostListener,
594
- args: ["mouseenter"]
595
- }], _onMouseleave: [{
596
- type: HostListener,
597
- args: ["mouseleave"]
598
- }] } });
599
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBa0IscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStC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O2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlVLGlCQUFpQjtzQkFEaEMsTUFBTTtnQkFJUyxXQUFXO3NCQUQxQixNQUFNO2dCQUlTLGFBQWE7c0JBRDVCLE1BQU07Z0JBSVMsY0FBYztzQkFEN0IsTUFBTTtnQkFJUyxlQUFlO3NCQUQ5QixNQUFNO2dCQUlDLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSW5CLFVBQVU7c0JBRHBCLEtBQUs7Z0JBb0RLLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMsT0FBTztnQkFvQlQsU0FBUztzQkFEbkIsV0FBVzt1QkFBQyxPQUFPO2dCQVdULHVCQUF1QjtzQkFEakMsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBbWQ3QixhQUFhO3NCQURuQixZQUFZO3VCQUFDLFlBQVk7Z0JBY25CLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkJ1aWxkZXIsIEFuaW1hdGlvblBsYXllciwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBTY3JvbGxTdHJhdGVneSwgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IG1lcmdlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBuaWNlQW5pbWF0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYmFyXCI7XG5pbXBvcnQgeyBOaWNlVXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3Byb3ZpZGVycy91dGlsc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vbmF2aWdhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE5pY2VOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgTmljZU5hdmlnYXRpb25JdGVtLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvblxufSBmcm9tIFwiLi4vbmF2aWdhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25IaW50U2VydmljZSB9IGZyb20gXCIuLi9wcm92aWRlcnMvaGludC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOaWNlVHJhbnNsYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gXCIuLi9wcm92aWRlcnMvdHJhbnNsYXRpb24tY29udGV4dC5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vdmVydGljYWwuY29tcG9uZW50Lmh0bWxcIixcbiAgICBhbmltYXRpb25zOiBuaWNlQW5pbWF0aW9ucyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW05pY2VUcmFuc2xhdGlvbkNvbnRleHRTZXJ2aWNlXSxcbiAgICBleHBvcnRBczogXCJuaWNlVmVydGljYWxOYXZpZ2F0aW9uXCJcbn0pXG5leHBvcnQgY2xhc3MgTmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudCBleHRlbmRzIE5pY2VOYXZpZ2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pbm5lcjogQm9vbGVhbklucHV0O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcGVuZWQ6IEJvb2xlYW5JbnB1dDtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdHJhbnNwYXJlbnRPdmVybGF5OiBCb29sZWFuSW5wdXQ7XG5cbiAgICBwcml2YXRlIF9mb3JjZUhvdmVyZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9hbmltYXRpb25zRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2FzaWRlT3ZlcmxheTogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlQXNpZGVPdmVybGF5Q2xpY2s6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVPdmVybGF5Q2xpY2s6IGFueTtcbiAgICBwcml2YXRlIF9vdmVybGF5OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9wbGF5ZXI6IEFuaW1hdGlvblBsYXllcjtcbiAgICBwcml2YXRlIF9zY3JvbGxTdHJhdGVneTogU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9zY3JvbGxTdHJhdGVneU9wdGlvbnMuYmxvY2soKTtcbiAgICBwcml2YXRlIF9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcyE6IFF1ZXJ5TGlzdDxOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlPjtcbiAgICBwcml2YXRlIF9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nID0gdGhpcy5fbmljZVV0aWxzU2VydmljZS5yYW5kb21JZCgpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXBwZWFyYW5jZTogTmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2UgPSBcImRlZmF1bHRcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF1dG9Db2xsYXBzZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbm5lciA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbW9kZTogTmljZVZlcnRpY2FsTmF2aWdhdGlvbk1vZGUgPSBcInNpZGVcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9wZW5lZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBob3ZlcmVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoYXNIaW50ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwb3NpdGlvbjogTmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uID0gXCJsZWZ0XCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93VG9vbHRpcHMgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRyYW5zcGFyZW50T3ZlcmxheSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdG9vbHRpcFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSBcImFmdGVyXCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0cmFuc2xhdGlvbkNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwZWFyYW5jZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uTW9kZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBvcGVuZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGhvdmVyZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IHBvc2l0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uPigpO1xuXG4gICAgQFZpZXdDaGlsZChcIm5hdmlnYXRpb25Db250ZW50XCIpXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkNvbnRlbnRFbDogRWxlbWVudFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBuYXZpZ2F0aW9uKG5hdmlnYXRpb246IE5pY2VOYXZpZ2F0aW9uSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBuYXZpZ2F0aW9uKCk6IE5pY2VOYXZpZ2F0aW9uSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb3JjZUhvdmVyZWQoZm9yY2VIb3ZlcmVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvcmNlSG92ZXJlZCA9IGZvcmNlSG92ZXJlZDtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKSB8fCB0aGlzLmhhc0hpbnQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZlQXNpZGVJdGVtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBvbkNvbGxhcHNhYmxlSXRlbUNvbGxhcHNlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5pY2VOYXZpZ2F0aW9uSXRlbT4oMSk7XG4gICAgcHVibGljIG9uQ29sbGFwc2FibGVJdGVtRXhwYW5kZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxOaWNlTmF2aWdhdGlvbkl0ZW0+KDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgX25pY2VOYXZpZ2F0aW9uU2VydmljZTogTmljZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBfbmljZVV0aWxzU2VydmljZTogTmljZVV0aWxzU2VydmljZSxcbiAgICAgICAgX3RyYW5zbGF0aW9uQ29udGV4dFNlcnZpY2U6IE5pY2VUcmFuc2xhdGlvbkNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5T3B0aW9uczogU2Nyb2xsU3RyYXRlZ3lPcHRpb25zLFxuICAgICAgICBwcml2YXRlIF9oaW50U2VydmljZTogTmljZU5hdmlnYXRpb25IaW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIF9uaWNlTmF2aWdhdGlvblNlcnZpY2UsIF9uaWNlVXRpbHNTZXJ2aWNlLCBfdHJhbnNsYXRpb25Db250ZXh0U2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBBY2Nlc3NvcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBiaW5kaW5nIGZvciBjb21wb25lbnQgY2xhc3Nlc1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG4gICAgcHVibGljIGdldCBjbGFzc0xpc3QoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFuaW1hdGlvbnMtZW5hYmxlZFwiOiB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCxcbiAgICAgICAgICAgIFtgbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFwcGVhcmFuY2UtJHt0aGlzLmFwcGVhcmFuY2V9YF06IHRydWUsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ob3ZlclwiOiB0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taW5uZXJcIjogdGhpcy5pbm5lcixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW1vZGUtb3ZlclwiOiB0aGlzLm1vZGUgPT09IFwib3ZlclwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tbW9kZS1zaWRlXCI6IHRoaXMubW9kZSA9PT0gXCJzaWRlXCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vcGVuZWRcIjogdGhpcy5vcGVuZWQsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1wb3NpdGlvbi1sZWZ0XCI6IHRoaXMucG9zaXRpb24gPT09IFwibGVmdFwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tcG9zaXRpb24tcmlnaHRcIjogdGhpcy5wb3NpdGlvbiA9PT0gXCJyaWdodFwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taGFzLWhpbnRcIjogdGhpcy5oYXNIaW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBiaW5kaW5nIGZvciBjb21wb25lbnQgaW5saW5lIHN0eWxlc1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhcInN0eWxlXCIpXG4gICAgcHVibGljIGdldCBzdHlsZUxpc3QoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLm9wZW5lZCA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHRlciBmb3IgbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKE5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpXG4gICAgcHVibGljIHNldCBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcyhuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlczogUXVlcnlMaXN0PE5pY2VTY3JvbGxiYXJEaXJlY3RpdmU+KSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBkaXJlY3RpdmVzXG4gICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzID0gbmljZVNjcm9sbGJhckRpcmVjdGl2ZXM7XG5cbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGFyZSBubyBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIHRoZSBwcmV2aW91cyBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmICh0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc2Nyb2xsYmFycyBvbiBjb2xsYXBzYWJsZSBpdGVtcycgY29sbGFwc2UvZXhwYW5kXG4gICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHRoaXMub25Db2xsYXBzYWJsZUl0ZW1Db2xsYXBzZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNhYmxlSXRlbUV4cGFuZGVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDI1MClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBzY3JvbGxiYXJzIGFuZCB1cGRhdGUgdGhlbVxuICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5mb3JFYWNoKChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgTGlmZWN5Y2xlIGhvb2tzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9uIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgICAgICAgLy8gQXBwZWFyYW5jZVxuICAgICAgICBpZiAoXCJhcHBlYXJhbmNlXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlQ2hhbmdlZC5uZXh0KGNoYW5nZXMuYXBwZWFyYW5jZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5uZXJcbiAgICAgICAgaWYgKFwiaW5uZXJcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy5pbm5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLmlubmVyLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb2RlXG4gICAgICAgIGlmIChcIm1vZGVcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE1vZGUgPSBjaGFuZ2VzLm1vZGUuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNNb2RlID0gY2hhbmdlcy5tb2RlLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGNoYW5nZXM6ICdvdmVyIC0+IHNpZGUnXG4gICAgICAgICAgICBpZiAocHJldmlvdXNNb2RlID09PSBcIm92ZXJcIiAmJiBjdXJyZW50TW9kZSA9PT0gXCJzaWRlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgY2hhbmdlczogJ3NpZGUgLT4gb3ZlcidcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGUgPT09IFwic2lkZVwiICYmIGN1cnJlbnRNb2RlID09PSBcIm92ZXJcIikge1xuICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gaXMgb3BlbmVkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3cgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd092ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMubW9kZUNoYW5nZWQubmV4dChjdXJyZW50TW9kZSk7XG5cbiAgICAgICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9ucyBhZnRlciBhIGRlbGF5XG4gICAgICAgICAgICAvLyBUaGUgZGVsYXkgbXVzdCBiZSBiaWdnZXIgdGhhbiB0aGUgY3VycmVudCB0cmFuc2l0aW9uLWR1cmF0aW9uXG4gICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgbm90aGluZyB3aWxsIGJlIGFuaW1hdGVkIHdoaWxlIHRoZSBtb2RlIGNoYW5naW5nXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BlbmVkXG4gICAgICAgIGlmIChcIm9wZW5lZFwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLm9wZW5lZC5jdXJyZW50VmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBPcGVuL2Nsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQodGhpcy5vcGVuZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUG9zaXRpb25cbiAgICAgICAgaWYgKFwicG9zaXRpb25cIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlZC5uZXh0KGNoYW5nZXMucG9zaXRpb24uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zcGFyZW50IG92ZXJsYXlcbiAgICAgICAgaWYgKFwidHJhbnNwYXJlbnRPdmVybGF5XCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRPdmVybGF5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMudHJhbnNwYXJlbnRPdmVybGF5LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBpbml0XG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpbnB1dCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmICh0aGlzLm5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMuX25pY2VVdGlsc1NlcnZpY2UucmFuZG9tSWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgJ05hdmlnYXRpb25FbmQnIGV2ZW50XG4gICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGlzICdvdmVyJyBhbmQgdGhlIG5hdmlnYXRpb24gaXMgb3BlbmVkLi4uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJvdmVyXCIgJiYgdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGlzICdzaWRlJyBhbmQgdGhlIGFzaWRlIGlzIGFjdGl2ZS4uLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic2lkZVwiICYmIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2hpbnRTZXJ2aWNlLmhhc0FjdGl2ZUhpbnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSkuc3Vic2NyaWJlKGhhc0hpbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNIaW50ID0gaGFzSGludDtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZENoYW5nZWQubmV4dCgodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCkgfHwgdGhpcy5oYXNIaW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgdmlldyBpbml0XG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiBpZiAnbmF2aWdhdGlvbiBjb250ZW50JyBlbGVtZW50IGRvZXMgbm90IGV4aXN0XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25hdmlnYXRpb25Db250ZW50RWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmICduYXZpZ2F0aW9uIGNvbnRlbnQnIGVsZW1lbnQgZG9lc24ndCBoYXZlXG4gICAgICAgICAgICAvLyBwZXJmZWN0IHNjcm9sbGJhciBhY3RpdmF0ZWQgb24gaXQuLi5cbiAgICAgICAgICAgIGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInBzXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgYWN0aXZlIGl0ZW1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYWN0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2ZSBpdGVtIGV4aXN0cywgc2Nyb2xsIGl0IGludG8gdmlld1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0ZW0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggYWxsIHRoZSBzY3JvbGxiYXIgZGlyZWN0aXZlc1xuICAgICAgICAgICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmZvckVhY2goKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIG5vdCBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmljZVNjcm9sbGJhckRpcmVjdGl2ZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHRvIHRoZSBhY3RpdmUgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLnNjcm9sbFRvRWxlbWVudChcIi5uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmVcIiwgLTEyMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQdWJsaWMgbWV0aG9kc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHRoZSBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IG9wZW5cbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgICBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICAvLyBUb2dnbGVcbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Bc2lkZShpdGVtOiBOaWNlTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBpdGVtIGlzIGRpc2FibGVkXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkIHx8ICFpdGVtLmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcGVuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPSBpdGVtLmlkO1xuXG4gICAgICAgIC8vIFNob3cgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fc2hvd0FzaWRlT3ZlcmxheSgpO1xuXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBhc2lkZVxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZUFzaWRlKCk6IHZvaWQge1xuICAgICAgICAvLyBDbG9zZVxuICAgICAgICB0aGlzLmFjdGl2ZUFzaWRlSXRlbUlkID0gbnVsbDtcblxuICAgICAgICAvLyBIaWRlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX2hpZGVBc2lkZU92ZXJsYXkoKTtcblxuICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUFzaWRlKGl0ZW06IE5pY2VOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBUb2dnbGVcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuQXNpZGUoaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgUHJpdmF0ZSBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9lbmFibGVBbmltYXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGFscmVhZHkgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNhYmxlQW5pbWF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBhbmltYXRpb25zIGFyZSBhbHJlYWR5IGRpc2FibGVkXG4gICAgICAgIGlmICghdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3dPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX292ZXJsYXkgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyB0byB0aGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX292ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vdmVybGF5XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIGRlcGVuZGluZyBvbiB0aGUgdHJhbnNwYXJlbnRPdmVybGF5IG9wdGlvblxuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudE92ZXJsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vdmVybGF5LXRyYW5zcGFyZW50XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBvdmVybGF5IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCB0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBFbmFibGUgYmxvY2sgc2Nyb2xsIHN0cmF0ZWd5XG4gICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZW50ZXIgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPSB0aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgICBdKS5jcmVhdGUodGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9oaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxlYXZlIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID0gdGhpcy5fYW5pbWF0aW9uQnVpbGRlci5idWlsZChbXG4gICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDB9KSlcbiAgICAgICAgXSkuY3JlYXRlKHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBkb25lLi4uXG4gICAgICAgIHRoaXMuX3BsYXllci5vbkRvbmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgb3ZlcmxheSBzdGlsbCBleGlzdHMuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fb3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgYmxvY2sgc2Nyb2xsIHN0cmF0ZWd5XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2hvd0FzaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGlzIGFscmVhZHkgYW4gb3ZlcmxheVxuICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGFzaWRlIG92ZXJsYXkgZWxlbWVudFxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyB0byB0aGUgYXNpZGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLW92ZXJsYXlcIik7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBhc2lkZSBvdmVybGF5IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCB0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZW50ZXIgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPVxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uQnVpbGRlclxuICAgICAgICAgICAgICAgIC5idWlsZChbXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGVBc2lkZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxlYXZlIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID1cbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXJcbiAgICAgICAgICAgICAgICAuYnVpbGQoW1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDB9KSlcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUodGhpcy5fYXNpZGVPdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBPbmNlIHRoZSBhbmltYXRpb24gaXMgZG9uZS4uLlxuICAgICAgICB0aGlzLl9wbGF5ZXIub25Eb25lKCgpID0+IHtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGFzaWRlIG92ZXJsYXkgc3RpbGwgZXhpc3RzLi4uXG4gICAgICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2spO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fYXNpZGVPdmVybGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBtb3VzZWVudGVyXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgICBwdWJsaWMgX29uTW91c2VlbnRlcigpOiB2b2lkIHtcbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIGhvdmVyZWRcbiAgICAgICAgdGhpcy5ob3ZlcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIG1vdXNlbGVhdmVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VsZWF2ZVwiKVxuICAgIHB1YmxpYyBfb25Nb3VzZWxlYXZlKCk6IHZvaWQge1xuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaG92ZXJlZFxuICAgICAgICB0aGlzLmhvdmVyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQgfHwgdGhpcy5oYXNIaW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuL2Nsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlT3BlbmVkKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuO1xuXG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gb3BlbmVkLCBhbmQgdGhlIG1vZGVcbiAgICAgICAgLy8gaXMgJ292ZXInLCBzaG93IHRoZSBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwib3ZlclwiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICB0aGlzLm9wZW5lZENoYW5nZWQubmV4dChvcGVuKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXdyYXBwZXJcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50XCJcbiAgICAgICAgbmljZVNjcm9sbGJhclxuICAgICAgICBbbmljZVNjcm9sbGJhck9wdGlvbnNdPVwieyB3aGVlbFByb3BhZ2F0aW9uOiBpbm5lciwgc3VwcHJlc3NTY3JvbGxYOiB0cnVlIH1cIlxuICAgICAgICAjbmF2aWdhdGlvbkNvbnRlbnRcbiAgICA+XG4gICAgICAgIDwhLS0gQ29udGVudCBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29udGVudC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29udGVudEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSXRlbXMgLS0+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbmF2aWdhdGlvbjsgdHJhY2tCeTogdHJhY2tCeUZuXCIgW0AuZGlzYWJsZWRdPVwiIWFuaW1hdGVOZXh0TmF2Q2hhbmdlXCIgQHNsaWRlSW5SaWdodD5cbiAgICAgICAgICAgIDwhLS0gU2tpcCB0aGUgaGlkZGVuIGl0ZW1zIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXRlbSB8IG5pY2VTaG91bGRIaWRlIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdhc2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtSWRdPVwiYWN0aXZlQXNpZGVJdGVtSWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtza2lwQ2hpbGRyZW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQXNpZGUoaXRlbSlcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBCYXNpYyAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdiYXNpYydcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1iYXNpYy1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBDb2xsYXBzYWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdjb2xsYXBzYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERpdmlkZXIgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkaXZpZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBHcm91cCAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNwYWNlciAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXNwYWNlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnc3BhY2VyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW0+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDb250ZW50IGZvb3RlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50LWZvb3RlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db250ZW50Rm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZm9vdGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uRm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEFzaWRlIC0tPlxuPGRpdlxuICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLXdyYXBwZXJcIlxuICAgICpuZ0lmPVwiYWN0aXZlQXNpZGVJdGVtSWRcIlxuICAgIG5pY2VTY3JvbGxiYXJcbiAgICBbbmljZVNjcm9sbGJhck9wdGlvbnNdPVwieyB3aGVlbFByb3BhZ2F0aW9uOiBmYWxzZSwgc3VwcHJlc3NTY3JvbGxYOiB0cnVlIH1cIlxuICAgIFtAZmFkZUluTGVmdF09XCJwb3NpdGlvbiA9PT0gJ2xlZnQnXCJcbiAgICBbQGZhZGVJblJpZ2h0XT1cInBvc2l0aW9uID09PSAncmlnaHQnXCJcbiAgICBbQGZhZGVPdXRMZWZ0XT1cInBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtAZmFkZU91dFJpZ2h0XT1cInBvc2l0aW9uID09PSAncmlnaHQnXCJcbj5cblxuICAgIDwhLS0gSXRlbXMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBuYXZpZ2F0aW9uOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgPCEtLSBTa2lwIHRoZSBoaWRkZW4gaXRlbXMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXRlbS5oaWRkZW4gJiYgIWl0ZW0uaGlkZGVuKGl0ZW0pKSB8fCAhaXRlbS5oaWRkZW5cIj5cbiAgICAgICAgICAgIDwhLS0gQXNpZGUgLS0+XG4gICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2FzaWRlJyAmJiBpdGVtLmlkID09PSBhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==