@ethlete/cdk 4.23.0 → 4.23.1

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 (243) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/esm2022/lib/components/accordion/components/accordion/accordion.component.mjs +3 -3
  3. package/esm2022/lib/components/accordion/components/accordion-group/accordion-group.component.mjs +3 -3
  4. package/esm2022/lib/components/accordion/partials/accordion-hint/accordion-hint.directive.mjs +3 -3
  5. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.mjs +3 -3
  6. package/esm2022/lib/components/accordion/partials/accordion-label/accordion-label.directive.mjs +3 -3
  7. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.mjs +3 -3
  8. package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +3 -3
  9. package/esm2022/lib/components/bracket/directives/bracket-match/bracket-match.directive.mjs +3 -3
  10. package/esm2022/lib/components/bracket/directives/bracket-round/bracket-round.directive.mjs +3 -3
  11. package/esm2022/lib/components/bracket/partials/bracket-match/bracket-match.component.mjs +3 -3
  12. package/esm2022/lib/components/bracket/partials/bracket-round-header/bracket-round-header.component.mjs +3 -3
  13. package/esm2022/lib/components/button/components/button/button.component.mjs +3 -3
  14. package/esm2022/lib/components/button/components/query-button/query-button.component.mjs +3 -3
  15. package/esm2022/lib/components/button/directives/button/button.directive.mjs +3 -3
  16. package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +3 -3
  17. package/esm2022/lib/components/carousel/carousel.component.mjs +3 -3
  18. package/esm2022/lib/components/carousel/carousel.directive.mjs +3 -3
  19. package/esm2022/lib/components/carousel/controls/carousel-item-nav.component.mjs +3 -3
  20. package/esm2022/lib/components/carousel/controls/carousel-item-nav.directive.mjs +3 -3
  21. package/esm2022/lib/components/carousel/controls/carousel-next-button.directive.mjs +3 -3
  22. package/esm2022/lib/components/carousel/controls/carousel-previous-button.directive.mjs +3 -3
  23. package/esm2022/lib/components/carousel/controls/carousel-toggle-auto-play-button.directive.mjs +3 -3
  24. package/esm2022/lib/components/carousel/et-carousel-item.component.mjs +3 -3
  25. package/esm2022/lib/components/carousel/et-carousel-item.directive.mjs +3 -3
  26. package/esm2022/lib/components/filter/rich-filter/components/rich-filter-host/rich-filter-host.component.mjs +3 -3
  27. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button/rich-filter-button.directive.mjs +3 -3
  28. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button-slot/rich-filter-button-slot.directive.mjs +3 -3
  29. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-content/rich-filter-content.directive.mjs +3 -3
  30. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-top/rich-filter-top.directive.mjs +3 -3
  31. package/esm2022/lib/components/forms/components/checkbox/components/checkbox/checkbox.component.mjs +3 -3
  32. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/checkbox-field.component.mjs +3 -3
  33. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +3 -3
  34. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +3 -3
  35. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +3 -3
  36. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/checkbox-group.directive.mjs +3 -3
  37. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +3 -3
  38. package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +3 -3
  39. package/esm2022/lib/components/forms/components/input/components/date-input/date-input.component.mjs +3 -3
  40. package/esm2022/lib/components/forms/components/input/components/date-time-input/date-time-input.component.mjs +3 -3
  41. package/esm2022/lib/components/forms/components/input/components/email-input/email-input.component.mjs +3 -3
  42. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +3 -3
  43. package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +3 -3
  44. package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +3 -3
  45. package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
  46. package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +3 -3
  47. package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +3 -3
  48. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +3 -3
  49. package/esm2022/lib/components/forms/components/input/directives/date-input/date-input.directive.mjs +3 -3
  50. package/esm2022/lib/components/forms/components/input/directives/date-time-input/date-time-input.directive.mjs +3 -3
  51. package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +3 -3
  52. package/esm2022/lib/components/forms/components/input/directives/if-supports-show-picker/if-supports-show-picker.directive.mjs +3 -3
  53. package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +3 -3
  54. package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +3 -3
  55. package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -3
  56. package/esm2022/lib/components/forms/components/input/directives/show-picker-trigger/show-picker-trigger.directive.mjs +3 -3
  57. package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +3 -3
  58. package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +3 -3
  59. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +3 -3
  60. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +3 -3
  61. package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +3 -3
  62. package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +3 -3
  63. package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +3 -3
  64. package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +3 -3
  65. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
  66. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +3 -3
  67. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +3 -3
  68. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +3 -3
  69. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +3 -3
  70. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +3 -3
  71. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
  72. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +3 -3
  73. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +3 -3
  74. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +3 -3
  75. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +3 -3
  76. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +3 -3
  77. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/combobox-body-empty-template.directive.mjs +3 -3
  78. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/combobox-body-error-template.directive.mjs +3 -3
  79. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/combobox-body-loading-template.directive.mjs +3 -3
  80. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-more-items-hint-template/combobox-body-more-items-hint-template.directive.mjs +3 -3
  81. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/combobox-option-template.directive.mjs +3 -3
  82. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/combobox-selected-option-template.directive.mjs +3 -3
  83. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +3 -3
  84. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +3 -3
  85. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +3 -3
  86. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +3 -3
  87. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +3 -3
  88. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +3 -3
  89. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +3 -3
  90. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +3 -3
  91. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +3 -3
  92. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +3 -3
  93. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +3 -3
  94. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +3 -3
  95. package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +3 -3
  96. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +3 -3
  97. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-field/selection-list-field.component.mjs +3 -3
  98. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-option/selection-list-option.component.mjs +3 -3
  99. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-field/selection-list-field.directive.mjs +3 -3
  100. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-option/selection-list-option.directive.mjs +3 -3
  101. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +3 -3
  102. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +3 -3
  103. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +3 -3
  104. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +3 -3
  105. package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +3 -3
  106. package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +3 -3
  107. package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +3 -3
  108. package/esm2022/lib/components/forms/directives/expose-input-vars/expose-input-vars.directive.mjs +3 -3
  109. package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +3 -3
  110. package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +3 -3
  111. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +3 -3
  112. package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +3 -3
  113. package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +3 -3
  114. package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +3 -3
  115. package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +3 -3
  116. package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +3 -3
  117. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +3 -3
  118. package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +3 -3
  119. package/esm2022/lib/components/forms/services/form-field-state.service.mjs +3 -3
  120. package/esm2022/lib/components/forms/services/form-group-state.service.mjs +3 -3
  121. package/esm2022/lib/components/forms/services/input-state.service.mjs +3 -3
  122. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +3 -3
  123. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +3 -3
  124. package/esm2022/lib/components/forms/utils/input.base.mjs +3 -3
  125. package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +3 -3
  126. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +3 -3
  127. package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +3 -3
  128. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +3 -3
  129. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +3 -3
  130. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +3 -3
  131. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +3 -3
  132. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +3 -3
  133. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +3 -3
  134. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +3 -3
  135. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +3 -3
  136. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +3 -3
  137. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +3 -3
  138. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +3 -3
  139. package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
  140. package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +3 -3
  141. package/esm2022/lib/components/overlay/components/menu/components/menu/menu.component.mjs +3 -3
  142. package/esm2022/lib/components/overlay/components/menu/components/menu-checkbox-item/menu-checkbox-item.component.mjs +3 -3
  143. package/esm2022/lib/components/overlay/components/menu/components/menu-container/menu-container.component.mjs +3 -3
  144. package/esm2022/lib/components/overlay/components/menu/components/menu-radio-item/menu-radio-item.component.mjs +3 -3
  145. package/esm2022/lib/components/overlay/components/menu/directives/menu-checkbox-group/menu-checkbox-group.directive.mjs +3 -3
  146. package/esm2022/lib/components/overlay/components/menu/directives/menu-group/menu-group.directive.mjs +3 -3
  147. package/esm2022/lib/components/overlay/components/menu/directives/menu-group-title/menu-group-title.directive.mjs +3 -3
  148. package/esm2022/lib/components/overlay/components/menu/directives/menu-item/menu-item.directive.mjs +3 -3
  149. package/esm2022/lib/components/overlay/components/menu/directives/menu-radio-group/menu-radio-group.directive.mjs +3 -3
  150. package/esm2022/lib/components/overlay/components/menu/directives/menu-trigger/menu-trigger.directive.mjs +3 -3
  151. package/esm2022/lib/components/overlay/components/menu-deprecated/context-menu-trigger.mjs +6 -6
  152. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-aim.mjs +6 -6
  153. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-bar.mjs +3 -3
  154. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-base.mjs +3 -3
  155. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-group.mjs +3 -3
  156. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item-checkbox.mjs +3 -3
  157. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item-radio.mjs +3 -3
  158. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item-selectable.mjs +3 -3
  159. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item.mjs +3 -3
  160. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-module.mjs +4 -4
  161. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-stack.mjs +3 -3
  162. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-trigger-base.mjs +3 -3
  163. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-trigger.mjs +3 -3
  164. package/esm2022/lib/components/overlay/components/menu-deprecated/menu.mjs +3 -3
  165. package/esm2022/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.mjs +3 -3
  166. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-back-or-close/overlay-back-or-close.directive.mjs +3 -3
  167. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-body/overlay-body.component.mjs +3 -3
  168. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-close/overlay-close.directive.mjs +3 -3
  169. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-footer/overlay-footer.directive.mjs +3 -3
  170. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-header/overlay-header.directive.mjs +3 -3
  171. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-header-template/overlay-header-template.directive.mjs +3 -3
  172. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-main/overlay-main.directive.mjs +3 -3
  173. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-route-header-template-outlet/overlay-route-header-template-outlet.component.mjs +3 -3
  174. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-link/overlay-router-link.directive.mjs +3 -3
  175. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-outlet/overlay-router-outlet.component.mjs +3 -3
  176. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-outlet-disabled-template/overlay-router-outlet-disabled-template.directive.mjs +3 -3
  177. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-shared-route-template/overlay-shared-route-template.directive.mjs +3 -3
  178. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-shared-route-template-outlet/overlay-shared-route-template-outlet.component.mjs +3 -3
  179. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-sidebar/overlay-sidebar.component.mjs +3 -3
  180. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-sidebar-page/overlay-sidebar-page.component.mjs +3 -3
  181. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-title/overlay-title.directive.mjs +3 -3
  182. package/esm2022/lib/components/overlay/components/overlay/services/overlay.service.mjs +3 -3
  183. package/esm2022/lib/components/overlay/components/overlay/utils/filter-overlay.mjs +3 -3
  184. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +3 -3
  185. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +3 -3
  186. package/esm2022/lib/components/overlay/components/toggletip/partials/toggletip-close/toggletip-close.directive.mjs +3 -3
  187. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +3 -3
  188. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +3 -3
  189. package/esm2022/lib/components/overlay/directives/dynamic-overlay-title/dynamic-overlay-title.directive.mjs +3 -3
  190. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/overlay-close-auto-blocker.directive.mjs +3 -3
  191. package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +3 -3
  192. package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +3 -3
  193. package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +3 -3
  194. package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +3 -3
  195. package/esm2022/lib/components/picture/picture.component.mjs +3 -3
  196. package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +3 -3
  197. package/esm2022/lib/components/query-error/components/query-error/query-error.component.mjs +3 -3
  198. package/esm2022/lib/components/query-error/directives/query-error/query-error.directive.mjs +3 -3
  199. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +10 -18
  200. package/esm2022/lib/components/scrollable/directives/scrollable-ignore-child/scrollable-ignore-child.directive.mjs +3 -3
  201. package/esm2022/lib/components/scrollable/directives/scrollable-is-active-child/scrollable-is-active-child.directive.mjs +3 -3
  202. package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +3 -3
  203. package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +3 -3
  204. package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +3 -3
  205. package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +3 -3
  206. package/esm2022/lib/components/sort/services/sort-header-intl.mjs +3 -3
  207. package/esm2022/lib/components/table/components/table/table.component.mjs +3 -3
  208. package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +3 -3
  209. package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +3 -3
  210. package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +3 -3
  211. package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +3 -3
  212. package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +3 -3
  213. package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +3 -3
  214. package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +3 -3
  215. package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +3 -3
  216. package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +3 -3
  217. package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +3 -3
  218. package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +3 -3
  219. package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +3 -3
  220. package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +3 -3
  221. package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +3 -3
  222. package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +3 -3
  223. package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +3 -3
  224. package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +3 -3
  225. package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +3 -3
  226. package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +3 -3
  227. package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +3 -3
  228. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +3 -3
  229. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +3 -3
  230. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +3 -3
  231. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +3 -3
  232. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +3 -3
  233. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +3 -3
  234. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +3 -3
  235. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +3 -3
  236. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +3 -3
  237. package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +3 -3
  238. package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +3 -3
  239. package/esm2022/lib/services/swipe-handler.service.mjs +3 -3
  240. package/fesm2022/ethlete-cdk.mjs +727 -735
  241. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  242. package/lib/components/scrollable/components/scrollable/scrollable.component.d.ts +1 -1
  243. package/package.json +8 -8
@@ -93,31 +93,23 @@ export class ScrollableComponent {
93
93
  this.allScrollableElements = computed(() => {
94
94
  return this.scrollableContentIntersections().map((i) => i.target);
95
95
  }, { equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) });
96
- this.canScroll = computed(() => {
97
- const dir = this.direction();
98
- if (dir === 'horizontal') {
99
- return this.containerScrollState().canScrollHorizontally;
100
- }
101
- return this.containerScrollState().canScrollVertically;
102
- });
103
96
  this.isAtStart = computed(() => {
104
- if (!this.canScroll()) {
105
- return true;
106
- }
107
97
  const intersection = this.firstElementIntersection()[0];
108
98
  if (!intersection)
109
99
  return false;
110
100
  return intersection.isIntersecting;
111
101
  });
112
102
  this.isAtEnd = computed(() => {
113
- if (!this.canScroll()) {
114
- return true;
115
- }
116
103
  const intersection = this.lastElementIntersection()[0];
117
104
  if (!intersection)
118
105
  return false;
119
106
  return intersection.isIntersecting;
120
107
  });
108
+ this.canScroll = computed(() => {
109
+ if (this.isAtStart() && this.isAtEnd())
110
+ return false;
111
+ return true;
112
+ });
121
113
  this.scrollableNavigation = computed(() => {
122
114
  const allIntersections = this.scrollableContentIntersections();
123
115
  const manualActiveNavigationIndex = this._manualActiveNavigationIndex();
@@ -498,10 +490,10 @@ export class ScrollableComponent {
498
490
  _disableSnapping() {
499
491
  this._disableSnapping$.next();
500
492
  }
501
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
502
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, scrollableRole: { classPropertyName: "scrollableRole", publicName: "scrollableRole", isSignal: true, isRequired: false, transformFunction: null }, scrollableClass: { classPropertyName: "scrollableClass", publicName: "scrollableClass", isSignal: true, isRequired: false, transformFunction: null }, renderNavigation: { classPropertyName: "renderNavigation", publicName: "renderNavigation", isSignal: true, isRequired: false, transformFunction: null }, renderMasks: { classPropertyName: "renderMasks", publicName: "renderMasks", isSignal: true, isRequired: false, transformFunction: null }, renderButtons: { classPropertyName: "renderButtons", publicName: "renderButtons", isSignal: true, isRequired: false, transformFunction: null }, buttonPosition: { classPropertyName: "buttonPosition", publicName: "buttonPosition", isSignal: true, isRequired: false, transformFunction: null }, renderScrollbars: { classPropertyName: "renderScrollbars", publicName: "renderScrollbars", isSignal: true, isRequired: false, transformFunction: null }, stickyButtons: { classPropertyName: "stickyButtons", publicName: "stickyButtons", isSignal: true, isRequired: false, transformFunction: null }, cursorDragScroll: { classPropertyName: "cursorDragScroll", publicName: "cursorDragScroll", isSignal: true, isRequired: false, transformFunction: null }, disableActiveElementScrolling: { classPropertyName: "disableActiveElementScrolling", publicName: "disableActiveElementScrolling", isSignal: true, isRequired: false, transformFunction: null }, scrollMode: { classPropertyName: "scrollMode", publicName: "scrollMode", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, scrollOrigin: { classPropertyName: "scrollOrigin", publicName: "scrollOrigin", isSignal: true, isRequired: false, transformFunction: null }, darkenNonIntersectingItems: { classPropertyName: "darkenNonIntersectingItems", publicName: "darkenNonIntersectingItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersectionChange: "intersectionChange", scrollStateChange: "scrollStateChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, isSignal: true }, { propertyName: "firstElement", first: true, predicate: ["firstElement"], descendants: true, isSignal: true }, { propertyName: "lastElement", first: true, predicate: ["lastElement"], descendants: true, isSignal: true }, { propertyName: "navigationDotsContainer", first: true, predicate: ["navigationDotsContainer"], descendants: true, isSignal: true }, { propertyName: "firstNavigationDot", first: true, predicate: ["navigationDot"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if (renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter()\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-chevron-icon{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-template-columns:repeat(var(--item-count),var(--_auto-size));overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-chevron-icon{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-chevron-icon{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-template-rows:repeat(var(--item-count),var(--_auto-size));overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container :nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container :nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-chevron-icon{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-chevron-icon{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
493
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
494
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, scrollableRole: { classPropertyName: "scrollableRole", publicName: "scrollableRole", isSignal: true, isRequired: false, transformFunction: null }, scrollableClass: { classPropertyName: "scrollableClass", publicName: "scrollableClass", isSignal: true, isRequired: false, transformFunction: null }, renderNavigation: { classPropertyName: "renderNavigation", publicName: "renderNavigation", isSignal: true, isRequired: false, transformFunction: null }, renderMasks: { classPropertyName: "renderMasks", publicName: "renderMasks", isSignal: true, isRequired: false, transformFunction: null }, renderButtons: { classPropertyName: "renderButtons", publicName: "renderButtons", isSignal: true, isRequired: false, transformFunction: null }, buttonPosition: { classPropertyName: "buttonPosition", publicName: "buttonPosition", isSignal: true, isRequired: false, transformFunction: null }, renderScrollbars: { classPropertyName: "renderScrollbars", publicName: "renderScrollbars", isSignal: true, isRequired: false, transformFunction: null }, stickyButtons: { classPropertyName: "stickyButtons", publicName: "stickyButtons", isSignal: true, isRequired: false, transformFunction: null }, cursorDragScroll: { classPropertyName: "cursorDragScroll", publicName: "cursorDragScroll", isSignal: true, isRequired: false, transformFunction: null }, disableActiveElementScrolling: { classPropertyName: "disableActiveElementScrolling", publicName: "disableActiveElementScrolling", isSignal: true, isRequired: false, transformFunction: null }, scrollMode: { classPropertyName: "scrollMode", publicName: "scrollMode", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, scrollOrigin: { classPropertyName: "scrollOrigin", publicName: "scrollOrigin", isSignal: true, isRequired: false, transformFunction: null }, darkenNonIntersectingItems: { classPropertyName: "darkenNonIntersectingItems", publicName: "darkenNonIntersectingItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersectionChange: "intersectionChange", scrollStateChange: "scrollStateChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, isSignal: true }, { propertyName: "firstElement", first: true, predicate: ["firstElement"], descendants: true, isSignal: true }, { propertyName: "lastElement", first: true, predicate: ["lastElement"], descendants: true, isSignal: true }, { propertyName: "navigationDotsContainer", first: true, predicate: ["navigationDotsContainer"], descendants: true, isSignal: true }, { propertyName: "firstNavigationDot", first: true, predicate: ["navigationDot"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter()\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-chevron-icon{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-template-columns:repeat(var(--item-count),var(--_auto-size));overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-chevron-icon{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-chevron-icon{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-template-rows:repeat(var(--item-count),var(--_auto-size));overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container :nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container :nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-chevron-icon{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-chevron-icon{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
503
495
  }
504
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ScrollableComponent, decorators: [{
496
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ScrollableComponent, decorators: [{
505
497
  type: Component,
506
498
  args: [{ selector: 'et-scrollable', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
507
499
  ObserveScrollStateDirective,
@@ -513,6 +505,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
513
505
  NgTemplateOutlet,
514
506
  ], host: {
515
507
  class: 'et-scrollable',
516
- }, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if (renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter()\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-chevron-icon{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-template-columns:repeat(var(--item-count),var(--_auto-size));overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-chevron-icon{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-chevron-icon{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-template-rows:repeat(var(--item-count),var(--_auto-size));overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container :nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container :nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-chevron-icon{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-chevron-icon{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"] }]
508
+ }, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter()\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-chevron-icon{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-template-columns:repeat(var(--item-count),var(--_auto-size));overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-chevron-icon{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-chevron-icon{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-template-rows:repeat(var(--item-count),var(--_auto-size));overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container :nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container :nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-chevron-icon{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-chevron-icon{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"] }]
517
509
  }], ctorParameters: () => [] });
518
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BHLE9BQU8sRUFDTCxZQUFZLEVBRVosMkJBQTJCLEVBRzNCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixtQkFBbUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxF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QkFDUCwyQkFBMkI7d0JBQzNCLE9BQU87d0JBQ1AsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGdDQUFnQzt3QkFDaEMsOEJBQThCO3dCQUM5QixnQkFBZ0I7cUJBQ2pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLGVBQWU7cUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBpc0Rldk1vZGUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgTGV0RGlyZWN0aXZlLFxuICBOZ0NsYXNzVHlwZSxcbiAgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlLFxuICBTY3JvbGxPYnNlcnZlclNjcm9sbFN0YXRlLFxuICBTY3JvbGxUb0VsZW1lbnRPcHRpb25zLFxuICBjcmVhdGVDYW5BbmltYXRlU2lnbmFsLFxuICBjcmVhdGVJc1JlbmRlcmVkU2lnbmFsLFxuICBnZXRFbGVtZW50U2Nyb2xsQ29vcmRpbmF0ZXMsXG4gIGdldEludGVyc2VjdGlvbkluZm8sXG4gIHNpZ25hbENsYXNzZXMsXG4gIHNpZ25hbEVsZW1lbnRDaGlsZHJlbixcbiAgc2lnbmFsRWxlbWVudERpbWVuc2lvbnMsXG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24sXG4gIHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSxcbiAgc2lnbmFsSG9zdEF0dHJpYnV0ZXMsXG4gIHNpZ25hbEhvc3RDbGFzc2VzLFxuICBzaWduYWxIb3N0U3R5bGVzLFxuICBzaWduYWxTdHlsZXMsXG4gIHVzZUN1cnNvckRyYWdTY3JvbGwsXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hldnJvbkljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29ucy9jaGV2cm9uLWljb24nO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUlnbm9yZUNoaWxkRGlyZWN0aXZlLCBpc1Njcm9sbGFibGVDaGlsZElnbm9yZWQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Njcm9sbGFibGUtaWdub3JlLWNoaWxkJztcbmltcG9ydCB7XG4gIFNDUk9MTEFCTEVfSVNfQUNUSVZFX0NISUxEX1RPS0VOLFxuICBTY3JvbGxhYmxlSXNBY3RpdmVDaGlsZERpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxhYmxlLWlzLWFjdGl2ZS1jaGlsZCc7XG5pbXBvcnQgeyBTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlLCBTY3JvbGxhYmxlU2Nyb2xsTW9kZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLy8gVGhyZXNob2xkcyBmb3IgdGhlIGludGVyc2VjdGlvbiBvYnNlcnZlci5cbmNvbnN0IEVMRU1FTlRfSU5URVJTRUNUSU9OX1RIUkVTSE9MRCA9IFtcbiAgLy8gNSUgc3RlcHNcbiAgLi4uQXJyYXkuZnJvbSh7IGxlbmd0aDogMjEgfSwgKF8sIGkpID0+IGkgKiAwLjA1KSxcblxuICAvLyBBZGRpdGlvbmFsIHN0ZXBzIG5lZWRlZCBzaW5jZSBkaXNwbGF5IHNjYWxpbmcgY2FuIGNhdXNlIHRoZSBpbnRlcnNlY3Rpb24gcmF0aW8gdG8gYmUgc2xpZ2h0bHkgb2ZmLlxuICAwLjAxLFxuICAwLjAwNSxcbiAgMC4wMDEsXG4gIDAuOTksXG4gIDAuOTk1LFxuICAwLjk5OSxcbl07XG5cbmludGVyZmFjZSBTY3JvbGxhYmxlTmF2aWdhdGlvbkl0ZW0ge1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgYWN0aXZlT2Zmc2V0OiBudW1iZXI7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgdHlwZSBTY3JvbGxhYmxlQnV0dG9uUG9zaXRpb24gPSAnaW5zaWRlJyB8ICdmb290ZXInO1xuZXhwb3J0IHR5cGUgU2Nyb2xsYWJsZVNjcm9sbE9yaWdpbiA9ICdhdXRvJyB8ICdjZW50ZXInIHwgJ3N0YXJ0JyB8ICdlbmQnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsYWJsZURpcmVjdGlvbiA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5leHBvcnQgdHlwZSBTY3JvbGxhYmxlSXRlbVNpemUgPSAnYXV0bycgfCAnc2FtZScgfCAnZnVsbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LXNjcm9sbGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Njcm9sbGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUsXG4gICAgTmdDbGFzcyxcbiAgICBMZXREaXJlY3RpdmUsXG4gICAgQ2hldnJvbkljb25Db21wb25lbnQsXG4gICAgU2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmUsXG4gICAgU2Nyb2xsYWJsZUlnbm9yZUNoaWxkRGlyZWN0aXZlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LXNjcm9sbGFibGUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxhYmxlQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfZGlzYWJsZVNuYXBwaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBpdGVtU2l6ZSA9IGlucHV0PFNjcm9sbGFibGVJdGVtU2l6ZT4oJ2F1dG8nKTtcbiAgZGlyZWN0aW9uID0gaW5wdXQ8U2Nyb2xsYWJsZURpcmVjdGlvbj4oJ2hvcml6b250YWwnKTtcbiAgc2Nyb2xsYWJsZVJvbGUgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgc2Nyb2xsYWJsZUNsYXNzID0gaW5wdXQ8TmdDbGFzc1R5cGUgfCBudWxsPihudWxsKTtcbiAgcmVuZGVyTmF2aWdhdGlvbiA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVuZGVyTWFza3MgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVuZGVyQnV0dG9ucyA9IGlucHV0KHRydWUsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBidXR0b25Qb3NpdGlvbiA9IGlucHV0PFNjcm9sbGFibGVCdXR0b25Qb3NpdGlvbj4oJ2luc2lkZScpO1xuICByZW5kZXJTY3JvbGxiYXJzID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBzdGlja3lCdXR0b25zID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBjdXJzb3JEcmFnU2Nyb2xsID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIGRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBzY3JvbGxNb2RlID0gaW5wdXQ8U2Nyb2xsYWJsZVNjcm9sbE1vZGU+KCdjb250YWluZXInKTtcbiAgc25hcCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgc2Nyb2xsTWFyZ2luID0gaW5wdXQoMCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcbiAgc2Nyb2xsT3JpZ2luID0gaW5wdXQ8U2Nyb2xsYWJsZVNjcm9sbE9yaWdpbj4oJ2F1dG8nKTtcbiAgZGFya2VuTm9uSW50ZXJzZWN0aW5nSXRlbXMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgc2Nyb2xsYWJsZSA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ3Njcm9sbGFibGUnKTtcbiAgZmlyc3RFbGVtZW50ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZmlyc3RFbGVtZW50Jyk7XG4gIGxhc3RFbGVtZW50ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignbGFzdEVsZW1lbnQnKTtcbiAgYWN0aXZlRWxlbWVudExpc3QgPSBjb250ZW50Q2hpbGRyZW4oU0NST0xMQUJMRV9JU19BQ1RJVkVfQ0hJTERfVE9LRU4sIHsgZGVzY2VuZGFudHM6IHRydWUgfSk7XG4gIG5hdmlnYXRpb25Eb3RzQ29udGFpbmVyID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignbmF2aWdhdGlvbkRvdHNDb250YWluZXInKTtcbiAgZmlyc3ROYXZpZ2F0aW9uRG90ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+PignbmF2aWdhdGlvbkRvdCcpO1xuICBuYXZpZ2F0aW9uRG90RGltZW5zaW9ucyA9IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKHRoaXMuZmlyc3ROYXZpZ2F0aW9uRG90KTtcblxuICBpc1JlbmRlcmVkID0gY3JlYXRlSXNSZW5kZXJlZFNpZ25hbCgpO1xuICBjYW5BbmltYXRlID0gY3JlYXRlQ2FuQW5pbWF0ZVNpZ25hbCgpO1xuXG4gIGN1cnNvckRyYWdTY3JvbGxTdGF0ZSA9IHVzZUN1cnNvckRyYWdTY3JvbGwodGhpcy5zY3JvbGxhYmxlLCB7XG4gICAgZW5hYmxlZDogdGhpcy5jdXJzb3JEcmFnU2Nyb2xsLFxuICAgIGFsbG93ZWREaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uLFxuICB9KTtcbiAgaXNDdXJzb3JEcmFnZ2luZyQgPSB0b09ic2VydmFibGUodGhpcy5jdXJzb3JEcmFnU2Nyb2xsU3RhdGUuaXNEcmFnZ2luZyk7XG5cbiAgcmVuZGVyQnV0dG9uc0luc2lkZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYnV0dG9uUG9zaXRpb24oKSA9PT0gJ2luc2lkZScgJiYgdGhpcy5yZW5kZXJCdXR0b25zKCkpO1xuICByZW5kZXJCdXR0b25zSW5Gb290ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmJ1dHRvblBvc2l0aW9uKCkgPT09ICdmb290ZXInICYmIHRoaXMucmVuZGVyQnV0dG9ucygpKTtcblxuICBjb250YWluZXJTY3JvbGxTdGF0ZSA9IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSh0aGlzLnNjcm9sbGFibGUsIHtcbiAgICBpbml0aWFsU2Nyb2xsUG9zaXRpb246IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRMaXN0ID0gdGhpcy5hY3RpdmVFbGVtZW50TGlzdCgpO1xuXG4gICAgICBpZiAoIXNjcm9sbGFibGUgfHwgIWFjdGl2ZUVsZW1lbnRMaXN0Lmxlbmd0aCB8fCAhdGhpcy5pc1JlbmRlcmVkLnN0YXRlKCkpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBmaXJzdEFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRMaXN0LmZpbmQoKGEpID0+IGEuaXNBY3RpdmVDaGlsZEVuYWJsZWQoKSk7XG5cbiAgICAgIGlmIChmaXJzdEFjdGl2ZSAmJiAhdGhpcy5kaXNhYmxlQWN0aXZlRWxlbWVudFNjcm9sbGluZygpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyh7IGVsZW1lbnQ6IGZpcnN0QWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSksXG4gIH0pO1xuICBmaXJzdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMuZmlyc3RFbGVtZW50LCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIGVuYWJsZWQ6IHRoaXMuaXNSZW5kZXJlZC5zdGF0ZSxcbiAgfSk7XG4gIGxhc3RFbGVtZW50SW50ZXJzZWN0aW9uID0gc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbih0aGlzLmxhc3RFbGVtZW50LCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIGVuYWJsZWQ6IHRoaXMuaXNSZW5kZXJlZC5zdGF0ZSxcbiAgfSk7XG5cbiAgYWxsU2Nyb2xsYWJsZUNoaWxkcmVuID0gc2lnbmFsRWxlbWVudENoaWxkcmVuKHRoaXMuc2Nyb2xsYWJsZSk7XG4gIHNjcm9sbGFibGVDaGlsZHJlbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWxsU2Nyb2xsYWJsZUNoaWxkcmVuKCkuZmlsdGVyKChjKSA9PiAhaXNTY3JvbGxhYmxlQ2hpbGRJZ25vcmVkKGMpKSk7XG5cbiAgc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zID0gc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbih0aGlzLnNjcm9sbGFibGVDaGlsZHJlbiwge1xuICAgIHJvb3Q6IHRoaXMuc2Nyb2xsYWJsZSxcbiAgICB0aHJlc2hvbGQ6IEVMRU1FTlRfSU5URVJTRUNUSU9OX1RIUkVTSE9MRCxcbiAgICBlbmFibGVkOiB0aGlzLmlzUmVuZGVyZWQuc3RhdGUsXG4gIH0pO1xuICBzY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKTtcblxuICBub25TY3JvbGxhYmxlSW50ZXJzZWN0aW9ucyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgcmV0dXJuIGFsbEludGVyc2VjdGlvbnMuZmlsdGVyKChpKSA9PiBpLmludGVyc2VjdGlvblJhdGlvICE9PSAxKS5tYXAoKGkpID0+IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB9LFxuICAgIHsgZXF1YWw6IChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYltpXSkgfSxcbiAgKTtcblxuICBhbGxTY3JvbGxhYmxlRWxlbWVudHMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMoKS5tYXAoKGkpID0+IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB9LFxuICAgIHsgZXF1YWw6IChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYltpXSkgfSxcbiAgKTtcblxuICBjYW5TY3JvbGwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGlyID0gdGhpcy5kaXJlY3Rpb24oKTtcblxuICAgIGlmIChkaXIgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyU2Nyb2xsU3RhdGUoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyU2Nyb2xsU3RhdGUoKS5jYW5TY3JvbGxWZXJ0aWNhbGx5O1xuICB9KTtcblxuICBpc0F0U3RhcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhblNjcm9sbCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmZpcnN0RWxlbWVudEludGVyc2VjdGlvbigpWzBdO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uaXNJbnRlcnNlY3Rpbmc7XG4gIH0pO1xuXG4gIGlzQXRFbmQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhblNjcm9sbCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmxhc3RFbGVtZW50SW50ZXJzZWN0aW9uKClbMF07XG5cbiAgICBpZiAoIWludGVyc2VjdGlvbikgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbi5pc0ludGVyc2VjdGluZztcbiAgfSk7XG5cbiAgc2Nyb2xsYWJsZU5hdmlnYXRpb24gPSBjb21wdXRlZDxTY3JvbGxhYmxlTmF2aWdhdGlvbkl0ZW1bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgIGNvbnN0IG1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCA9IHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCgpO1xuXG4gICAgY29uc3QgaGlnaGVzdEludGVyc2VjdGlvbiA9IGFsbEludGVyc2VjdGlvbnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBpZiAocHJldiAmJiBwcmV2LmludGVyc2VjdGlvblJhdGlvID4gY3Vyci5pbnRlcnNlY3Rpb25SYXRpbykge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnI7XG4gICAgfSwgYWxsSW50ZXJzZWN0aW9uc1swXSk7XG5cbiAgICBpZiAoIWhpZ2hlc3RJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9XG4gICAgICBtYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXggIT09IG51bGxcbiAgICAgICAgPyBtYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXhcbiAgICAgICAgOiBhbGxJbnRlcnNlY3Rpb25zLmZpbmRJbmRleCgoaSkgPT4gaSA9PT0gaGlnaGVzdEludGVyc2VjdGlvbik7XG5cbiAgICByZXR1cm4gYWxsSW50ZXJzZWN0aW9ucy5tYXAoKGksIGluZGV4KSA9PiAoe1xuICAgICAgaXNBY3RpdmU6XG4gICAgICAgIG1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCAhPT0gbnVsbFxuICAgICAgICAgID8gbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID09PSBpbmRleFxuICAgICAgICAgIDogaSA9PT0gaGlnaGVzdEludGVyc2VjdGlvbiAmJiBoaWdoZXN0SW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvID4gMCxcbiAgICAgIGFjdGl2ZU9mZnNldDogaW5kZXggPT09IGFjdGl2ZUluZGV4ID8gMCA6IE1hdGguYWJzKGluZGV4IC0gYWN0aXZlSW5kZXgpLFxuICAgICAgZWxlbWVudDogaS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgfSkpO1xuICB9KTtcblxuICBhY3RpdmVJbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzY3JvbGxhYmxlTmF2aWdhdGlvbiA9IHRoaXMuc2Nyb2xsYWJsZU5hdmlnYXRpb24oKTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHNjcm9sbGFibGVOYXZpZ2F0aW9uLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5pc0FjdGl2ZSk7XG5cbiAgICByZXR1cm4gYWN0aXZlSW5kZXg7XG4gIH0pO1xuXG4gIGludGVyc2VjdGlvbkNoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlPFNjcm9sbGFibGVJbnRlcnNlY3Rpb25DaGFuZ2VbXT4oXG4gICAgdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMkLnBpcGUoXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICBtYXAoKGVudHJpZXMpID0+XG4gICAgICAgIGVudHJpZXMubWFwKChpLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBlbGVtZW50OiBpLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbzogaS5pbnRlcnNlY3Rpb25SYXRpbyxcbiAgICAgICAgICBpc0ludGVyc2VjdGluZzogaS5pc0ludGVyc2VjdGluZyxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIHNjcm9sbFN0YXRlQ2hhbmdlID0gb3V0cHV0RnJvbU9ic2VydmFibGU8U2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZT4oXG4gICAgdG9PYnNlcnZhYmxlKFxuICAgICAgY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0F0U3RhcnQgPSB0aGlzLmlzQXRTdGFydCgpO1xuICAgICAgICBjb25zdCBpc0F0RW5kID0gdGhpcy5pc0F0RW5kKCk7XG4gICAgICAgIGNvbnN0IGNhblNjcm9sbCA9IHRoaXMuY2FuU2Nyb2xsKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjYW5TY3JvbGwsXG4gICAgICAgICAgaXNBdEVuZDogISFpc0F0RW5kLFxuICAgICAgICAgIGlzQXRTdGFydDogISFpc0F0U3RhcnQsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xuXG4gIGFsbENoaWxkRWxlbWVudENsYXNzQmluZGluZ3MgPSBzaWduYWxDbGFzc2VzKHRoaXMuYWxsU2Nyb2xsYWJsZUVsZW1lbnRzLCB7XG4gICAgJ2V0LXNjcm9sbGFibGUtaXRlbSc6IHNpZ25hbCh0cnVlKSxcbiAgfSk7XG5cbiAgbm9uRnVsbEludGVyc2VjdGluZ0VsZW1lbnRDbGFzc0JpbmRpbmdzID0gc2lnbmFsQ2xhc3Nlcyh0aGlzLm5vblNjcm9sbGFibGVJbnRlcnNlY3Rpb25zLCB7XG4gICAgJ2V0LXNjcm9sbGFibGUtaXRlbS0tbm90LWludGVyc2VjdGluZyc6IHNpZ25hbCh0cnVlKSxcbiAgfSk7XG5cbiAgaG9zdEF0dHJpYnV0ZUJpbmRpbmdzID0gc2lnbmFsSG9zdEF0dHJpYnV0ZXMoe1xuICAgICdpdGVtLXNpemUnOiB0aGlzLml0ZW1TaXplLFxuICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24sXG4gICAgJ3JlbmRlci1zY3JvbGxiYXJzJzogdGhpcy5yZW5kZXJTY3JvbGxiYXJzLFxuICAgICdzdGlja3ktYnV0dG9ucyc6IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RpY2t5QnV0dG9ucygpICYmIHRoaXMucmVuZGVyQnV0dG9uc0luc2lkZSgpKSxcbiAgfSk7XG5cbiAgaG9zdENsYXNzQmluZGluZ3MgPSBzaWduYWxIb3N0Q2xhc3Nlcyh7XG4gICAgJ2V0LXNjcm9sbGFibGUtLWNhbi1zY3JvbGwnOiBjb21wdXRlZCgoKSA9PiB0aGlzLmNhblNjcm9sbCgpICYmICghdGhpcy5pc0F0U3RhcnQoKSB8fCAhdGhpcy5pc0F0RW5kKCkpKSxcbiAgICAnZXQtc2Nyb2xsYWJsZS0taXMtYXQtc3RhcnQnOiB0aGlzLmlzQXRTdGFydCxcbiAgICAnZXQtc2Nyb2xsYWJsZS0taXMtYXQtZW5kJzogdGhpcy5pc0F0RW5kLFxuICAgICdldC1zY3JvbGxhYmxlLS1jYW4tYW5pbWF0ZSc6IHRoaXMuY2FuQW5pbWF0ZS5zdGF0ZSxcbiAgICAnZXQtc2Nyb2xsYWJsZS0tZGFya2VuLW5vbi1pbnRlcnNlY3RpbmctaXRlbXMnOiB0aGlzLmRhcmtlbk5vbkludGVyc2VjdGluZ0l0ZW1zLFxuICB9KTtcblxuICBob3N0U3R5bGVCaW5kaW5ncyA9IHNpZ25hbEhvc3RTdHlsZXMoe1xuICAgICctLWl0ZW0tY291bnQnOiBjb21wdXRlZCgoKSA9PiB0aGlzLnNjcm9sbGFibGVDaGlsZHJlbigpLmxlbmd0aCksXG4gIH0pO1xuXG4gIHNjcm9sbGFibGVEb3RzQ29udGFpbmVyU3R5bGVCaW5kaW5ncyA9IHNpZ25hbFN0eWxlcyh0aGlzLm5hdmlnYXRpb25Eb3RzQ29udGFpbmVyLCB7XG4gICAgLy8gUmVzcG9uc2libGUgZm9yIGNlbnRlcmluZyB0aGUgYWN0aXZlIGRvdCBpbiBuYXZpZ2F0aW9uIGJhciBieSB1c2luZyAndHJhbnNsYXRlJ1xuICAgIHRyYW5zZm9ybTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4KCk7XG4gICAgICBjb25zdCBjaGlsZENvdW50ID0gdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMoKS5sZW5ndGg7XG4gICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmdldE5hdmlnYXRpb25Eb3RzQ29udGFpbmVyVHJhbnNsYXRlKGNoaWxkQ291bnQsIGFjdGl2ZUluZGV4KTtcbiAgICAgIGNvbnN0IGRpciA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdYJyA6ICdZJztcblxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUke2Rpcn0oJHtvZmZzZXR9KWA7XG4gICAgfSksXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBlbmFibGVTbmFwcGluZyA9IHRoaXMuc25hcCgpO1xuXG4gICAgICBpZiAoZW5hYmxlU25hcHBpbmcpIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlU25hcHBpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVTbmFwcGluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGkpID0+IGkgIT09IG51bGwpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICBpZiAoIXNjcm9sbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHNjcm9sbGFibGUsICdzY3JvbGwnKTtcbiAgICAgICAgfSksXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KG51bGwpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuaXNSZW5kZXJlZC5iaW5kKCk7XG4gIH1cblxuICBnZXROYXZpZ2F0aW9uRG90c0NvbnRhaW5lclRyYW5zbGF0ZShuYXZpZ2F0aW9uRG90Q291bnQ6IG51bWJlciwgYWN0aXZlSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChuYXZpZ2F0aW9uRG90Q291bnQgPD0gNSkge1xuICAgICAgcmV0dXJuICcwcHgnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkb3RDb250YWluZXJXaWR0aCA9IHRoaXMubmF2aWdhdGlvbkRvdERpbWVuc2lvbnMoKS5yZWN0Py53aWR0aCA/PyAyMDtcbiAgICAgIGxldCBvZmZzZXQgPSAtKGFjdGl2ZUluZGV4IC0gMik7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPCAzKSB7XG4gICAgICAgIG9mZnNldCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID49IG5hdmlnYXRpb25Eb3RDb3VudCAtIDMpIHtcbiAgICAgICAgb2Zmc2V0ID0gNSAtIG5hdmlnYXRpb25Eb3RDb3VudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgJHtvZmZzZXQgKiBkb3RDb250YWluZXJXaWR0aH1weGA7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsT25lQ29udGFpbmVyU2l6ZShkaXJlY3Rpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghc2Nyb2xsRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgaXNTbmFwcGluZ0VuYWJsZWQgPSB0aGlzLnNuYXAoKTtcblxuICAgIGlmIChpc1NuYXBwaW5nRW5hYmxlZCkge1xuICAgICAgLy8gSWYgc25hcHBpbmcgaXMgZW5hYmxlZCB3ZSB3YW50IHRvIHNjcm9sbCB0byBhIHBvc2l0aW9uIHdoZXJlIG5vIGZ1cnRoZXIgc25hcHBpbmcgd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIHNjcm9sbC5cbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbkluZm8oYWxsSW50ZXJzZWN0aW9ucyk7XG4gICAgICBjb25zdCByZWxldmFudEludGVyc2VjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IGludGVyc2VjdGlvbnM/LnBhcnRpYWwuZmlyc3QgOiBpbnRlcnNlY3Rpb25zPy5wYXJ0aWFsLmxhc3Q7XG5cbiAgICAgIGlmICghcmVsZXZhbnRJbnRlcnNlY3Rpb24pIHJldHVybjtcblxuICAgICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgICAgcmVsZXZhbnRJbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvICE9PSAxXG4gICAgICAgICAgPyByZWxldmFudEludGVyc2VjdGlvbi5pbmRleFxuICAgICAgICAgIDogZGlyZWN0aW9uID09PSAnc3RhcnQnXG4gICAgICAgICAgICA/IHJlbGV2YW50SW50ZXJzZWN0aW9uLmluZGV4IC0gMVxuICAgICAgICAgICAgOiByZWxldmFudEludGVyc2VjdGlvbi5pbmRleCArIDE7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPVxuICAgICAgICAoYWxsSW50ZXJzZWN0aW9uc1tuZXh0SW5kZXhdPy50YXJnZXQgYXMgSFRNTEVsZW1lbnQpIHx8XG4gICAgICAgIChyZWxldmFudEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBvcmlnaW46IGRpcmVjdGlvbiA9PT0gJ2VuZCcgPyAnc3RhcnQnIDogJ2VuZCcsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSnVzdCBzY3JvbGwgb25lIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgICAgY29uc3Qgc2Nyb2xsYWJsZVNpemUgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyBwYXJlbnQuY2xpZW50V2lkdGggOiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3QgY3VycmVudFNjcm9sbCA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgICBzY3JvbGxFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgW3RoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0JyA6ICd0b3AnXTpcbiAgICAgICAgICBjdXJyZW50U2Nyb2xsICsgKGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IC1zY3JvbGxhYmxlU2l6ZSA6IHNjcm9sbGFibGVTaXplKSxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsT25lSXRlbVNpemUoZGlyZWN0aW9uOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICBjb25zdCBhbGxJbnRlcnNlY3Rpb25zID0gdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMoKTtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWFsbEludGVyc2VjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdObyBlbGVtZW50cyBmb3VuZCB0byBzY3JvbGwgdG8uIE1ha2Ugc3VyZSB0byBhcHBseSB0aGUgaXNFbGVtZW50IGRpcmVjdGl2ZSB0byB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbkluZm8oYWxsSW50ZXJzZWN0aW9ucyk7XG5cbiAgICBpZiAoIWludGVyc2VjdGlvbnMgfHwgIXNjcm9sbEVsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIE1lYW5zIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgYmlnZ2VyIHRoYW4gdGhlIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2Nyb2xsIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBlbGVtZW50LiBJZiB3ZSBhcmUgYWxyZWFkeSB0aGVyZSB3ZSBzaG91bGQgc2Nyb2xsIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGVsZW1lbnQuXG4gICAgLy8gVGhpcyBhcHBsaWVzIHRvIHRoZSBvdGhlciBkaXJlY3Rpb24gYXMgd2VsbC5cbiAgICBjb25zdCBpc0ZpcnN0QW5kTGFzdEludGVyc2VjdGlvbkVxdWFsID1cbiAgICAgIGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24gPT09IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmludGVyc2VjdGlvbjtcbiAgICBjb25zdCBzY3JvbGxhYmxlUmVjdCA9IHNjcm9sbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCkge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmludGVyc2VjdGlvbi50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24ubGVmdCkgPj0gTWF0aC5yb3VuZChzY3JvbGxhYmxlUmVjdC5sZWZ0KVxuICAgICAgICAgIDogTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24udG9wKSA+PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LnRvcCk7XG5cbiAgICAgIGNvbnN0IGlzRW5kT2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24ucmlnaHQpIDw9IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QucmlnaHQpXG4gICAgICAgICAgOiBNYXRoLnJvdW5kKGludGVyc2VjdGlvbi5ib3R0b20pIDw9IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QuYm90dG9tKTtcblxuICAgICAgaWYgKCFpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSB8fCAhaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBpZiAoaXNTdGFydE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW5kZXggLSAxO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW3ByZXZpb3VzSW5kZXhdPy50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudFRvU2Nyb2xsVG8pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU2Nyb2xsVG8sXG4gICAgICAgICAgICAgIG9yaWdpbjogJ2VuZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQocHJldmlvdXNJbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBvcmlnaW46ICdzdGFydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQoaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzRW5kT2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmluZGV4ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb1Njcm9sbFRvID0gYWxsSW50ZXJzZWN0aW9uc1tuZXh0SW5kZXhdPy50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudFRvU2Nyb2xsVG8pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU2Nyb2xsVG8sXG4gICAgICAgICAgICAgIG9yaWdpbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChuZXh0SW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luOiAnZW5kJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnNjcm9sbE9yaWdpbigpID09PSAnY2VudGVyJykge1xuICAgICAgLy8gSWYgdGhlIHNjcm9sbCBvcmlnaW4gaXMgZm9yY2VkIHRvIGJlIGNlbnRlciB3ZSBzaG91bGQgYWx3YXlzIHNuYXAgdG8gdGhlIGNlbnRlciBvZiB0aGUgbmV4dCBwYXJ0aWFsIGludGVyc2VjdGlvbiBpbiB0aGUgc2Nyb2xsIGRpcmVjdGlvbi5cbiAgICAgIGNvbnN0IG5leHRQYXJ0aWFsSW50ZXJzZWN0aW9uID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0IDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3Q7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBuZXh0UGFydGlhbEludGVyc2VjdGlvbi5pbmRleDtcblxuICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICBlbGVtZW50OiBuZXh0UGFydGlhbEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICBvcmlnaW46ICdjZW50ZXInLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KG5leHRJbmRleCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0IDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3Q7XG4gICAgbGV0IGVsZW1lbnRUb1Njcm9sbFRvID0gZGF0YS5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBuZXh0SW5kZXggPSBkYXRhLmluZGV4O1xuXG4gICAgaWYgKE1hdGgucm91bmQoZGF0YS5pbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uUmF0aW8pID09PSAxKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnc3RhcnQnICYmIGRhdGEuaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnZW5kJyAmJiBkYXRhLmluZGV4ID09PSBhbGxJbnRlcnNlY3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0SW5kZXggPSBkaXJlY3Rpb24gPT09ICdzdGFydCcgPyBkYXRhLmluZGV4IC0gMSA6IGRhdGEuaW5kZXggKyAxO1xuXG4gICAgICBlbGVtZW50VG9TY3JvbGxUbyA9IGFsbEludGVyc2VjdGlvbnNbbmV4dEluZGV4XT8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoIWVsZW1lbnRUb1Njcm9sbFRvKSByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudDogZWxlbWVudFRvU2Nyb2xsVG8sXG4gICAgICBvcmlnaW46IGRpcmVjdGlvbixcbiAgICB9KTtcblxuICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQobmV4dEluZGV4KTtcbiAgfVxuXG4gIGdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyhvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPiAmIHsgaWdub3JlRm9yY2VkT3JpZ2luPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGZvcmNlZE9yaWdpbiA9IHRoaXMuc2Nyb2xsT3JpZ2luKCk7XG5cbiAgICByZXR1cm4gZ2V0RWxlbWVudFNjcm9sbENvb3JkaW5hdGVzKHtcbiAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2lubGluZScgOiAnYmxvY2snLFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC4uLihmb3JjZWRPcmlnaW4gPT09ICdhdXRvJyB8fCBvcHRpb25zLmlnbm9yZUZvcmNlZE9yaWdpbiA/IHsgb3JpZ2luIH0gOiB7IG9yaWdpbjogZm9yY2VkT3JpZ2luIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50KG9wdGlvbnM6IE9taXQ8U2Nyb2xsVG9FbGVtZW50T3B0aW9ucywgJ2NvbnRhaW5lcic+ICYgeyBpZ25vcmVGb3JjZWRPcmlnaW4/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGwodGhpcy5nZXRFbGVtZW50U2Nyb2xsQ29vcmRpbmF0ZXMob3B0aW9ucykpO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50QnlJbmRleChcbiAgICBvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPiAmIHsgaW5kZXg6IG51bWJlcjsgaWdub3JlRm9yY2VkT3JpZ2luPzogYm9vbGVhbiB9LFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuKCk7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW29wdGlvbnMuaW5kZXhdO1xuXG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG5cbiAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb0VsZW1lbnRWaWFOYXZpZ2F0aW9uKGVsZW1lbnRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuKClbZWxlbWVudEluZGV4XTtcbiAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KGVsZW1lbnRJbmRleCk7XG5cbiAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBlbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFRvU3RhcnREaXJlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTW9kZSgpID09PSAnY29udGFpbmVyJykge1xuICAgICAgdGhpcy5zY3JvbGxPbmVDb250YWluZXJTaXplKCdzdGFydCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUl0ZW1TaXplKCdzdGFydCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb0VuZERpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxNb2RlKCkgPT09ICdjb250YWluZXInKSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUNvbnRhaW5lclNpemUoJ2VuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUl0ZW1TaXplKCdlbmQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbmFibGVTbmFwcGluZygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyQsIHRoaXMuaXNDdXJzb3JEcmFnZ2luZyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoWywgaXNEcmFnZ2luZ10pID0+ICFpc0RyYWdnaW5nKSxcbiAgICAgICAgbWFwKChbaW50ZXJzZWN0aW9uc10pID0+IGludGVyc2VjdGlvbnMpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTUwKSxcbiAgICAgICAgdGFwKChhbGxJbnRlcnNlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFzY3JvbGxFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gZ2V0SW50ZXJzZWN0aW9uSW5mbyhhbGxJbnRlcnNlY3Rpb25zKTtcblxuICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9ucykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCA9XG4gICAgICAgICAgICBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW50ZXJzZWN0aW9uID09PSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbnRlcnNlY3Rpb247XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVJlY3QgPSBzY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsT3JpZ2luKCkgPT09ICdjZW50ZXInICYmIGludGVyc2VjdGlvbnMuZnVsbC5oYXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBmdWxseSB2aXNpYmxlIGVsZW1lbnQgd2Ugc2hvdWxkIG5vdCBzbmFwIGF0IGFsbC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nyb2xsT3JpZ2luKCkgPT09ICdjZW50ZXInICYmIGludGVyc2VjdGlvbnMuZnVsbC5maXJzdC5pbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBmdWxseSB2aXNpYmxlIGVsZW1lbnQgd2Ugc2hvdWxkIHNuYXAgaXQgdG8gdGhlIGNlbnRlci5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5mdWxsLmZpcnN0LmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgIG9yaWdpbjogJ2NlbnRlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRmlyc3RBbmRMYXN0SW50ZXJzZWN0aW9uRXF1YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTdGFydE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICAgICAgICA/IGludGVyc2VjdGlvbi5sZWZ0ID49IHNjcm9sbGFibGVSZWN0LmxlZnRcbiAgICAgICAgICAgICAgICA6IGludGVyc2VjdGlvbi50b3AgPj0gc2Nyb2xsYWJsZVJlY3QudG9wO1xuXG4gICAgICAgICAgICBjb25zdCBpc0VuZE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICAgICAgICA/IGludGVyc2VjdGlvbi5yaWdodCA8PSBzY3JvbGxhYmxlUmVjdC5yaWdodFxuICAgICAgICAgICAgICAgIDogaW50ZXJzZWN0aW9uLmJvdHRvbSA8PSBzY3JvbGxhYmxlUmVjdC5ib3R0b207XG5cbiAgICAgICAgICAgIC8vIERvbid0IHNuYXAgaWYgbmVpdGhlciB0aGUgc3RhcnQgbm9yIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB2aXNpYmxlLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgd291bGQgcmVzdWx0IGluIHBhcnRzIG9mIHRoZSBlbGVtZW50IGJlaW5nIGluYWNjZXNzaWJsZS5cbiAgICAgICAgICAgIGlmICghaXNTdGFydE9mRWxlbWVudFZpc2libGUgJiYgIWlzRW5kT2ZFbGVtZW50VmlzaWJsZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSB3ZSBzaG91bGQgc25hcCB0byB0aGUgc3RhcnQuXG4gICAgICAgICAgICBpZiAoaXNTdGFydE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIHdlIHNob3VsZCBzbmFwIHRvIHRoZSBlbmQuXG4gICAgICAgICAgICBpZiAoaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbjogJ2VuZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICh0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgJiZcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLmJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCA+IHNjcm9sbGFibGVSZWN0LndpZHRoKSB8fFxuICAgICAgICAgICAgKHRoaXMuZGlyZWN0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLmJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgPiBzY3JvbGxhYmxlUmVjdC5oZWlnaHQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGJpZ2dlciB0aGFuIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciB3ZSBzaG91bGQgc25hcCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpZiB0aGUgc2Nyb2xsIGRpcmVjdGlvbiBpcyBmb3J3YXJkXG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGlmIHRoZSBzY3JvbGwgZGlyZWN0aW9uIGlzIGJhY2t3YXJkcy5cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGludGVyc2VjdGlvbnMucGFydGlhbC5iaWdnZXN0LmluZGV4ID09PSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW5kZXggPyAnZW5kJyA6ICdzdGFydCc7XG5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgICBpZ25vcmVGb3JjZWRPcmlnaW46IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gc3BlY2lhbCBjYXNlLiBKdXN0IHNuYXAgdG8gdGhlIGJpZ2dlc3QgaW50ZXJzZWN0aW9uLlxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuYmlnZ2VzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rpc2FibGVTbmFwcGluZyQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZVNuYXBwaW5nKCkge1xuICAgIHRoaXMuX2Rpc2FibGVTbmFwcGluZyQubmV4dCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS13cmFwcGVyXCI+XG4gIDxkaXZcbiAgICAjc2Nyb2xsYWJsZVxuICAgIFthdHRyLnJvbGVdPVwic2Nyb2xsYWJsZVJvbGUoKSA/PyB1bmRlZmluZWRcIlxuICAgIFtuZ0NsYXNzXT1cInNjcm9sbGFibGVDbGFzcygpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyXCJcbiAgPlxuICAgIDxkaXYgI2ZpcnN0RWxlbWVudCBjbGFzcz1cImV0LXNjcm9sbC1vYnNlcnZlci1maXJzdC1lbGVtZW50XCIgZXRTY3JvbGxhYmxlSWdub3JlQ2hpbGQ+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8ZGl2ICNsYXN0RWxlbWVudCBjbGFzcz1cImV0LXNjcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnRcIiBldFNjcm9sbGFibGVJZ25vcmVDaGlsZD48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChyZW5kZXJNYXNrcygpKSB7XG4gICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbWFza3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2sgZXQtc2Nyb2xsYWJsZS1tYXNrLS1zdGFydFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbWFzayBldC1zY3JvbGxhYmxlLW1hc2stLWVuZFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGlmIChyZW5kZXJCdXR0b25zSW5zaWRlKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b25zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9yd2FyZEJ1dHRvblRwbFwiIC8+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFja3dhcmRCdXR0b25UcGxcIiAvPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChyZW5kZXJCdXR0b25zSW5Gb290ZXIoKSB8fCAocmVuZGVyTmF2aWdhdGlvbigpICYmIHNjcm9sbGFibGVOYXZpZ2F0aW9uKCkubGVuZ3RoID4gMSkpIHtcbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdldC1zY3JvbGxhYmxlLWZvb3Rlci0td2l0aC1uYXZpZ2F0aW9uJzogcmVuZGVyTmF2aWdhdGlvbigpLFxuICAgICAgJ2V0LXNjcm9sbGFibGUtZm9vdGVyLS13aXRoLWJ1dHRvbnMnOiByZW5kZXJCdXR0b25zSW5Gb290ZXIoKVxuICAgIH1cIlxuICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1mb290ZXJcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gID5cbiAgICBAaWYgKHJlbmRlckJ1dHRvbnNJbkZvb3RlcigpKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9yd2FyZEJ1dHRvblRwbFwiIC8+XG4gICAgfVxuXG4gICAgQGlmIChyZW5kZXJOYXZpZ2F0aW9uKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLXByb2dyZXNzLWJhclwiPlxuICAgICAgICA8ZGl2ICNuYXZpZ2F0aW9uRG90c0NvbnRhaW5lciBjbGFzcz1cImV0LXNjcm9sbGFibGUtZG90cy1jb250YWluZXJcIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNjcm9sbGFibGVOYXZpZ2F0aW9uKCk7IHRyYWNrIGk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICNuYXZpZ2F0aW9uRG90XG4gICAgICAgICAgICAgIFtjbGFzcy5ldC1zY3JvbGxhYmxlLW5hdmlnYXRpb24taXRlbS0tYWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIlxuICAgICAgICAgICAgICBbY2xhc3MuZXQtc2Nyb2xsYWJsZS1uYXZpZ2F0aW9uLWl0ZW0tLWNsb3NlXT1cIlxuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVOYXZpZ2F0aW9uKClbaSArIDFdPy5pc0FjdGl2ZSB8fCBzY3JvbGxhYmxlTmF2aWdhdGlvbigpW2kgLSAxXT8uaXNBY3RpdmVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmV0LXNjcm9sbGFibGUtbmF2aWdhdGlvbi1pdGVtLS1mYXJdPVwiXG4gICAgICAgICAgICAgICAgIXNjcm9sbGFibGVOYXZpZ2F0aW9uKClbaSArIDFdPy5pc0FjdGl2ZSAmJiAhc2Nyb2xsYWJsZU5hdmlnYXRpb24oKVtpIC0gMV0/LmlzQWN0aXZlICYmICFpdGVtLmlzQWN0aXZlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmFjdGl2ZS1vZmZzZXRdPVwiaXRlbS5hY3RpdmVPZmZzZXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2Nyb2xsVG9FbGVtZW50VmlhTmF2aWdhdGlvbihpKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1uYXZpZ2F0aW9uLWl0ZW1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAocmVuZGVyQnV0dG9uc0luRm9vdGVyKCkpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYWNrd2FyZEJ1dHRvblRwbFwiIC8+XG4gICAgfVxuICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICNmb3J3YXJkQnV0dG9uVHBsPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImlzQXRTdGFydCgpXCJcbiAgICAoY2xpY2spPVwic2Nyb2xsVG9TdGFydERpcmVjdGlvbigpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uIGV0LXNjcm9sbGFibGUtYnV0dG9uLS1zdGFydFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JhY2t3YXJkQnV0dG9uVHBsPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImlzQXRFbmQoKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvRW5kRGlyZWN0aW9uKClcIlxuICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b24gZXQtc2Nyb2xsYWJsZS1idXR0b24tLWVuZFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BHLE9BQU8sRUFDTCxZQUFZLEVBRVosMkJBQTJCLEVBRzNCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixtQkFBbUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxF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QUMsZUFBZSxDQUFDO29CQUNuQixPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQXFCO29CQUN6RSxNQUFNO29CQUNOLGtCQUFrQixFQUFFLElBQUk7aUJBQ3pCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwwREFBMEQ7Z0JBQzFELElBQUksQ0FBQyxlQUFlLENBQUM7b0JBQ25CLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBcUI7aUJBQzFFLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQ2xDO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs4R0FobEJVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLG9zRkEyQk0sZ0NBQWdDLGlwQkN4SHRFLHdtR0FnR0EsMGlURGRJLE9BQU8sb0ZBRVAsb0JBQW9CLDREQUVwQiw4QkFBOEIsMkdBQzlCLGdCQUFnQjs7MkZBTVAsbUJBQW1CO2tCQXBCL0IsU0FBUzsrQkFDRSxlQUFlLGNBR2IsSUFBSSxpQkFDRCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLDJCQUEyQjt3QkFDM0IsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsZ0NBQWdDO3dCQUNoQyw4QkFBOEI7d0JBQzlCLGdCQUFnQjtxQkFDakIsUUFDSzt3QkFDSixLQUFLLEVBQUUsZUFBZTtxQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkcmVuLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRGcm9tT2JzZXJ2YWJsZSwgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBMZXREaXJlY3RpdmUsXG4gIE5nQ2xhc3NUeXBlLFxuICBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUsXG4gIFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGUsXG4gIFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsXG4gIGNyZWF0ZUNhbkFuaW1hdGVTaWduYWwsXG4gIGNyZWF0ZUlzUmVuZGVyZWRTaWduYWwsXG4gIGdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyxcbiAgZ2V0SW50ZXJzZWN0aW9uSW5mbyxcbiAgc2lnbmFsQ2xhc3NlcyxcbiAgc2lnbmFsRWxlbWVudENoaWxkcmVuLFxuICBzaWduYWxFbGVtZW50RGltZW5zaW9ucyxcbiAgc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbixcbiAgc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlLFxuICBzaWduYWxIb3N0QXR0cmlidXRlcyxcbiAgc2lnbmFsSG9zdENsYXNzZXMsXG4gIHNpZ25hbEhvc3RTdHlsZXMsXG4gIHNpZ25hbFN0eWxlcyxcbiAgdXNlQ3Vyc29yRHJhZ1Njcm9sbCxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGV2cm9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb25zL2NoZXZyb24taWNvbic7XG5pbXBvcnQgeyBTY3JvbGxhYmxlSWdub3JlQ2hpbGREaXJlY3RpdmUsIGlzU2Nyb2xsYWJsZUNoaWxkSWdub3JlZCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYWJsZS1pZ25vcmUtY2hpbGQnO1xuaW1wb3J0IHtcbiAgU0NST0xMQUJMRV9JU19BQ1RJVkVfQ0hJTERfVE9LRU4sXG4gIFNjcm9sbGFibGVJc0FjdGl2ZUNoaWxkRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Njcm9sbGFibGUtaXMtYWN0aXZlLWNoaWxkJztcbmltcG9ydCB7IFNjcm9sbGFibGVJbnRlcnNlY3Rpb25DaGFuZ2UsIFNjcm9sbGFibGVTY3JvbGxNb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vLyBUaHJlc2hvbGRzIGZvciB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVyLlxuY29uc3QgRUxFTUVOVF9JTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gW1xuICAvLyA1JSBzdGVwc1xuICAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiAyMSB9LCAoXywgaSkgPT4gaSAqIDAuMDUpLFxuXG4gIC8vIEFkZGl0aW9uYWwgc3RlcHMgbmVlZGVkIHNpbmNlIGRpc3BsYXkgc2NhbGluZyBjYW4gY2F1c2UgdGhlIGludGVyc2VjdGlvbiByYXRpbyB0byBiZSBzbGlnaHRseSBvZmYuXG4gIDAuMDEsXG4gIDAuMDA1LFxuICAwLjAwMSxcbiAgMC45OSxcbiAgMC45OTUsXG4gIDAuOTk5LFxuXTtcblxuaW50ZXJmYWNlIFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbSB7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBhY3RpdmVPZmZzZXQ6IG51bWJlcjtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCB0eXBlIFNjcm9sbGFibGVCdXR0b25Qb3NpdGlvbiA9ICdpbnNpZGUnIHwgJ2Zvb3Rlcic7XG5leHBvcnQgdHlwZSBTY3JvbGxhYmxlU2Nyb2xsT3JpZ2luID0gJ2F1dG8nIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5leHBvcnQgdHlwZSBTY3JvbGxhYmxlRGlyZWN0aW9uID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbmV4cG9ydCB0eXBlIFNjcm9sbGFibGVJdGVtU2l6ZSA9ICdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtc2Nyb2xsYWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY3JvbGxhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2Nyb2xsYWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgICBOZ0NsYXNzLFxuICAgIExldERpcmVjdGl2ZSxcbiAgICBDaGV2cm9uSWNvbkNvbXBvbmVudCxcbiAgICBTY3JvbGxhYmxlSXNBY3RpdmVDaGlsZERpcmVjdGl2ZSxcbiAgICBTY3JvbGxhYmxlSWdub3JlQ2hpbGREaXJlY3RpdmUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtc2Nyb2xsYWJsZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbGFibGVDb21wb25lbnQge1xuICBwcml2YXRlIF9kaXNhYmxlU25hcHBpbmckID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIGl0ZW1TaXplID0gaW5wdXQ8U2Nyb2xsYWJsZUl0ZW1TaXplPignYXV0bycpO1xuICBkaXJlY3Rpb24gPSBpbnB1dDxTY3JvbGxhYmxlRGlyZWN0aW9uPignaG9yaXpvbnRhbCcpO1xuICBzY3JvbGxhYmxlUm9sZSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBzY3JvbGxhYmxlQ2xhc3MgPSBpbnB1dDxOZ0NsYXNzVHlwZSB8IG51bGw+KG51bGwpO1xuICByZW5kZXJOYXZpZ2F0aW9uID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICByZW5kZXJNYXNrcyA9IGlucHV0KHRydWUsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICByZW5kZXJCdXR0b25zID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIGJ1dHRvblBvc2l0aW9uID0gaW5wdXQ8U2Nyb2xsYWJsZUJ1dHRvblBvc2l0aW9uPignaW5zaWRlJyk7XG4gIHJlbmRlclNjcm9sbGJhcnMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIHN0aWNreUJ1dHRvbnMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIGN1cnNvckRyYWdTY3JvbGwgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIHNjcm9sbE1vZGUgPSBpbnB1dDxTY3JvbGxhYmxlU2Nyb2xsTW9kZT4oJ2NvbnRhaW5lcicpO1xuICBzbmFwID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBzY3JvbGxNYXJnaW4gPSBpbnB1dCgwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuICBzY3JvbGxPcmlnaW4gPSBpbnB1dDxTY3JvbGxhYmxlU2Nyb2xsT3JpZ2luPignYXV0bycpO1xuICBkYXJrZW5Ob25JbnRlcnNlY3RpbmdJdGVtcyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBzY3JvbGxhYmxlID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pignc2Nyb2xsYWJsZScpO1xuICBmaXJzdEVsZW1lbnQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdmaXJzdEVsZW1lbnQnKTtcbiAgbGFzdEVsZW1lbnQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdsYXN0RWxlbWVudCcpO1xuICBhY3RpdmVFbGVtZW50TGlzdCA9IGNvbnRlbnRDaGlsZHJlbihTQ1JPTExBQkxFX0lTX0FDVElWRV9DSElMRF9UT0tFTiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcbiAgbmF2aWdhdGlvbkRvdHNDb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCduYXZpZ2F0aW9uRG90c0NvbnRhaW5lcicpO1xuICBmaXJzdE5hdmlnYXRpb25Eb3QgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4+KCduYXZpZ2F0aW9uRG90Jyk7XG4gIG5hdmlnYXRpb25Eb3REaW1lbnNpb25zID0gc2lnbmFsRWxlbWVudERpbWVuc2lvbnModGhpcy5maXJzdE5hdmlnYXRpb25Eb3QpO1xuXG4gIGlzUmVuZGVyZWQgPSBjcmVhdGVJc1JlbmRlcmVkU2lnbmFsKCk7XG4gIGNhbkFuaW1hdGUgPSBjcmVhdGVDYW5BbmltYXRlU2lnbmFsKCk7XG5cbiAgY3Vyc29yRHJhZ1Njcm9sbFN0YXRlID0gdXNlQ3Vyc29yRHJhZ1Njcm9sbCh0aGlzLnNjcm9sbGFibGUsIHtcbiAgICBlbmFibGVkOiB0aGlzLmN1cnNvckRyYWdTY3JvbGwsXG4gICAgYWxsb3dlZERpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24sXG4gIH0pO1xuICBpc0N1cnNvckRyYWdnaW5nJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmN1cnNvckRyYWdTY3JvbGxTdGF0ZS5pc0RyYWdnaW5nKTtcblxuICByZW5kZXJCdXR0b25zSW5zaWRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5idXR0b25Qb3NpdGlvbigpID09PSAnaW5zaWRlJyAmJiB0aGlzLnJlbmRlckJ1dHRvbnMoKSk7XG4gIHJlbmRlckJ1dHRvbnNJbkZvb3RlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYnV0dG9uUG9zaXRpb24oKSA9PT0gJ2Zvb3RlcicgJiYgdGhpcy5yZW5kZXJCdXR0b25zKCkpO1xuXG4gIGNvbnRhaW5lclNjcm9sbFN0YXRlID0gc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlKHRoaXMuc2Nyb2xsYWJsZSwge1xuICAgIGluaXRpYWxTY3JvbGxQb3NpdGlvbjogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsYWJsZSA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudExpc3QgPSB0aGlzLmFjdGl2ZUVsZW1lbnRMaXN0KCk7XG5cbiAgICAgIGlmICghc2Nyb2xsYWJsZSB8fCAhYWN0aXZlRWxlbWVudExpc3QubGVuZ3RoIHx8ICF0aGlzLmlzUmVuZGVyZWQuc3RhdGUoKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGZpcnN0QWN0aXZlID0gYWN0aXZlRWxlbWVudExpc3QuZmluZCgoYSkgPT4gYS5pc0FjdGl2ZUNoaWxkRW5hYmxlZCgpKTtcblxuICAgICAgaWYgKGZpcnN0QWN0aXZlICYmICF0aGlzLmRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFNjcm9sbENvb3JkaW5hdGVzKHsgZWxlbWVudDogZmlyc3RBY3RpdmUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KSxcbiAgfSk7XG4gIGZpcnN0RWxlbWVudEludGVyc2VjdGlvbiA9IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24odGhpcy5maXJzdEVsZW1lbnQsIHtcbiAgICByb290OiB0aGlzLnNjcm9sbGFibGUsXG4gICAgZW5hYmxlZDogdGhpcy5pc1JlbmRlcmVkLnN0YXRlLFxuICB9KTtcbiAgbGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMubGFzdEVsZW1lbnQsIHtcbiAgICByb290OiB0aGlzLnNjcm9sbGFibGUsXG4gICAgZW5hYmxlZDogdGhpcy5pc1JlbmRlcmVkLnN0YXRlLFxuICB9KTtcblxuICBhbGxTY3JvbGxhYmxlQ2hpbGRyZW4gPSBzaWduYWxFbGVtZW50Q2hpbGRyZW4odGhpcy5zY3JvbGxhYmxlKTtcbiAgc2Nyb2xsYWJsZUNoaWxkcmVuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbGxTY3JvbGxhYmxlQ2hpbGRyZW4oKS5maWx0ZXIoKGMpID0+ICFpc1Njcm9sbGFibGVDaGlsZElnbm9yZWQoYykpKTtcblxuICBzY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMgPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuLCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIHRocmVzaG9sZDogRUxFTUVOVF9JTlRFUlNFQ1RJT05fVEhSRVNIT0xELFxuICAgIGVuYWJsZWQ6IHRoaXMuaXNSZW5kZXJlZC5zdGF0ZSxcbiAgfSk7XG4gIHNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyQgPSB0b09ic2VydmFibGUodGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMpO1xuXG4gIG5vblNjcm9sbGFibGVJbnRlcnNlY3Rpb25zID0gY29tcHV0ZWQoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgYWxsSW50ZXJzZWN0aW9ucyA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKCk7XG4gICAgICByZXR1cm4gYWxsSW50ZXJzZWN0aW9ucy5maWx0ZXIoKGkpID0+IGkuaW50ZXJzZWN0aW9uUmF0aW8gIT09IDEpLm1hcCgoaSkgPT4gaS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH0sXG4gICAgeyBlcXVhbDogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSBiW2ldKSB9LFxuICApO1xuXG4gIGFsbFNjcm9sbGFibGVFbGVtZW50cyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpLm1hcCgoaSkgPT4gaS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH0sXG4gICAgeyBlcXVhbDogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSBiW2ldKSB9LFxuICApO1xuXG4gIGlzQXRTdGFydCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmZpcnN0RWxlbWVudEludGVyc2VjdGlvbigpWzBdO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uaXNJbnRlcnNlY3Rpbmc7XG4gIH0pO1xuXG4gIGlzQXRFbmQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaW50ZXJzZWN0aW9uID0gdGhpcy5sYXN0RWxlbWVudEludGVyc2VjdGlvbigpWzBdO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uaXNJbnRlcnNlY3Rpbmc7XG4gIH0pO1xuXG4gIGNhblNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5pc0F0U3RhcnQoKSAmJiB0aGlzLmlzQXRFbmQoKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHNjcm9sbGFibGVOYXZpZ2F0aW9uID0gY29tcHV0ZWQ8U2Nyb2xsYWJsZU5hdmlnYXRpb25JdGVtW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxJbnRlcnNlY3Rpb25zID0gdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMoKTtcbiAgICBjb25zdCBtYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXggPSB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXgoKTtcblxuICAgIGNvbnN0IGhpZ2hlc3RJbnRlcnNlY3Rpb24gPSBhbGxJbnRlcnNlY3Rpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgaWYgKHByZXYgJiYgcHJldi5pbnRlcnNlY3Rpb25SYXRpbyA+IGN1cnIuaW50ZXJzZWN0aW9uUmF0aW8pIHtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyO1xuICAgIH0sIGFsbEludGVyc2VjdGlvbnNbMF0pO1xuXG4gICAgaWYgKCFoaWdoZXN0SW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSW5kZXggPVxuICAgICAgbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ICE9PSBudWxsXG4gICAgICAgID8gbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4XG4gICAgICAgIDogYWxsSW50ZXJzZWN0aW9ucy5maW5kSW5kZXgoKGkpID0+IGkgPT09IGhpZ2hlc3RJbnRlcnNlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGFsbEludGVyc2VjdGlvbnMubWFwKChpLCBpbmRleCkgPT4gKHtcbiAgICAgIGlzQWN0aXZlOlxuICAgICAgICBtYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXggIT09IG51bGxcbiAgICAgICAgICA/IG1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCA9PT0gaW5kZXhcbiAgICAgICAgICA6IGkgPT09IGhpZ2hlc3RJbnRlcnNlY3Rpb24gJiYgaGlnaGVzdEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb25SYXRpbyA+IDAsXG4gICAgICBhY3RpdmVPZmZzZXQ6IGluZGV4ID09PSBhY3RpdmVJbmRleCA/IDAgOiBNYXRoLmFicyhpbmRleCAtIGFjdGl2ZUluZGV4KSxcbiAgICAgIGVsZW1lbnQ6IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgYWN0aXZlSW5kZXggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsYWJsZU5hdmlnYXRpb24gPSB0aGlzLnNjcm9sbGFibGVOYXZpZ2F0aW9uKCk7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSBzY3JvbGxhYmxlTmF2aWdhdGlvbi5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQuaXNBY3RpdmUpO1xuXG4gICAgcmV0dXJuIGFjdGl2ZUluZGV4O1xuICB9KTtcblxuICBpbnRlcnNlY3Rpb25DaGFuZ2UgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZTxTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlW10+KFxuICAgIHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zJC5waXBlKFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgbWFwKChlbnRyaWVzKSA9PlxuICAgICAgICBlbnRyaWVzLm1hcCgoaSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZWxlbWVudDogaS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW86IGkuaW50ZXJzZWN0aW9uUmF0aW8sXG4gICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IGkuaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgIH0pKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBzY3JvbGxTdGF0ZUNoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlPFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGU+KFxuICAgIHRvT2JzZXJ2YWJsZShcbiAgICAgIGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gdGhpcy5pc0F0U3RhcnQoKTtcbiAgICAgICAgY29uc3QgaXNBdEVuZCA9IHRoaXMuaXNBdEVuZCgpO1xuICAgICAgICBjb25zdCBjYW5TY3JvbGwgPSB0aGlzLmNhblNjcm9sbCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2FuU2Nyb2xsLFxuICAgICAgICAgIGlzQXRFbmQ6ICEhaXNBdEVuZCxcbiAgICAgICAgICBpc0F0U3RhcnQ6ICEhaXNBdFN0YXJ0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcblxuICBhbGxDaGlsZEVsZW1lbnRDbGFzc0JpbmRpbmdzID0gc2lnbmFsQ2xhc3Nlcyh0aGlzLmFsbFNjcm9sbGFibGVFbGVtZW50cywge1xuICAgICdldC1zY3JvbGxhYmxlLWl0ZW0nOiBzaWduYWwodHJ1ZSksXG4gIH0pO1xuXG4gIG5vbkZ1bGxJbnRlcnNlY3RpbmdFbGVtZW50Q2xhc3NCaW5kaW5ncyA9IHNpZ25hbENsYXNzZXModGhpcy5ub25TY3JvbGxhYmxlSW50ZXJzZWN0aW9ucywge1xuICAgICdldC1zY3JvbGxhYmxlLWl0ZW0tLW5vdC1pbnRlcnNlY3RpbmcnOiBzaWduYWwodHJ1ZSksXG4gIH0pO1xuXG4gIGhvc3RBdHRyaWJ1dGVCaW5kaW5ncyA9IHNpZ25hbEhvc3RBdHRyaWJ1dGVzKHtcbiAgICAnaXRlbS1zaXplJzogdGhpcy5pdGVtU2l6ZSxcbiAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uLFxuICAgICdyZW5kZXItc2Nyb2xsYmFycyc6IHRoaXMucmVuZGVyU2Nyb2xsYmFycyxcbiAgICAnc3RpY2t5LWJ1dHRvbnMnOiBjb21wdXRlZCgoKSA9PiB0aGlzLnN0aWNreUJ1dHRvbnMoKSAmJiB0aGlzLnJlbmRlckJ1dHRvbnNJbnNpZGUoKSksXG4gIH0pO1xuXG4gIGhvc3RDbGFzc0JpbmRpbmdzID0gc2lnbmFsSG9zdENsYXNzZXMoe1xuICAgICdldC1zY3JvbGxhYmxlLS1jYW4tc2Nyb2xsJzogY29tcHV0ZWQoKCkgPT4gdGhpcy5jYW5TY3JvbGwoKSAmJiAoIXRoaXMuaXNBdFN0YXJ0KCkgfHwgIXRoaXMuaXNBdEVuZCgpKSksXG4gICAgJ2V0LXNjcm9sbGFibGUtLWlzLWF0LXN0YXJ0JzogdGhpcy5pc0F0U3RhcnQsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWlzLWF0LWVuZCc6IHRoaXMuaXNBdEVuZCxcbiAgICAnZXQtc2Nyb2xsYWJsZS0tY2FuLWFuaW1hdGUnOiB0aGlzLmNhbkFuaW1hdGUuc3RhdGUsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWRhcmtlbi1ub24taW50ZXJzZWN0aW5nLWl0ZW1zJzogdGhpcy5kYXJrZW5Ob25JbnRlcnNlY3RpbmdJdGVtcyxcbiAgfSk7XG5cbiAgaG9zdFN0eWxlQmluZGluZ3MgPSBzaWduYWxIb3N0U3R5bGVzKHtcbiAgICAnLS1pdGVtLWNvdW50JzogY29tcHV0ZWQoKCkgPT4gdGhpcy5zY3JvbGxhYmxlQ2hpbGRyZW4oKS5sZW5ndGgpLFxuICB9KTtcblxuICBzY3JvbGxhYmxlRG90c0NvbnRhaW5lclN0eWxlQmluZGluZ3MgPSBzaWduYWxTdHlsZXModGhpcy5uYXZpZ2F0aW9uRG90c0NvbnRhaW5lciwge1xuICAgIC8vIFJlc3BvbnNpYmxlIGZvciBjZW50ZXJpbmcgdGhlIGFjdGl2ZSBkb3QgaW4gbmF2aWdhdGlvbiBiYXIgYnkgdXNpbmcgJ3RyYW5zbGF0ZSdcbiAgICB0cmFuc2Zvcm06IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleCgpO1xuICAgICAgY29uc3QgY2hpbGRDb3VudCA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKCkubGVuZ3RoO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXROYXZpZ2F0aW9uRG90c0NvbnRhaW5lclRyYW5zbGF0ZShjaGlsZENvdW50LCBhY3RpdmVJbmRleCk7XG4gICAgICBjb25zdCBkaXIgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyAnWCcgOiAnWSc7XG5cbiAgICAgIHJldHVybiBgdHJhbnNsYXRlJHtkaXJ9KCR7b2Zmc2V0fSlgO1xuICAgIH0pLFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlU25hcHBpbmcgPSB0aGlzLnNuYXAoKTtcblxuICAgICAgaWYgKGVuYWJsZVNuYXBwaW5nKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZVNuYXBwaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kaXNhYmxlU25hcHBpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChpKSA9PiBpICE9PSBudWxsKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZSA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFzY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZyb21FdmVudChzY3JvbGxhYmxlLCAnc2Nyb2xsJyk7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChudWxsKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmlzUmVuZGVyZWQuYmluZCgpO1xuICB9XG5cbiAgZ2V0TmF2aWdhdGlvbkRvdHNDb250YWluZXJUcmFuc2xhdGUobmF2aWdhdGlvbkRvdENvdW50OiBudW1iZXIsIGFjdGl2ZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAobmF2aWdhdGlvbkRvdENvdW50IDw9IDUpIHtcbiAgICAgIHJldHVybiAnMHB4JztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZG90Q29udGFpbmVyV2lkdGggPSB0aGlzLm5hdmlnYXRpb25Eb3REaW1lbnNpb25zKCkucmVjdD8ud2lkdGggPz8gMjA7XG4gICAgICBsZXQgb2Zmc2V0ID0gLShhY3RpdmVJbmRleCAtIDIpO1xuICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgMykge1xuICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJbmRleCA+PSBuYXZpZ2F0aW9uRG90Q291bnQgLSAzKSB7XG4gICAgICAgIG9mZnNldCA9IDUgLSBuYXZpZ2F0aW9uRG90Q291bnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7b2Zmc2V0ICogZG90Q29udGFpbmVyV2lkdGh9cHhgO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbE9uZUNvbnRhaW5lclNpemUoZGlyZWN0aW9uOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIXNjcm9sbEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IGlzU25hcHBpbmdFbmFibGVkID0gdGhpcy5zbmFwKCk7XG5cbiAgICBpZiAoaXNTbmFwcGluZ0VuYWJsZWQpIHtcbiAgICAgIC8vIElmIHNuYXBwaW5nIGlzIGVuYWJsZWQgd2Ugd2FudCB0byBzY3JvbGwgdG8gYSBwb3NpdGlvbiB3aGVyZSBubyBmdXJ0aGVyIHNuYXBwaW5nIHdpbGwgaGFwcGVuIGFmdGVyIHRoZSBzY3JvbGwuXG4gICAgICBjb25zdCBhbGxJbnRlcnNlY3Rpb25zID0gdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMoKTtcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbnMgPSBnZXRJbnRlcnNlY3Rpb25JbmZvKGFsbEludGVyc2VjdGlvbnMpO1xuICAgICAgY29uc3QgcmVsZXZhbnRJbnRlcnNlY3Rpb24gPSBkaXJlY3Rpb24gPT09ICdzdGFydCcgPyBpbnRlcnNlY3Rpb25zPy5wYXJ0aWFsLmZpcnN0IDogaW50ZXJzZWN0aW9ucz8ucGFydGlhbC5sYXN0O1xuXG4gICAgICBpZiAoIXJlbGV2YW50SW50ZXJzZWN0aW9uKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICAgIHJlbGV2YW50SW50ZXJzZWN0aW9uLmludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb25SYXRpbyAhPT0gMVxuICAgICAgICAgID8gcmVsZXZhbnRJbnRlcnNlY3Rpb24uaW5kZXhcbiAgICAgICAgICA6IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0J1xuICAgICAgICAgICAgPyByZWxldmFudEludGVyc2VjdGlvbi5pbmRleCAtIDFcbiAgICAgICAgICAgIDogcmVsZXZhbnRJbnRlcnNlY3Rpb24uaW5kZXggKyAxO1xuXG4gICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgKGFsbEludGVyc2VjdGlvbnNbbmV4dEluZGV4XT8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fFxuICAgICAgICAocmVsZXZhbnRJbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgb3JpZ2luOiBkaXJlY3Rpb24gPT09ICdlbmQnID8gJ3N0YXJ0JyA6ICdlbmQnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEp1c3Qgc2Nyb2xsIG9uZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lci5cbiAgICAgIGNvbnN0IHNjcm9sbGFibGVTaXplID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gcGFyZW50LmNsaWVudFdpZHRoIDogcGFyZW50LmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBzY3JvbGxFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgICAgc2Nyb2xsRWxlbWVudC5zY3JvbGxUbyh7XG4gICAgICAgIFt0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyAnbGVmdCcgOiAndG9wJ106XG4gICAgICAgICAgY3VycmVudFNjcm9sbCArIChkaXJlY3Rpb24gPT09ICdzdGFydCcgPyAtc2Nyb2xsYWJsZVNpemUgOiBzY3JvbGxhYmxlU2l6ZSksXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbE9uZUl0ZW1TaXplKGRpcmVjdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgY29uc3QgYWxsSW50ZXJzZWN0aW9ucyA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKCk7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFhbGxJbnRlcnNlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnTm8gZWxlbWVudHMgZm91bmQgdG8gc2Nyb2xsIHRvLiBNYWtlIHN1cmUgdG8gYXBwbHkgdGhlIGlzRWxlbWVudCBkaXJlY3RpdmUgdG8gdGhlIGVsZW1lbnRzIHlvdSB3YW50IHRvIHNjcm9sbCB0by4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVyc2VjdGlvbnMgPSBnZXRJbnRlcnNlY3Rpb25JbmZvKGFsbEludGVyc2VjdGlvbnMpO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb25zIHx8ICFzY3JvbGxFbGVtZW50KSByZXR1cm47XG5cbiAgICAvLyBNZWFucyB0aGUgY3VycmVudCBlbGVtZW50IGlzIGJpZ2dlciB0aGFuIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lci5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHNjcm9sbCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4gSWYgd2UgYXJlIGFscmVhZHkgdGhlcmUgd2Ugc2hvdWxkIHNjcm9sbCB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBlbGVtZW50LlxuICAgIC8vIFRoaXMgYXBwbGllcyB0byB0aGUgb3RoZXIgZGlyZWN0aW9uIGFzIHdlbGwuXG4gICAgY29uc3QgaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCA9XG4gICAgICBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW50ZXJzZWN0aW9uID09PSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbnRlcnNlY3Rpb247XG4gICAgY29uc3Qgc2Nyb2xsYWJsZVJlY3QgPSBzY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKGlzRmlyc3RBbmRMYXN0SW50ZXJzZWN0aW9uRXF1YWwpIHtcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXNTdGFydE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLmxlZnQpID49IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QubGVmdClcbiAgICAgICAgICA6IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLnRvcCkgPj0gTWF0aC5yb3VuZChzY3JvbGxhYmxlUmVjdC50b3ApO1xuXG4gICAgICBjb25zdCBpc0VuZE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLnJpZ2h0KSA8PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LnJpZ2h0KVxuICAgICAgICAgIDogTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24uYm90dG9tKSA8PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LmJvdHRvbSk7XG5cbiAgICAgIGlmICghaXNTdGFydE9mRWxlbWVudFZpc2libGUgfHwgIWlzRW5kT2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgaWYgKGlzU3RhcnRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmluZGV4IC0gMTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb1Njcm9sbFRvID0gYWxsSW50ZXJzZWN0aW9uc1twcmV2aW91c0luZGV4XT8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnRUb1Njcm9sbFRvKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KHByZXZpb3VzSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luOiAnc3RhcnQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0VuZE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9TY3JvbGxUbyA9IGFsbEludGVyc2VjdGlvbnNbbmV4dEluZGV4XT8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnRUb1Njcm9sbFRvKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgICAgICAgICBvcmlnaW46ICdzdGFydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQobmV4dEluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgIG9yaWdpbjogJ2VuZCcsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5zY3JvbGxPcmlnaW4oKSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIC8vIElmIHRoZSBzY3JvbGwgb3JpZ2luIGlzIGZvcmNlZCB0byBiZSBjZW50ZXIgd2Ugc2hvdWxkIGFsd2F5cyBzbmFwIHRvIHRoZSBjZW50ZXIgb2YgdGhlIG5leHQgcGFydGlhbCBpbnRlcnNlY3Rpb24gaW4gdGhlIHNjcm9sbCBkaXJlY3Rpb24uXG4gICAgICBjb25zdCBuZXh0UGFydGlhbEludGVyc2VjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdCA6IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0O1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gbmV4dFBhcnRpYWxJbnRlcnNlY3Rpb24uaW5kZXg7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgZWxlbWVudDogbmV4dFBhcnRpYWxJbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgb3JpZ2luOiAnY2VudGVyJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChuZXh0SW5kZXgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdCA6IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0O1xuICAgIGxldCBlbGVtZW50VG9TY3JvbGxUbyA9IGRhdGEuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBsZXQgbmV4dEluZGV4ID0gZGF0YS5pbmRleDtcblxuICAgIGlmIChNYXRoLnJvdW5kKGRhdGEuaW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvKSA9PT0gMSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyAmJiBkYXRhLmluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2VuZCcgJiYgZGF0YS5pbmRleCA9PT0gYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dEluZGV4ID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gZGF0YS5pbmRleCAtIDEgOiBkYXRhLmluZGV4ICsgMTtcblxuICAgICAgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgaWYgKCFlbGVtZW50VG9TY3JvbGxUbykgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgb3JpZ2luOiBkaXJlY3Rpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KG5leHRJbmRleCk7XG4gIH1cblxuICBnZXRFbGVtZW50U2Nyb2xsQ29vcmRpbmF0ZXMob3B0aW9uczogT21pdDxTY3JvbGxUb0VsZW1lbnRPcHRpb25zLCAnY29udGFpbmVyJz4gJiB7IGlnbm9yZUZvcmNlZE9yaWdpbj86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBmb3JjZWRPcmlnaW4gPSB0aGlzLnNjcm9sbE9yaWdpbigpO1xuXG4gICAgcmV0dXJuIGdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyh7XG4gICAgICBjb250YWluZXI6IHNjcm9sbEVsZW1lbnQsXG4gICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdpbmxpbmUnIDogJ2Jsb2NrJyxcbiAgICAgIC4uLih0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IHNjcm9sbElubGluZU1hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9XG4gICAgICAgIDogeyBzY3JvbGxCbG9ja01hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9KSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAuLi4oZm9yY2VkT3JpZ2luID09PSAnYXV0bycgfHwgb3B0aW9ucy5pZ25vcmVGb3JjZWRPcmlnaW4gPyB7IG9yaWdpbiB9IDogeyBvcmlnaW46IGZvcmNlZE9yaWdpbiB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbFRvRWxlbWVudChvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPiAmIHsgaWdub3JlRm9yY2VkT3JpZ2luPzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsKHRoaXMuZ2V0RWxlbWVudFNjcm9sbENvb3JkaW5hdGVzKG9wdGlvbnMpKTtcbiAgfVxuXG4gIHNjcm9sbFRvRWxlbWVudEJ5SW5kZXgoXG4gICAgb3B0aW9uczogT21pdDxTY3JvbGxUb0VsZW1lbnRPcHRpb25zLCAnY29udGFpbmVyJz4gJiB7IGluZGV4OiBudW1iZXI7IGlnbm9yZUZvcmNlZE9yaWdpbj86IGJvb2xlYW4gfSxcbiAgKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLnNjcm9sbGFibGVDaGlsZHJlbigpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tvcHRpb25zLmluZGV4XTtcblxuICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9FbGVtZW50VmlhTmF2aWdhdGlvbihlbGVtZW50SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGVDaGlsZHJlbigpW2VsZW1lbnRJbmRleF07XG4gICAgdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChlbGVtZW50SW5kZXgpO1xuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb1N0YXJ0RGlyZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNjcm9sbE1vZGUoKSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lQ29udGFpbmVyU2l6ZSgnc3RhcnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxPbmVJdGVtU2l6ZSgnc3RhcnQnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9FbmREaXJlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTW9kZSgpID09PSAnY29udGFpbmVyJykge1xuICAgICAgdGhpcy5zY3JvbGxPbmVDb250YWluZXJTaXplKCdlbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxPbmVJdGVtU2l6ZSgnZW5kJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW5hYmxlU25hcHBpbmcoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMkLCB0aGlzLmlzQ3Vyc29yRHJhZ2dpbmckXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKFssIGlzRHJhZ2dpbmddKSA9PiAhaXNEcmFnZ2luZyksXG4gICAgICAgIG1hcCgoW2ludGVyc2VjdGlvbnNdKSA9PiBpbnRlcnNlY3Rpb25zKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDE1MCksXG4gICAgICAgIHRhcCgoYWxsSW50ZXJzZWN0aW9ucykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgIGlmICghc2Nyb2xsRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbkluZm8oYWxsSW50ZXJzZWN0aW9ucyk7XG5cbiAgICAgICAgICBpZiAoIWludGVyc2VjdGlvbnMpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGlzRmlyc3RBbmRMYXN0SW50ZXJzZWN0aW9uRXF1YWwgPVxuICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmludGVyc2VjdGlvbiA9PT0gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3QuaW50ZXJzZWN0aW9uO1xuICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVSZWN0ID0gc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgIGlmICh0aGlzLnNjcm9sbE9yaWdpbigpID09PSAnY2VudGVyJyAmJiBpbnRlcnNlY3Rpb25zLmZ1bGwuaGFzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZnVsbHkgdmlzaWJsZSBlbGVtZW50IHdlIHNob3VsZCBub3Qgc25hcCBhdCBhbGwuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNjcm9sbE9yaWdpbigpID09PSAnY2VudGVyJyAmJiBpbnRlcnNlY3Rpb25zLmZ1bGwuZmlyc3QuaW50ZXJzZWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgZnVsbHkgdmlzaWJsZSBlbGVtZW50IHdlIHNob3VsZCBzbmFwIGl0IHRvIHRoZSBjZW50ZXIuXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMuZnVsbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBvcmlnaW46ICdjZW50ZXInLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0ZpcnN0QW5kTGFzdEludGVyc2VjdGlvbkVxdWFsKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW50ZXJzZWN0aW9uLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU3RhcnRPZkVsZW1lbnRWaXNpYmxlID1cbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgICAgICAgPyBpbnRlcnNlY3Rpb24ubGVmdCA+PSBzY3JvbGxhYmxlUmVjdC5sZWZ0XG4gICAgICAgICAgICAgICAgOiBpbnRlcnNlY3Rpb24udG9wID49IHNjcm9sbGFibGVSZWN0LnRvcDtcblxuICAgICAgICAgICAgY29uc3QgaXNFbmRPZkVsZW1lbnRWaXNpYmxlID1cbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgICAgICAgPyBpbnRlcnNlY3Rpb24ucmlnaHQgPD0gc2Nyb2xsYWJsZVJlY3QucmlnaHRcbiAgICAgICAgICAgICAgICA6IGludGVyc2VjdGlvbi5ib3R0b20gPD0gc2Nyb2xsYWJsZVJlY3QuYm90dG9tO1xuXG4gICAgICAgICAgICAvLyBEb24ndCBzbmFwIGlmIG5laXRoZXIgdGhlIHN0YXJ0IG5vciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdmlzaWJsZS5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGlzIHdvdWxkIHJlc3VsdCBpbiBwYXJ0cyBvZiB0aGUgZWxlbWVudCBiZWluZyBpbmFjY2Vzc2libGUuXG4gICAgICAgICAgICBpZiAoIWlzU3RhcnRPZkVsZW1lbnRWaXNpYmxlICYmICFpc0VuZE9mRWxlbWVudFZpc2libGUpIHJldHVybjtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50IGlzIHZpc2libGUgd2Ugc2hvdWxkIHNuYXAgdG8gdGhlIHN0YXJ0LlxuICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgICBvcmlnaW46ICdzdGFydCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSB3ZSBzaG91bGQgc25hcCB0byB0aGUgZW5kLlxuICAgICAgICAgICAgaWYgKGlzRW5kT2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnICYmXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucGFydGlhbC5iaWdnZXN0LmludGVyc2VjdGlvbi5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggPiBzY3JvbGxhYmxlUmVjdC53aWR0aCkgfHxcbiAgICAgICAgICAgICh0aGlzLmRpcmVjdGlvbigpID09PSAndmVydGljYWwnICYmXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucGFydGlhbC5iaWdnZXN0LmludGVyc2VjdGlvbi5ib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0ID4gc2Nyb2xsYWJsZVJlY3QuaGVpZ2h0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBiaWdnZXIgdGhhbiB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIgd2Ugc2hvdWxkIHNuYXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgaWYgdGhlIHNjcm9sbCBkaXJlY3Rpb24gaXMgZm9yd2FyZFxuICAgICAgICAgICAgLy8gYW5kIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpZiB0aGUgc2Nyb2xsIGRpcmVjdGlvbiBpcyBiYWNrd2FyZHMuXG4gICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuYmlnZ2VzdC5pbmRleCA9PT0gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmluZGV4ID8gJ2VuZCcgOiAnc3RhcnQnO1xuXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMucGFydGlhbC5iaWdnZXN0LmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgICAgaWdub3JlRm9yY2VkT3JpZ2luOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHNwZWNpYWwgY2FzZS4gSnVzdCBzbmFwIHRvIHRoZSBiaWdnZXN0IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kaXNhYmxlU25hcHBpbmckKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVTbmFwcGluZygpIHtcbiAgICB0aGlzLl9kaXNhYmxlU25hcHBpbmckLm5leHQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtd3JhcHBlclwiPlxuICA8ZGl2XG4gICAgI3Njcm9sbGFibGVcbiAgICBbYXR0ci5yb2xlXT1cInNjcm9sbGFibGVSb2xlKCkgPz8gdW5kZWZpbmVkXCJcbiAgICBbbmdDbGFzc109XCJzY3JvbGxhYmxlQ2xhc3MoKVwiXG4gICAgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWNvbnRhaW5lclwiXG4gID5cbiAgICA8ZGl2ICNmaXJzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudFwiIGV0U2Nyb2xsYWJsZUlnbm9yZUNoaWxkPjwvZGl2PlxuICAgIDxuZy1jb250ZW50IC8+XG4gICAgPGRpdiAjbGFzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50XCIgZXRTY3JvbGxhYmxlSWdub3JlQ2hpbGQ+PC9kaXY+XG4gIDwvZGl2PlxuXG4gIEBpZiAocmVuZGVyTWFza3MoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2tzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrIGV0LXNjcm9sbGFibGUtbWFzay0tc3RhcnRcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2sgZXQtc2Nyb2xsYWJsZS1tYXNrLS1lbmRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBpZiAocmVuZGVyQnV0dG9uc0luc2lkZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcndhcmRCdXR0b25UcGxcIiAvPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJhY2t3YXJkQnV0dG9uVHBsXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbkBpZiAoKHJlbmRlckJ1dHRvbnNJbkZvb3RlcigpIHx8IChyZW5kZXJOYXZpZ2F0aW9uKCkgJiYgc2Nyb2xsYWJsZU5hdmlnYXRpb24oKS5sZW5ndGggPiAxKSkgJiYgY2FuU2Nyb2xsKCkpIHtcbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdldC1zY3JvbGxhYmxlLWZvb3Rlci0td2l0aC1uYXZpZ2F0aW9uJzogcmVuZGVyTmF2aWdhdGlvbigpLFxuICAgICAgJ2V0LXNjcm9sbGFibGUtZm9vdGVyLS13aXRoLWJ1dHRvbnMnOiByZW5kZXJCdXR0b25zSW5Gb290ZXIoKVxuICAgIH1cIlxuICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1mb290ZXJcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gID5cbiAgICBAaWYgKHJlbmRlckJ1dHRvbnNJbkZvb3RlcigpKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9yd2FyZEJ1dHRvblRwbFwiIC8+XG4gICAgfVxuXG4gICAgQGlmIChyZW5kZXJOYXZpZ2F0aW9uKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLXByb2dyZXNzLWJhclwiPlxuICAgICAgICA8ZGl2ICNuYXZpZ2F0aW9uRG90c0NvbnRhaW5lciBjbGFzcz1cImV0LXNjcm9sbGFibGUtZG90cy1jb250YWluZXJcIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNjcm9sbGFibGVOYXZpZ2F0aW9uKCk7IHRyYWNrIGk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICNuYXZpZ2F0aW9uRG90XG4gICAgICAgICAgICAgIFtjbGFzcy5ldC1zY3JvbGxhYmxlLW5hdmlnYXRpb24taXRlbS0tYWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIlxuICAgICAgICAgICAgICBbY2xhc3MuZXQtc2Nyb2xsYWJsZS1uYXZpZ2F0aW9uLWl0ZW0tLWNsb3NlXT1cIlxuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVOYXZpZ2F0aW9uKClbaSArIDFdPy5pc0FjdGl2ZSB8fCBzY3JvbGxhYmxlTmF2aWdhdGlvbigpW2kgLSAxXT8uaXNBY3RpdmVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmV0LXNjcm9sbGFibGUtbmF2aWdhdGlvbi1pdGVtLS1mYXJdPVwiXG4gICAgICAgICAgICAgICAgIXNjcm9sbGFibGVOYXZpZ2F0aW9uKClbaSArIDFdPy5pc0FjdGl2ZSAmJiAhc2Nyb2xsYWJsZU5hdmlnYXRpb24oKVtpIC0gMV0/LmlzQWN0aXZlICYmICFpdGVtLmlzQWN0aXZlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmFjdGl2ZS1vZmZzZXRdPVwiaXRlbS5hY3RpdmVPZmZzZXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2Nyb2xsVG9FbGVtZW50VmlhTmF2aWdhdGlvbihpKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1uYXZpZ2F0aW9uLWl0ZW1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAocmVuZGVyQnV0dG9uc0luRm9vdGVyKCkpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYWNrd2FyZEJ1dHRvblRwbFwiIC8+XG4gICAgfVxuICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICNmb3J3YXJkQnV0dG9uVHBsPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImlzQXRTdGFydCgpXCJcbiAgICAoY2xpY2spPVwic2Nyb2xsVG9TdGFydERpcmVjdGlvbigpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uIGV0LXNjcm9sbGFibGUtYnV0dG9uLS1zdGFydFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JhY2t3YXJkQnV0dG9uVHBsPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImlzQXRFbmQoKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvRW5kRGlyZWN0aW9uKClcIlxuICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b24gZXQtc2Nyb2xsYWJsZS1idXR0b24tLWVuZFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -17,15 +17,15 @@ export class ScrollableIgnoreChildDirective {
17
17
  set _ignoreChildEnabled(v) {
18
18
  this.ignoreChildEnabled.set(v);
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ScrollableIgnoreChildDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.7", type: ScrollableIgnoreChildDirective, isStandalone: true, selector: "[etScrollableIgnoreChild]", inputs: { _ignoreChildEnabled: ["etScrollableIgnoreChild", "_ignoreChildEnabled", booleanAttribute] }, providers: [
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ScrollableIgnoreChildDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.8", type: ScrollableIgnoreChildDirective, isStandalone: true, selector: "[etScrollableIgnoreChild]", inputs: { _ignoreChildEnabled: ["etScrollableIgnoreChild", "_ignoreChildEnabled", booleanAttribute] }, providers: [
22
22
  {
23
23
  provide: SCROLLABLE_IGNORE_CHILD_TOKEN,
24
24
  useExisting: ScrollableIgnoreChildDirective,
25
25
  },
26
26
  ], ngImport: i0 }); }
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ScrollableIgnoreChildDirective, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ScrollableIgnoreChildDirective, decorators: [{
29
29
  type: Directive,
30
30
  args: [{
31
31
  selector: `[${SCROLLABLE_IGNORE_CHILD_ATTRIBUTE}]`,
@@ -18,15 +18,15 @@ export class ScrollableIsActiveChildDirective {
18
18
  set _isActiveChildEnabled(v) {
19
19
  this.isActiveChildEnabled.set(v);
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ScrollableIsActiveChildDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
22
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.7", type: ScrollableIsActiveChildDirective, isStandalone: true, selector: "[etScrollableIsActiveChild]", inputs: { _isActiveChildEnabled: ["etScrollableIsActiveChild", "_isActiveChildEnabled", booleanAttribute] }, providers: [
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ScrollableIsActiveChildDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
22
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.3.8", type: ScrollableIsActiveChildDirective, isStandalone: true, selector: "[etScrollableIsActiveChild]", inputs: { _isActiveChildEnabled: ["etScrollableIsActiveChild", "_isActiveChildEnabled", booleanAttribute] }, providers: [
23
23
  {
24
24
  provide: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN,
25
25
  useExisting: ScrollableIsActiveChildDirective,
26
26
  },
27
27
  ], ngImport: i0 }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ScrollableIsActiveChildDirective, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ScrollableIsActiveChildDirective, decorators: [{
30
30
  type: Directive,
31
31
  args: [{
32
32
  selector: `[${SCROLLABLE_IS_ACTIVE_CHILD_ATTRIBUTE}]`,
@@ -5,10 +5,10 @@ export class SkeletonComponent {
5
5
  this.loadingAllyText = 'Loading...';
6
6
  this.animated = true;
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.7", type: SkeletonComponent, isStandalone: true, selector: "et-skeleton", inputs: { loadingAllyText: "loadingAllyText", animated: ["animated", "animated", booleanAttribute] }, host: { properties: { "class.et-skeleton--animated": "this.animated" }, classAttribute: "et-skeleton" }, ngImport: i0, template: ` <span class="cdk-visually-hidden"> {{ loadingAllyText }} </span> <ng-content />`, isInline: true, styles: [":where(.et-skeleton){--et-skeleton-gradient: linear-gradient( 90deg, rgba(190, 190, 190, 0) 15%, rgba(129, 129, 129, .5) 37%, rgba(190, 190, 190, 0) 63% );--et-skeleton-animation-duration: 3s;--et-skeleton-animation-timing-function: var(--ease-3)}.et-skeleton{display:block;cursor:progress}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.8", type: SkeletonComponent, isStandalone: true, selector: "et-skeleton", inputs: { loadingAllyText: "loadingAllyText", animated: ["animated", "animated", booleanAttribute] }, host: { properties: { "class.et-skeleton--animated": "this.animated" }, classAttribute: "et-skeleton" }, ngImport: i0, template: ` <span class="cdk-visually-hidden"> {{ loadingAllyText }} </span> <ng-content />`, isInline: true, styles: [":where(.et-skeleton){--et-skeleton-gradient: linear-gradient( 90deg, rgba(190, 190, 190, 0) 15%, rgba(129, 129, 129, .5) 37%, rgba(190, 190, 190, 0) 63% );--et-skeleton-animation-duration: 3s;--et-skeleton-animation-timing-function: var(--ease-3)}.et-skeleton{display:block;cursor:progress}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SkeletonComponent, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SkeletonComponent, decorators: [{
12
12
  type: Component,
13
13
  args: [{ selector: 'et-skeleton', template: ` <span class="cdk-visually-hidden"> {{ loadingAllyText }} </span> <ng-content />`, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
14
14
  class: 'et-skeleton',
@@ -4,10 +4,10 @@ export class SkeletonItemComponent {
4
4
  constructor() {
5
5
  this.ariaHidden = true;
6
6
  }
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SkeletonItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: SkeletonItemComponent, isStandalone: true, selector: "et-skeleton-item", host: { properties: { "attr.aria-hidden": "this.ariaHidden" }, classAttribute: "et-skeleton-item" }, ngImport: i0, template: ``, isInline: true, styles: [".et-skeleton-item{display:block;overflow:hidden;position:relative}.et-skeleton--animated .et-skeleton-item:before{content:\"\";height:100%;left:0;position:absolute;right:0;top:0;transform:translate(-100%);z-index:1;background:var(--et-skeleton-gradient)}@media (prefers-reduced-motion: no-preference){.et-skeleton--animated .et-skeleton-item:before{animation:skeleton-loading var(--et-skeleton-animation-duration) infinite var(--et-skeleton-animation-timing-function)}}@keyframes skeleton-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SkeletonItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: SkeletonItemComponent, isStandalone: true, selector: "et-skeleton-item", host: { properties: { "attr.aria-hidden": "this.ariaHidden" }, classAttribute: "et-skeleton-item" }, ngImport: i0, template: ``, isInline: true, styles: [".et-skeleton-item{display:block;overflow:hidden;position:relative}.et-skeleton--animated .et-skeleton-item:before{content:\"\";height:100%;left:0;position:absolute;right:0;top:0;transform:translate(-100%);z-index:1;background:var(--et-skeleton-gradient)}@media (prefers-reduced-motion: no-preference){.et-skeleton--animated .et-skeleton-item:before{animation:skeleton-loading var(--et-skeleton-animation-duration) infinite var(--et-skeleton-animation-timing-function)}}@keyframes skeleton-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SkeletonItemComponent, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SkeletonItemComponent, decorators: [{
11
11
  type: Component,
12
12
  args: [{ selector: 'et-skeleton-item', template: ``, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
13
13
  class: 'et-skeleton-item',