ca-components 1.3.41 → 1.3.92

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 (216) hide show
  1. package/assets/scss/filters.scss +3 -0
  2. package/assets/scss/text-selection.scss +5 -0
  3. package/esm2022/lib/ca-components.module.mjs +8 -2
  4. package/esm2022/lib/components/ca-activity-log-list/ca-activity-log-list.component.mjs +3 -3
  5. package/esm2022/lib/components/ca-checkbox/ca-checkbox.component.mjs +2 -2
  6. package/esm2022/lib/components/ca-collapsible-filter/ca-collapsible-filter.component.mjs +2 -2
  7. package/esm2022/lib/components/ca-comment/ca-comment.component.mjs +2 -2
  8. package/esm2022/lib/components/ca-comment/modals/comment-modal/comment-modal.component.mjs +3 -3
  9. package/esm2022/lib/components/ca-custom-scrollbar/ca-custom-scrollbar.component.mjs +3 -3
  10. package/esm2022/lib/components/ca-details-dropdown/ca-details-dropdown.component.mjs +2 -2
  11. package/esm2022/lib/components/ca-dropdown-menu/ca-dropdown-menu.component.mjs +3 -3
  12. package/esm2022/lib/components/ca-filters/ca-filter.component.mjs +2 -2
  13. package/esm2022/lib/components/ca-filters/components/ca-dispatcher-filter/ca-dispatcher-filter.component.mjs +2 -2
  14. package/esm2022/lib/components/ca-filters/components/ca-location-filter/ca-location-filter.component.mjs +2 -2
  15. package/esm2022/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.mjs +2 -2
  16. package/esm2022/lib/components/ca-filters/components/ca-pm-filter/ca-pm-filter.component.mjs +2 -2
  17. package/esm2022/lib/components/ca-filters/components/ca-state-filter/ca-state-filter.component.mjs +2 -2
  18. package/esm2022/lib/components/ca-filters/components/ca-status-filter/ca-status-filter.component.mjs +2 -2
  19. package/esm2022/lib/components/ca-filters/components/ca-time-filter/ca-time-filter.component.mjs +3 -3
  20. package/esm2022/lib/components/ca-filters/components/ca-trailer-type-filter/ca-trailer-type-filter.component.mjs +2 -2
  21. package/esm2022/lib/components/ca-filters/components/ca-truck-type-filter/ca-truck-type-filter.component.mjs +2 -2
  22. package/esm2022/lib/components/ca-filters/components/ca-user-filter/ca-user-filter.component.mjs +2 -2
  23. package/esm2022/lib/components/ca-filters/components/ca-violation-filter/ca-violation-filter.component.mjs +2 -2
  24. package/esm2022/lib/components/ca-input/ca-input.component.mjs +2 -2
  25. package/esm2022/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.mjs +2 -2
  26. package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +2 -2
  27. package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +2 -2
  28. package/esm2022/lib/components/ca-input-dropdown-test/animations/index.mjs +2 -0
  29. package/esm2022/lib/components/ca-input-dropdown-test/animations/input-dropdown.animation.mjs +11 -0
  30. package/esm2022/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.mjs +692 -0
  31. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.mjs +62 -0
  32. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.mjs +72 -0
  33. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.mjs +60 -0
  34. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.mjs +62 -0
  35. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.mjs +76 -0
  36. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.mjs +58 -0
  37. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.mjs +76 -0
  38. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.mjs +41 -0
  39. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.mjs +64 -0
  40. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.mjs +38 -0
  41. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.mjs +62 -0
  42. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.mjs +37 -0
  43. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.mjs +61 -0
  44. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.mjs +49 -0
  45. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.mjs +60 -0
  46. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.mjs +49 -0
  47. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.mjs +65 -0
  48. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.mjs +58 -0
  49. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.mjs +62 -0
  50. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.mjs +63 -0
  51. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.mjs +72 -0
  52. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.mjs +56 -0
  53. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.mjs +77 -0
  54. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.mjs +58 -0
  55. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.mjs +62 -0
  56. package/esm2022/lib/components/ca-input-dropdown-test/enums/dropdown-string.enum.mjs +6 -0
  57. package/esm2022/lib/components/ca-input-dropdown-test/enums/dropdown-template-type.enum.mjs +23 -0
  58. package/esm2022/lib/components/ca-input-dropdown-test/enums/index.mjs +3 -0
  59. package/esm2022/lib/components/ca-input-dropdown-test/models/index.mjs +4 -0
  60. package/esm2022/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.mjs +2 -0
  61. package/esm2022/lib/components/ca-input-dropdown-test/models/load-modal-status.model.mjs +2 -0
  62. package/esm2022/lib/components/ca-input-dropdown-test/models/status-order.model.mjs +2 -0
  63. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-count.pipe.mjs +29 -0
  64. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.mjs +73 -0
  65. package/esm2022/lib/components/ca-input-dropdown-test/pipes/index.mjs +10 -0
  66. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.mjs +27 -0
  67. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.mjs +22 -0
  68. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.mjs +18 -0
  69. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.mjs +27 -0
  70. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.mjs +25 -0
  71. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.mjs +23 -0
  72. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.mjs +25 -0
  73. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.mjs +23 -0
  74. package/esm2022/lib/components/ca-input-dropdown-test/utils/svg-routes/index.mjs +2 -0
  75. package/esm2022/lib/components/ca-input-dropdown-test/utils/svg-routes/input-dropdown-svg-routes.mjs +13 -0
  76. package/esm2022/lib/components/ca-input-note/ca-input-note.component.mjs +2 -2
  77. package/esm2022/lib/components/ca-input-test/input-test.component.mjs +2 -2
  78. package/esm2022/lib/components/ca-last-fuel-price-progress/ca-last-fuel-price-progress.component.mjs +75 -0
  79. package/esm2022/lib/components/ca-last-fuel-price-progress/enums/index.mjs +2 -0
  80. package/esm2022/lib/components/ca-last-fuel-price-progress/enums/last-fuel-price-progress.enum.mjs +6 -0
  81. package/esm2022/lib/components/ca-last-fuel-price-progress/interfaces/index.mjs +3 -0
  82. package/esm2022/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-config.interface.mjs +2 -0
  83. package/esm2022/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-data.interface.mjs +2 -0
  84. package/esm2022/lib/components/ca-last-fuel-price-progress/utils/constants/index.mjs +2 -0
  85. package/esm2022/lib/components/ca-last-fuel-price-progress/utils/constants/last-fuel-price-progress.constants.mjs +10 -0
  86. package/esm2022/lib/components/ca-last-fuel-price-progress/utils/helpers/index.mjs +2 -0
  87. package/esm2022/lib/components/ca-last-fuel-price-progress/utils/helpers/last-fuel-price-progress.helper.mjs +25 -0
  88. package/esm2022/lib/components/ca-last-fuel-price-progress/utils/svg-routes/index.mjs +2 -0
  89. package/esm2022/lib/components/ca-last-fuel-price-progress/utils/svg-routes/last-fuel-price-progress-svg-routes.mjs +4 -0
  90. package/esm2022/lib/components/ca-logo-change/ca-logo-change.component.mjs +3 -3
  91. package/esm2022/lib/components/ca-main-table/ca-main-table.component.mjs +3 -3
  92. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +2 -2
  93. package/esm2022/lib/components/ca-modal-button/ca-modal-button.component.mjs +3 -3
  94. package/esm2022/lib/components/ca-new-filter/ca-filter-dropdown.component.mjs +24 -5
  95. package/esm2022/lib/components/ca-new-filter/components/ca-filter-list-dropdown/ca-filter-list-dropdown.component.mjs +14 -3
  96. package/esm2022/lib/components/ca-new-filter/components/ca-filter-state-dropdown/ca-filter-state-dropdown.component.mjs +3 -3
  97. package/esm2022/lib/components/ca-new-filter/components/ca-filter-time-dropdown/ca-filter-time-dropdown.component.mjs +3 -3
  98. package/esm2022/lib/components/ca-new-filter/constant/filter-dropdown-icons.constant.mjs +29 -4
  99. package/esm2022/lib/components/ca-new-filter/enums/filter-dropdown-types.enum.mjs +3 -1
  100. package/esm2022/lib/components/ca-new-filter/interface/filter-dropdown-configuration.interface.mjs +1 -1
  101. package/esm2022/lib/components/ca-ngx-slider/ca-ngx-slider.component.mjs +2 -2
  102. package/esm2022/lib/components/ca-note/ca-note.component.mjs +2 -2
  103. package/esm2022/lib/components/ca-note-container/ca-note-container.component.mjs +2 -2
  104. package/esm2022/lib/components/ca-payroll-list-summary-overview/ca-payroll-list-summary-overview.component.mjs +2 -2
  105. package/esm2022/lib/components/ca-period-content/ca-period-content.component.mjs +3 -3
  106. package/esm2022/lib/components/ca-period-content/components/ca-period-content-extra-info/ca-period-content-extra-info.component.mjs +3 -3
  107. package/esm2022/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.mjs +3 -3
  108. package/esm2022/lib/components/ca-period-content/components/ca-period-content-user-info/ca-period-content-user-info.component.mjs +3 -3
  109. package/esm2022/lib/components/ca-period-content/enums/period-title-type.enum.mjs +6 -6
  110. package/esm2022/lib/components/ca-pickup-delivery-block/ca-pickup-delivery-block.component.mjs +3 -3
  111. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/ca-load.component.mjs +3 -3
  112. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-list/ca-load-list.component.mjs +3 -3
  113. package/esm2022/lib/components/ca-pickup-delivery-block/components/ca-load/components/ca-load-single/ca-load-single.component.mjs +3 -3
  114. package/esm2022/lib/components/ca-profile-image/ca-profile-image.component.mjs +3 -3
  115. package/esm2022/lib/components/ca-progress-bar/ca-progress-bar.component.mjs +2 -2
  116. package/esm2022/lib/components/ca-progress-expiration/ca-progress-expiration.component.mjs +2 -2
  117. package/esm2022/lib/components/ca-rating-review/ca-rating-review.component.mjs +2 -2
  118. package/esm2022/lib/components/ca-rating-review/components/ca-rating-review-user/ca-rating-review-user.component.mjs +2 -2
  119. package/esm2022/lib/components/ca-rating-review/components/ca-ratings-reviews-popup/ca-ratings-reviews-popup.component.mjs +2 -2
  120. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-company/ca-right-side-panel-company.component.mjs +3 -3
  121. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-menu/ca-right-side-panel-menu.component.mjs +3 -3
  122. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-top-bar/ca-right-side-panel-top-bar.component.mjs +3 -3
  123. package/esm2022/lib/components/ca-search-multiple-states/ca-search-multiple-states.component.mjs +2 -2
  124. package/esm2022/lib/components/ca-sort-dropdown/ca-sort-dropdown.component.mjs +2 -2
  125. package/esm2022/lib/components/ca-spinner/ca-spinner.component.mjs +2 -2
  126. package/esm2022/lib/components/ca-tab-switch/ca-tab-switch.component.mjs +3 -3
  127. package/esm2022/lib/components/ca-todo/ca-todo.component.mjs +3 -3
  128. package/esm2022/lib/components/ca-todo/components/ca-todo-card.component.mjs +3 -3
  129. package/esm2022/lib/components/ca-tooltip-list/ca-tooltip-list.component.mjs +3 -3
  130. package/esm2022/lib/components/ca-truck-trailer-progress-bar/ca-truck-trailer-progress-bar.component.mjs +2 -2
  131. package/esm2022/lib/components/ca-upload-files/ca-upload-files.component.mjs +3 -3
  132. package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/ca-upload-dropzone.component.mjs +3 -3
  133. package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.mjs +2 -2
  134. package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/ca-upload-files-carousel.component.mjs +3 -3
  135. package/esm2022/lib/components/ca-vehicle-list/ca-vehicle-list.component.mjs +5 -3
  136. package/esm2022/lib/components/ca-vehicle-list/utils/constants/vehicle-list.constants.mjs +34 -1
  137. package/esm2022/lib/enums/index.mjs +2 -0
  138. package/esm2022/lib/enums/string-placeholder.enum.mjs +14 -0
  139. package/esm2022/public-api.mjs +8 -6
  140. package/fesm2022/ca-components.mjs +2704 -304
  141. package/fesm2022/ca-components.mjs.map +1 -1
  142. package/lib/ca-components.module.d.ts +3 -2
  143. package/lib/components/ca-input-dropdown-test/animations/index.d.ts +1 -0
  144. package/lib/components/ca-input-dropdown-test/animations/input-dropdown.animation.d.ts +1 -0
  145. package/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.d.ts +125 -0
  146. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.d.ts +20 -0
  147. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.d.ts +22 -0
  148. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.d.ts +19 -0
  149. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.d.ts +20 -0
  150. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.d.ts +27 -0
  151. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.d.ts +18 -0
  152. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.d.ts +24 -0
  153. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.d.ts +10 -0
  154. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.d.ts +18 -0
  155. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.d.ts +11 -0
  156. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.d.ts +18 -0
  157. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.d.ts +11 -0
  158. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.d.ts +18 -0
  159. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.d.ts +14 -0
  160. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.d.ts +20 -0
  161. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.d.ts +14 -0
  162. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.d.ts +20 -0
  163. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.d.ts +18 -0
  164. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.d.ts +20 -0
  165. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.d.ts +20 -0
  166. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.d.ts +22 -0
  167. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.d.ts +15 -0
  168. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.d.ts +22 -0
  169. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.d.ts +18 -0
  170. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.d.ts +20 -0
  171. package/lib/components/ca-input-dropdown-test/enums/dropdown-string.enum.d.ts +4 -0
  172. package/lib/components/ca-input-dropdown-test/enums/dropdown-template-type.enum.d.ts +21 -0
  173. package/lib/components/ca-input-dropdown-test/enums/index.d.ts +2 -0
  174. package/lib/components/ca-input-dropdown-test/models/index.d.ts +3 -0
  175. package/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.d.ts +95 -0
  176. package/lib/components/ca-input-dropdown-test/models/load-modal-status.model.d.ts +5 -0
  177. package/lib/components/ca-input-dropdown-test/models/status-order.model.d.ts +4 -0
  178. package/lib/components/ca-input-dropdown-test/pipes/dropdown-count.pipe.d.ts +7 -0
  179. package/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.d.ts +10 -0
  180. package/lib/components/ca-input-dropdown-test/pipes/index.d.ts +9 -0
  181. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.d.ts +11 -0
  182. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.d.ts +10 -0
  183. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.d.ts +9 -0
  184. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.d.ts +11 -0
  185. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.d.ts +10 -0
  186. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.d.ts +11 -0
  187. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.d.ts +10 -0
  188. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.d.ts +11 -0
  189. package/lib/components/ca-input-dropdown-test/utils/svg-routes/index.d.ts +1 -0
  190. package/lib/components/ca-input-dropdown-test/utils/svg-routes/input-dropdown-svg-routes.d.ts +12 -0
  191. package/lib/components/ca-input-test/mixins/input-command.mixin.d.ts +1 -1
  192. package/lib/components/ca-input-test/mixins/input-helper.mixin.d.ts +1 -1
  193. package/lib/components/ca-last-fuel-price-progress/ca-last-fuel-price-progress.component.d.ts +18 -0
  194. package/lib/components/ca-last-fuel-price-progress/enums/index.d.ts +1 -0
  195. package/lib/components/ca-last-fuel-price-progress/enums/last-fuel-price-progress.enum.d.ts +4 -0
  196. package/lib/components/ca-last-fuel-price-progress/interfaces/index.d.ts +2 -0
  197. package/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-config.interface.d.ts +9 -0
  198. package/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-data.interface.d.ts +10 -0
  199. package/lib/components/ca-last-fuel-price-progress/utils/constants/index.d.ts +1 -0
  200. package/lib/components/ca-last-fuel-price-progress/utils/constants/last-fuel-price-progress.constants.d.ts +3 -0
  201. package/lib/components/ca-last-fuel-price-progress/utils/helpers/index.d.ts +1 -0
  202. package/lib/components/ca-last-fuel-price-progress/utils/helpers/last-fuel-price-progress.helper.d.ts +7 -0
  203. package/lib/components/ca-last-fuel-price-progress/utils/svg-routes/index.d.ts +1 -0
  204. package/lib/components/ca-last-fuel-price-progress/utils/svg-routes/last-fuel-price-progress-svg-routes.d.ts +3 -0
  205. package/lib/components/ca-new-filter/ca-filter-dropdown.component.d.ts +5 -1
  206. package/lib/components/ca-new-filter/components/ca-filter-list-dropdown/ca-filter-list-dropdown.component.d.ts +3 -0
  207. package/lib/components/ca-new-filter/enums/filter-dropdown-types.enum.d.ts +2 -0
  208. package/lib/components/ca-new-filter/interface/filter-dropdown-configuration.interface.d.ts +2 -1
  209. package/lib/components/ca-period-content/enums/period-title-type.enum.d.ts +5 -5
  210. package/lib/components/ca-vehicle-list/ca-vehicle-list.component.d.ts +2 -0
  211. package/lib/components/ca-vehicle-list/utils/constants/vehicle-list.constants.d.ts +2 -0
  212. package/lib/enums/index.d.ts +1 -0
  213. package/lib/enums/string-placeholder.enum.d.ts +12 -0
  214. package/package.json +1 -1
  215. package/public-api.d.ts +7 -5
  216. package/src/assets/ca-components/svg/common/ic_owner-status.svg +7 -0
@@ -33,6 +33,8 @@ export class CaFilterListDropdownComponent {
33
33
  this.caFiltersSvgRoutes = CaFiltersSvgRoutes;
34
34
  this.loadStatusEnum = LoadStatusEnum;
35
35
  this.srollLimitSize = 8;
36
+ this.previusUnSelectedState = [];
37
+ this.previusSelectedState = [];
36
38
  this.selectedList = [];
37
39
  this.unselectedList = [];
38
40
  this.searchForm = this.formBuilder.group({
@@ -76,11 +78,19 @@ export class CaFilterListDropdownComponent {
76
78
  this.sortKey = sorting.sortKey;
77
79
  this.directionMultiplier = sorting.directionMultiplier;
78
80
  }
81
+ onResetFilterState() {
82
+ // Reset to previus value, since user didn't save it, he click on outside
83
+ this.selectedList = [...this.previusSelectedState];
84
+ this.unselectedList = [...this.previusUnSelectedState];
85
+ this.selectedCount = this.previusSelectedState.length;
86
+ }
79
87
  emitData(list) {
80
88
  this.setFilter.emit({
81
89
  filterType: this.type,
82
90
  selectedIds: list,
83
91
  });
92
+ this.previusSelectedState = [...this.selectedList];
93
+ this.previusUnSelectedState = [...this.unselectedList];
84
94
  }
85
95
  updateLists() {
86
96
  this.selectedList = this._list.filter((item) => item.selected);
@@ -109,6 +119,7 @@ export class CaFilterListDropdownComponent {
109
119
  }));
110
120
  this.updateLists();
111
121
  this.initialListSize = value.length;
122
+ this.previusUnSelectedState = [...this._list];
112
123
  }
113
124
  }
114
125
  setInitalType(value) {
@@ -116,7 +127,7 @@ export class CaFilterListDropdownComponent {
116
127
  this.config = FilterDropdownIconsConst[this._type];
117
128
  }
118
129
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaFilterListDropdownComponent, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaFilterListDropdownComponent, isStandalone: true, selector: "app-ca-filter-list-dropdown", inputs: { type: "type", list: "list" }, outputs: { setFilter: "setFilter" }, ngImport: i0, template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues()\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > srollLimitSize &&\n config &&\n config.search &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > srollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; track $index) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @if (type === 'Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.name\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n } @else if (type === 'Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n } @else if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "dateTimePopover", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaFilterDropdownComponent, selector: "app-ca-filter-dropdown", inputs: ["type", "config", "bodyTemplate", "isFormChanged", "appliedFiltersCount", "customTitle", "customCancelButton"], outputs: ["setFilter", "handleFiltersClear", "sorting"] }, { kind: "component", type: CaProfileImageComponent, selector: "app-ca-profile-image", inputs: ["indx", "avatarImg", "avatarColor", "textShortName", "name", "isRound", "size", "height", "fontSize", "isHoverEffect"] }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: DropdownLoadStatusColorPipe, name: "dropdownLoadStatusColor" }, { kind: "pipe", type: FilterSearchPipe, name: "filterSearch" }] }); }
130
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaFilterListDropdownComponent, isStandalone: true, selector: "app-ca-filter-list-dropdown", inputs: { type: "type", list: "list" }, outputs: { setFilter: "setFilter" }, ngImport: i0, template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [activeCount]=\"activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues()\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n (resetFilterState)=\"onResetFilterState()\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > srollLimitSize &&\n config &&\n config.isSearchActive &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > srollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; track $index) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @if (type === 'Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.name\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n } @else if (type === 'Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n } @else if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "dateTimePopover", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaFilterDropdownComponent, selector: "app-ca-filter-dropdown", inputs: ["activeCount", "type", "config", "bodyTemplate", "isFormChanged", "appliedFiltersCount", "customTitle", "customCancelButton"], outputs: ["setFilter", "handleFiltersClear", "resetFilterState", "sorting"] }, { kind: "component", type: CaProfileImageComponent, selector: "app-ca-profile-image", inputs: ["indx", "avatarImg", "avatarColor", "textShortName", "name", "isRound", "size", "height", "fontSize", "isHoverEffect"] }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: DropdownLoadStatusColorPipe, name: "dropdownLoadStatusColor" }, { kind: "pipe", type: FilterSearchPipe, name: "filterSearch" }] }); }
120
131
  }
121
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaFilterListDropdownComponent, decorators: [{
122
133
  type: Component,
@@ -131,7 +142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
131
142
  FilterTruckColorPipe,
132
143
  FilterTrailerColorPipe,
133
144
  FilterSearchPipe,
134
- ], template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues()\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > srollLimitSize &&\n config &&\n config.search &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > srollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; track $index) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @if (type === 'Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.name\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n } @else if (type === 'Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n } @else if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n" }]
145
+ ], template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [activeCount]=\"activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues()\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n (resetFilterState)=\"onResetFilterState()\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > srollLimitSize &&\n config &&\n config.isSearchActive &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > srollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; track $index) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @if (type === 'Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.name\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n } @else if (type === 'Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n } @else if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n" }]
135
146
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }], propDecorators: { type: [{
136
147
  type: Input
137
148
  }], list: [{
@@ -139,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
139
150
  }], setFilter: [{
140
151
  type: Output
141
152
  }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbmV3LWZpbHRlci9jb21wb25lbnRzL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLW5ldy1maWx0ZXIvY29tcG9uZW50cy9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsUUFBUTtBQUNSLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFXcEUsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELGFBQWE7QUFDYixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFP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Q3BCLHNCQUFzQjt3QkFDdEIsZ0JBQWdCO3FCQUNuQjt1RkFNRyxJQUFJO3NCQURQLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQUtJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLy8gRW51bXNcbmltcG9ydCB7IGVGaWx0ZXJEcm9wZG93bkVudW0sIGVGaWx0ZXJTb3J0aW5nS2V5IH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTG9hZFN0YXR1c0VudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtcy9sb2FkLXN0YXR1cy5lbnVtJztcblxuLy8gVHlwZXMgJiBJbnRlcmZhY2VzXG5pbXBvcnQgeyBGaWx0ZXJEcm9wZG93blR5cGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBJRmlsdGVyQWN0aW9uLFxuICAgIElGaWx0ZXJEcm9wZG93bkNvbmZpZ3VyYXRpb24sXG4gICAgSUZpbHRlckRyb3Bkb3duTGlzdCxcbiAgICBJU29ydEVtaXQsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZSc7XG5cbi8vIENvbnN0YW50cyAmIFV0aWxzXG5pbXBvcnQgeyBDYUZpbHRlcnNTdmdSb3V0ZXMgfSBmcm9tICcuLi8uLi8uLi9jYS1maWx0ZXJzL3V0aWxzL3N2Zy1yb3V0ZXMnO1xuaW1wb3J0IHsgRmlsdGVyRHJvcGRvd25JY29uc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RhbnQnO1xuXG4vLyBDb21wb25lbnRzXG5pbXBvcnQgeyBDYUZpbHRlckRyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2EtZmlsdGVyLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NhLXByb2ZpbGUtaW1hZ2UvY2EtcHJvZmlsZS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NhLWlucHV0L2NhLWlucHV0LmNvbXBvbmVudCc7XG5cbi8vIFBpcGVzXG5pbXBvcnQge1xuICAgIEZpbHRlclRyYWlsZXJDb2xvclBpcGUsXG4gICAgRmlsdGVyVHJ1Y2tDb2xvclBpcGUsXG59IGZyb20gJy4uLy4uLy4uL2NhLWZpbHRlcnMvcGlwZXMnO1xuaW1wb3J0IHsgRHJvcGRvd25Mb2FkU3RhdHVzQ29sb3JQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2ZpbHRlci1zZWFyY2gucGlwZSc7XG5cbi8vIEV4dGVybmFsIExpYnJhcmllc1xuaW1wb3J0IHsgU3ZnSWNvbkNvbXBvbmVudCB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jYS1maWx0ZXItbGlzdC1kcm9wZG93bicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgXG4gICAgICAgIENhSW5wdXRDb21wb25lbnQsXG4gICAgICAgIENhRmlsdGVyRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBTdmdJY29uQ29tcG9uZW50LFxuXG4gICAgICAgIERyb3Bkb3duTG9hZFN0YXR1c0NvbG9yUGlwZSxcbiAgICAgICAgRmlsdGVyVHJ1Y2tDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclRyYWlsZXJDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclNlYXJjaFBpcGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2FGaWx0ZXJMaXN0RHJvcGRvd25Db21wb25lbnQge1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHR5cGUodmFsdWU6IEZpbHRlckRyb3Bkb3duVHlwZXMpIHtcbiAgICAgICAgdGhpcy5zZXRJbml0YWxUeXBlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBsaXN0KHZhbHVlOiBJRmlsdGVyRHJvcGRvd25MaXN0W10pIHtcbiAgICAgICAgdGhpcy5zZXRJbml0YWxMaXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgc2V0RmlsdGVyOiBFdmVudEVtaXR0ZXI8SUZpbHRlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgY2FGaWx0ZXJzU3ZnUm91dGVzID0gQ2FGaWx0ZXJzU3ZnUm91dGVzO1xuICAgIHB1YmxpYyBsb2FkU3RhdHVzRW51bSA9IExvYWRTdGF0dXNFbnVtO1xuICAgIHB1YmxpYyBzcm9sbExpbWl0U2l6ZTogbnVtYmVyID0gODtcblxuICAgIHB1YmxpYyBzZWxlY3RlZExpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuICAgIHB1YmxpYyB1bnNlbGVjdGVkTGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG4gICAgcHVibGljIHNlYXJjaEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgc2VhcmNoOiBudWxsLFxuICAgIH0pO1xuICAgIHB1YmxpYyBzb3J0S2V5OiBrZXlvZiBJRmlsdGVyRHJvcGRvd25MaXN0ID0gZUZpbHRlclNvcnRpbmdLZXkuTkFNRTtcbiAgICBwdWJsaWMgZGlyZWN0aW9uTXVsdGlwbGllcjogbnVtYmVyID0gMTtcbiAgICBwdWJsaWMgaW5pdGlhbExpc3RTaXplOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25maWchOiBJRmlsdGVyRHJvcGRvd25Db25maWd1cmF0aW9uO1xuICAgIFxuICAgIHB1YmxpYyBzZWxlY3RlZENvdW50OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBhY3RpdmVDb3VudDogbnVtYmVyID0gMDtcbiAgICBcbiAgICBwcml2YXRlIF90eXBlITogRmlsdGVyRHJvcGRvd25UeXBlczsgXG4gICAgcHJpdmF0ZSBfbGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHt9XG5cbiAgICAvLyBHZXR0ZXJzXG4gICAgZ2V0IHR5cGUoKTogRmlsdGVyRHJvcGRvd25UeXBlcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIC8vIFB1YmxpY1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtID0gKGl0ZW06IElGaWx0ZXJEcm9wZG93bkxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZlSXRlbShpdGVtLCB0aGlzLnVuc2VsZWN0ZWRMaXN0LCB0aGlzLnNlbGVjdGVkTGlzdCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyB1blNlbGVjdEl0ZW0gPSAoaXRlbTogSUZpbHRlckRyb3Bkb3duTGlzdCkgPT4ge1xuICAgICAgICB0aGlzLm1vdmVJdGVtKGl0ZW0sIHRoaXMuc2VsZWN0ZWRMaXN0LCB0aGlzLnVuc2VsZWN0ZWRMaXN0KTtcbiAgICB9O1xuXG4gICAgcHVibGljIGdldCB0cnVja09yVHJhaWxlckljb25QaXBlKCk6IFBpcGVUcmFuc2Zvcm0ge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBlRmlsdGVyRHJvcGRvd25FbnVtLlRSVUNLX1RZUEVcbiAgICAgICAgICAgID8gbmV3IEZpbHRlclRydWNrQ29sb3JQaXBlKClcbiAgICAgICAgICAgIDogbmV3IEZpbHRlclRyYWlsZXJDb2xvclBpcGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1pdERhdGEoW10pO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gW107XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5fbGlzdF07IFxuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFzc0ZpbHRlclZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVtaXREYXRhKHRoaXMuc2VsZWN0ZWRMaXN0Lm1hcCgobGlzdCkgPT4gbGlzdC5pZCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnQgPSB0aGlzLmFjdGl2ZUNvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0VmFsdWVzKHNvcnRpbmc6IElTb3J0RW1pdCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNvcnRLZXkgPSBzb3J0aW5nLnNvcnRLZXk7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uTXVsdGlwbGllciA9IHNvcnRpbmcuZGlyZWN0aW9uTXVsdGlwbGllcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXREYXRhKGxpc3Q6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyLmVtaXQoe1xuICAgICAgICAgICAgZmlsdGVyVHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgc2VsZWN0ZWRJZHM6IGxpc3QsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGlzdHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy5fbGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRMaXN0ID0gdGhpcy5fbGlzdC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVJdGVtKFxuICAgICAgICBpdGVtOiBJRmlsdGVyRHJvcGRvd25MaXN0LFxuICAgICAgICBmcm9tTGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdLFxuICAgICAgICB0b0xpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZyb21MaXN0LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGZyb21MaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0b0xpc3QucHVzaChpdGVtKTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHJlZmVyZW5jZXMgc28gbGlzdCBpcyB1cGRhdGVkXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkTGlzdF07XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMudW5zZWxlY3RlZExpc3RdO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVTZWxlY3RlZENvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVTZWxlY3RlZENvdW50KCkgOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDb3VudCA9IHRoaXMuc2VsZWN0ZWRMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEluaXRhbExpc3QodmFsdWU6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSkgOiB2b2lkICB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgLy8gUG0gYW5kIHRydWNrIHR5cGUgZG9uJ3QgaGF2ZSBpZCBzbyB3ZSBuZWVkIHRvIG1hcCBuYW1lc1xuICAgICAgICAgICAgdGhpcy5fbGlzdCA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkID8/IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGlzdHMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbExpc3RTaXplID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbml0YWxUeXBlKHZhbHVlOiBGaWx0ZXJEcm9wZG93blR5cGVzKSAgOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IEZpbHRlckRyb3Bkb3duSWNvbnNDb25zdFt0aGlzLl90eXBlXTtcbiAgICB9XG59XG4iLCI8YXBwLWNhLWZpbHRlci1kcm9wZG93blxuICAgIFt0eXBlXT1cInR5cGVcIlxuICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gICAgW2lzRm9ybUNoYW5nZWRdPVwiISFhY3RpdmVDb3VudFwiXG4gICAgW2FwcGxpZWRGaWx0ZXJzQ291bnRdPVwic2VsZWN0ZWRDb3VudFwiXG4gICAgKGhhbmRsZUZpbHRlcnNDbGVhcik9XCJjbGVhclZhbHVlcygpXCJcbiAgICAoc2V0RmlsdGVyKT1cInBhc3NGaWx0ZXJWYWx1ZSgpXCJcbiAgICAoc29ydGluZyk9XCJzb3J0VmFsdWVzKCRldmVudClcIlxuPlxuICAgIEBsZXQgaXNUcnVjayA9IHR5cGUgPT09ICdUcnVja1R5cGUnO1xuICAgIEBsZXQgaXNUcmFpbGVyID0gdHlwZSA9PT0gJ1RyYWlsZXJUeXBlJztcbiAgICBAbGV0IGlzUG0gPSB0eXBlID09PSAnUG0nO1xuICAgIEBsZXQgaXNTZXJ2aWNlID0gdHlwZSA9PT0gJ1NlcnZpY2UnO1xuICAgIEBsZXQgaXNUcnVja09yVHJhaWxlciA9IGlzVHJ1Y2sgfHwgaXNUcmFpbGVyO1xuICAgIEBsZXQgaGFzTGVmdEljb24gPSBpc1BtIHx8IGlzU2VydmljZTtcbiAgICA8bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgICAgICAgQGlmIChcbiAgICAgICAgICAgIGluaXRpYWxMaXN0U2l6ZSA+IHNyb2xsTGltaXRTaXplICYmXG4gICAgICAgICAgICBjb25maWcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5zZWFyY2ggJiZcbiAgICAgICAgICAgIGNvbmZpZy5mb3JtRmllbGRDb25maWdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImNvbmZpZy5mb3JtRmllbGRDb25maWdcIlxuICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3RcIlxuICAgICAgICAgICAgW2NsYXNzLmNhLXNjcm9sbC1iYXJdPVwiaW5pdGlhbExpc3RTaXplID4gc3JvbGxMaW1pdFNpemVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGl2aWRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGxldCBzZWFyY2hTdHJpbmcgPSBzZWFyY2hGb3JtLmdldCgnc2VhcmNoJyk/LnZhbHVlO1xuXG4gICAgICAgICAgICA8IS0tIFNlbGVjdGVkIExpc3QgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbGlzdFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlclNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlYXJjaFN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rpb25NdWx0aXBsaWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tGbjogdW5TZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBVbnNlbGVjdGVkIExpc3QgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbGlzdFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNlbGVjdGVkTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyU2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VhcmNoU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25hbWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdGlvbk11bHRpcGxpZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGlja0ZuOiBzZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2xpc3RUZW1wbGF0ZVxuICAgICAgICBsZXQtaXRlbXM9XCJpdGVtc1wiXG4gICAgICAgIGxldC1jbGlja0ZuPVwiY2xpY2tGblwiXG4gICAgICAgIGxldC1pc1NlbGVjdGVkTGlzdD1cInNlbGVjdGVkTGlzdFwiXG4gICAgPlxuICAgICAgICBAaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAteHMgbWItMSBtYXJnaW4tdC00XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbSBwYWRkaW5nLTQgYnItMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGMtcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0taG92ZXInOiBpc1NlbGVjdGVkTGlzdCxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmctaG92ZXItZ3JleS00IHN2Zy1maWxsLW11dGVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTGVmdEljb24gJiYgIWlzU2VsZWN0ZWRMaXN0LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Zy1ob3Zlci1ibHVlLTE5IHN2Zy1maWxsLWJsdWUtOCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xlZnRJY29uICYmIGlzU2VsZWN0ZWRMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tGbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgbWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmp1c3RpZnktY29udGVudC1iZXR3ZWVuXT1cImlzVHJ1Y2tPclRyYWlsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodHlwZSA9PT0gJ0Rpc3BhdGNoZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtcHJvZmlsZS1pbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZHhdPVwiJGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0U2hvcnROYW1lXT1cIml0ZW0ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhdGFySW1nXT1cIml0ZW0uYXZhdGFyPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtcHJvZmlsZS1pbWFnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmICh0eXBlID09PSAnU3RhdHVzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkU3RhdHVzRW51bVtpdGVtLmlkIV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkcm9wZG93bkxvYWRTdGF0dXNDb2xvcjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbS1zdGF0dXMtY2lyY2xlIGJyLWNpcmNsZSBtYXJnaW4tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGhhc0xlZnRJY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXJnaW4tci00IHN2Zy1zaXplLTE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY29sb3Itd2hpdGUgdGV4dC1zaXplLTE0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNhLWZvbnQtZXh0cmEtYm9sZF09XCJpc1NlbGVjdGVkTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LXVwcGVyY2FzZV09XCJ0eXBlID09PSAnU3RhdHVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNUcnVja09yVHJhaWxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbS1pY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1zdmctZmlsbC1jb2xvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVja09yVHJhaWxlckljb25QaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uIFtzcmNdPVwiaXRlbS5pY29uXCI+PC9zdmctaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDogaXRlbS5jb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWRMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGVkTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImNhRmlsdGVyc1N2Z1JvdXRlcy5yZW1vdmVTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctc2l6ZS0xMCBzdmctZmlsbC1yZWQtMTAgZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbS1yZW1vdmUganVzdGlmeS1jb250ZW50LWNlbnRlciBmaWx0ZXItZHJvcGRvd24tbGlzdC1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRpdmlkZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIERpdmlkZXIgVGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNkaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZC1ibGFjayBici0yIGhlaWdodC0xXCI+PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1jb3VudD1cImNvdW50XCIgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCI+XG4gICAgICAgIDwhLS0gQ291bnQgY2FuIGJlIHVuZGVmaW5lZCBmb3IgZXhhbXBsZSBvbiBhc3NpZ24gZGlzcGF0Y2ggbG9hZCBsaXN0LCBvciBpdCBjYW4gYmUgMCBhcyB3ZWxsIGZvciBzb21lIGRpc3BhdGNoZXJzIC0tPlxuICAgICAgICBAaWYgKGNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJyLTEwIGZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tY291bnQgdGV4dC1zaXplLTExIGNhLWZvbnQtc2VtaS1ib2xkIHBhZGRpbmcteS0yIHBhZGRpbmcteC01IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmaWx0ZXItZHJvcGRvd24tbGlzdC1iYWRnZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JhY2tncm91bmQtYmx1ZS0xNCB0ZXh0LWNvbG9yLXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmFja2dyb3VuZC1ibGFjayB0ZXh0LWNvbG9yLXdoaXRlLTQnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb3VudCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9hcHAtY2EtZmlsdGVyLWRyb3Bkb3duPlxuIl19
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbmV3LWZpbHRlci9jb21wb25lbnRzL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLW5ldy1maWx0ZXIvY29tcG9uZW50cy9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsUUFBUTtBQUNSLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFXcEUsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELGFBQWE7QUFDYixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFP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Q0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBMEI7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQzsrR0F0SVEsNkJBQTZCO21HQUE3Qiw2QkFBNkIsb0tDL0QxQyxpb1FBa01BLHlERG5KUSxZQUFZLHdYQUNaLG1CQUFtQixvbEJBRW5CLGdCQUFnQix3VUFDaEIseUJBQXlCLHdSQUN6Qix1QkFBdUIsa01BQ3ZCLGdCQUFnQiwwS0FFaEIsMkJBQTJCLDJEQUczQixnQkFBZ0I7OzRGQUtYLDZCQUE2QjtrQkFwQnpDLFNBQVM7K0JBQ0ksNkJBQTZCLGNBQzNCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFFbkIsZ0JBQWdCO3dCQUNoQix5QkFBeUI7d0JBQ3pCLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUVoQiwyQkFBMkI7d0JBQzNCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixnQkFBZ0I7cUJBQ25CO3VGQU1HLElBQUk7c0JBRFAsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBS0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFBpcGVUcmFuc2Zvcm0sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBFbnVtc1xuaW1wb3J0IHsgZUZpbHRlckRyb3Bkb3duRW51bSwgZUZpbHRlclNvcnRpbmdLZXkgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBMb2FkU3RhdHVzRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2VudW1zL2xvYWQtc3RhdHVzLmVudW0nO1xuXG4vLyBUeXBlcyAmIEludGVyZmFjZXNcbmltcG9ydCB7IEZpbHRlckRyb3Bkb3duVHlwZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge1xuICAgIElGaWx0ZXJBY3Rpb24sXG4gICAgSUZpbHRlckRyb3Bkb3duQ29uZmlndXJhdGlvbixcbiAgICBJRmlsdGVyRHJvcGRvd25MaXN0LFxuICAgIElTb3J0RW1pdCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlJztcblxuLy8gQ29uc3RhbnRzICYgVXRpbHNcbmltcG9ydCB7IENhRmlsdGVyc1N2Z1JvdXRlcyB9IGZyb20gJy4uLy4uLy4uL2NhLWZpbHRlcnMvdXRpbHMvc3ZnLXJvdXRlcyc7XG5pbXBvcnQgeyBGaWx0ZXJEcm9wZG93bkljb25zQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdGFudCc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IENhRmlsdGVyRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jYS1maWx0ZXItZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IENhUHJvZmlsZUltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2EtcHJvZmlsZS1pbWFnZS9jYS1wcm9maWxlLWltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2EtaW5wdXQvY2EtaW5wdXQuY29tcG9uZW50JztcblxuLy8gUGlwZXNcbmltcG9ydCB7XG4gICAgRmlsdGVyVHJhaWxlckNvbG9yUGlwZSxcbiAgICBGaWx0ZXJUcnVja0NvbG9yUGlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vY2EtZmlsdGVycy9waXBlcyc7XG5pbXBvcnQgeyBEcm9wZG93bkxvYWRTdGF0dXNDb2xvclBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi9waXBlcyc7XG5pbXBvcnQgeyBGaWx0ZXJTZWFyY2hQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvZmlsdGVyLXNlYXJjaC5waXBlJztcblxuLy8gRXh0ZXJuYWwgTGlicmFyaWVzXG5pbXBvcnQgeyBTdmdJY29uQ29tcG9uZW50IH0gZnJvbSAnYW5ndWxhci1zdmctaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWZpbHRlci1saXN0LWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXG4gICAgICAgIENhSW5wdXRDb21wb25lbnQsXG4gICAgICAgIENhRmlsdGVyRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBTdmdJY29uQ29tcG9uZW50LFxuXG4gICAgICAgIERyb3Bkb3duTG9hZFN0YXR1c0NvbG9yUGlwZSxcbiAgICAgICAgRmlsdGVyVHJ1Y2tDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclRyYWlsZXJDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclNlYXJjaFBpcGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2FGaWx0ZXJMaXN0RHJvcGRvd25Db21wb25lbnQge1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHR5cGUodmFsdWU6IEZpbHRlckRyb3Bkb3duVHlwZXMpIHtcbiAgICAgICAgdGhpcy5zZXRJbml0YWxUeXBlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBsaXN0KHZhbHVlOiBJRmlsdGVyRHJvcGRvd25MaXN0W10pIHtcbiAgICAgICAgdGhpcy5zZXRJbml0YWxMaXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgc2V0RmlsdGVyOiBFdmVudEVtaXR0ZXI8SUZpbHRlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgY2FGaWx0ZXJzU3ZnUm91dGVzID0gQ2FGaWx0ZXJzU3ZnUm91dGVzO1xuICAgIHB1YmxpYyBsb2FkU3RhdHVzRW51bSA9IExvYWRTdGF0dXNFbnVtO1xuICAgIHB1YmxpYyBzcm9sbExpbWl0U2l6ZTogbnVtYmVyID0gODtcbiAgICBwdWJsaWMgcHJldml1c1VuU2VsZWN0ZWRTdGF0ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG4gICAgcHVibGljIHByZXZpdXNTZWxlY3RlZFN0YXRlOiBJRmlsdGVyRHJvcGRvd25MaXN0W10gPSBbXTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZExpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuICAgIHB1YmxpYyB1bnNlbGVjdGVkTGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG4gICAgcHVibGljIHNlYXJjaEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgc2VhcmNoOiBudWxsLFxuICAgIH0pO1xuICAgIHB1YmxpYyBzb3J0S2V5OiBrZXlvZiBJRmlsdGVyRHJvcGRvd25MaXN0ID0gZUZpbHRlclNvcnRpbmdLZXkuTkFNRTtcbiAgICBwdWJsaWMgZGlyZWN0aW9uTXVsdGlwbGllcjogbnVtYmVyID0gMTtcbiAgICBwdWJsaWMgaW5pdGlhbExpc3RTaXplOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25maWchOiBJRmlsdGVyRHJvcGRvd25Db25maWd1cmF0aW9uO1xuXG4gICAgcHVibGljIHNlbGVjdGVkQ291bnQ6IG51bWJlciA9IDA7XG4gICAgcHVibGljIGFjdGl2ZUNvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgcHJpdmF0ZSBfdHlwZSE6IEZpbHRlckRyb3Bkb3duVHlwZXM7XG4gICAgcHJpdmF0ZSBfbGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHt9XG5cbiAgICAvLyBHZXR0ZXJzXG4gICAgZ2V0IHR5cGUoKTogRmlsdGVyRHJvcGRvd25UeXBlcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIC8vIFB1YmxpY1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtID0gKGl0ZW06IElGaWx0ZXJEcm9wZG93bkxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZlSXRlbShpdGVtLCB0aGlzLnVuc2VsZWN0ZWRMaXN0LCB0aGlzLnNlbGVjdGVkTGlzdCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyB1blNlbGVjdEl0ZW0gPSAoaXRlbTogSUZpbHRlckRyb3Bkb3duTGlzdCkgPT4ge1xuICAgICAgICB0aGlzLm1vdmVJdGVtKGl0ZW0sIHRoaXMuc2VsZWN0ZWRMaXN0LCB0aGlzLnVuc2VsZWN0ZWRMaXN0KTtcbiAgICB9O1xuXG4gICAgcHVibGljIGdldCB0cnVja09yVHJhaWxlckljb25QaXBlKCk6IFBpcGVUcmFuc2Zvcm0ge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBlRmlsdGVyRHJvcGRvd25FbnVtLlRSVUNLX1RZUEVcbiAgICAgICAgICAgID8gbmV3IEZpbHRlclRydWNrQ29sb3JQaXBlKClcbiAgICAgICAgICAgIDogbmV3IEZpbHRlclRyYWlsZXJDb2xvclBpcGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1pdERhdGEoW10pO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gW107XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5fbGlzdF07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYWN0aXZlQ291bnQgPSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXNzRmlsdGVyVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1pdERhdGEodGhpcy5zZWxlY3RlZExpc3QubWFwKChsaXN0KSA9PiBsaXN0LmlkKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCA9IHRoaXMuYWN0aXZlQ291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnRWYWx1ZXMoc29ydGluZzogSVNvcnRFbWl0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc29ydEtleSA9IHNvcnRpbmcuc29ydEtleTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25NdWx0aXBsaWVyID0gc29ydGluZy5kaXJlY3Rpb25NdWx0aXBsaWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlc2V0RmlsdGVyU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHRvIHByZXZpdXMgdmFsdWUsIHNpbmNlIHVzZXIgZGlkbid0IHNhdmUgaXQsIGhlIGNsaWNrIG9uIG91dHNpZGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5wcmV2aXVzU2VsZWN0ZWRTdGF0ZV07XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5wcmV2aXVzVW5TZWxlY3RlZFN0YXRlXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50ID0gdGhpcy5wcmV2aXVzU2VsZWN0ZWRTdGF0ZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGF0YShsaXN0OiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEZpbHRlci5lbWl0KHtcbiAgICAgICAgICAgIGZpbHRlclR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHNlbGVjdGVkSWRzOiBsaXN0LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByZXZpdXNTZWxlY3RlZFN0YXRlID0gWy4uLnRoaXMuc2VsZWN0ZWRMaXN0XTtcbiAgICAgICAgdGhpcy5wcmV2aXVzVW5TZWxlY3RlZFN0YXRlID0gWy4uLnRoaXMudW5zZWxlY3RlZExpc3RdO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGlzdHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy5fbGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRMaXN0ID0gdGhpcy5fbGlzdC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVJdGVtKFxuICAgICAgICBpdGVtOiBJRmlsdGVyRHJvcGRvd25MaXN0LFxuICAgICAgICBmcm9tTGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdLFxuICAgICAgICB0b0xpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZyb21MaXN0LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGZyb21MaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0b0xpc3QucHVzaChpdGVtKTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHJlZmVyZW5jZXMgc28gbGlzdCBpcyB1cGRhdGVkXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkTGlzdF07XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMudW5zZWxlY3RlZExpc3RdO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVTZWxlY3RlZENvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVTZWxlY3RlZENvdW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZUNvdW50ID0gdGhpcy5zZWxlY3RlZExpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5pdGFsTGlzdCh2YWx1ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgLy8gUG0gYW5kIHRydWNrIHR5cGUgZG9uJ3QgaGF2ZSBpZCBzbyB3ZSBuZWVkIHRvIG1hcCBuYW1lc1xuICAgICAgICAgICAgdGhpcy5fbGlzdCA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkID8/IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGlzdHMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbExpc3RTaXplID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5wcmV2aXVzVW5TZWxlY3RlZFN0YXRlID0gWy4uLnRoaXMuX2xpc3RdOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5pdGFsVHlwZSh2YWx1ZTogRmlsdGVyRHJvcGRvd25UeXBlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29uZmlnID0gRmlsdGVyRHJvcGRvd25JY29uc0NvbnN0W3RoaXMuX3R5cGVdO1xuICAgIH1cbn1cbiIsIjxhcHAtY2EtZmlsdGVyLWRyb3Bkb3duXG4gICAgW3R5cGVdPVwidHlwZVwiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgICBbaXNGb3JtQ2hhbmdlZF09XCIhIWFjdGl2ZUNvdW50XCJcbiAgICBbYWN0aXZlQ291bnRdPVwiYWN0aXZlQ291bnRcIlxuICAgIFthcHBsaWVkRmlsdGVyc0NvdW50XT1cInNlbGVjdGVkQ291bnRcIlxuICAgIChoYW5kbGVGaWx0ZXJzQ2xlYXIpPVwiY2xlYXJWYWx1ZXMoKVwiXG4gICAgKHNldEZpbHRlcik9XCJwYXNzRmlsdGVyVmFsdWUoKVwiXG4gICAgKHNvcnRpbmcpPVwic29ydFZhbHVlcygkZXZlbnQpXCJcbiAgICAocmVzZXRGaWx0ZXJTdGF0ZSk9XCJvblJlc2V0RmlsdGVyU3RhdGUoKVwiXG4+XG4gICAgQGxldCBpc1RydWNrID0gdHlwZSA9PT0gJ1RydWNrVHlwZSc7XG4gICAgQGxldCBpc1RyYWlsZXIgPSB0eXBlID09PSAnVHJhaWxlclR5cGUnO1xuICAgIEBsZXQgaXNQbSA9IHR5cGUgPT09ICdQbSc7XG4gICAgQGxldCBpc1NlcnZpY2UgPSB0eXBlID09PSAnU2VydmljZSc7XG4gICAgQGxldCBpc1RydWNrT3JUcmFpbGVyID0gaXNUcnVjayB8fCBpc1RyYWlsZXI7XG4gICAgQGxldCBoYXNMZWZ0SWNvbiA9IGlzUG0gfHwgaXNTZXJ2aWNlO1xuICAgIDxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICAgICAgICBAaWYgKFxuICAgICAgICAgICAgaW5pdGlhbExpc3RTaXplID4gc3JvbGxMaW1pdFNpemUgJiZcbiAgICAgICAgICAgIGNvbmZpZyAmJlxuICAgICAgICAgICAgY29uZmlnLmlzU2VhcmNoQWN0aXZlICYmXG4gICAgICAgICAgICBjb25maWcuZm9ybUZpZWxkQ29uZmlnXG4gICAgICAgICkge1xuICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIj5cbiAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJjb25maWcuZm9ybUZpZWxkQ29uZmlnXCJcbiAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0XCJcbiAgICAgICAgICAgIFtjbGFzcy5jYS1zY3JvbGwtYmFyXT1cImluaXRpYWxMaXN0U2l6ZSA+IHNyb2xsTGltaXRTaXplXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRpdmlkZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIEBsZXQgc2VhcmNoU3RyaW5nID0gc2VhcmNoRm9ybS5nZXQoJ3NlYXJjaCcpPy52YWx1ZTtcblxuICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBMaXN0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGxpc3RUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWFyY2hTdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbmFtZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0S2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGlyZWN0aW9uTXVsdGlwbGllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrRm46IHVuU2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gVW5zZWxlY3RlZCBMaXN0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGxpc3RUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zZWxlY3RlZExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlclNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlYXJjaFN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rpb25NdWx0aXBsaWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tGbjogc2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICNsaXN0VGVtcGxhdGVcbiAgICAgICAgbGV0LWl0ZW1zPVwiaXRlbXNcIlxuICAgICAgICBsZXQtY2xpY2tGbj1cImNsaWNrRm5cIlxuICAgICAgICBsZXQtaXNTZWxlY3RlZExpc3Q9XCJzZWxlY3RlZExpc3RcIlxuICAgID5cbiAgICAgICAgQGlmIChpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLXhzIG1iLTEgbWFyZ2luLXQtNFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0gcGFkZGluZy00IGJyLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXItZHJvcGRvd24tbGlzdC1pdGVtLWhvdmVyJzogaXNTZWxlY3RlZExpc3QsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZnLWhvdmVyLWdyZXktNCBzdmctZmlsbC1tdXRlZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xlZnRJY29uICYmICFpc1NlbGVjdGVkTGlzdCxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmctaG92ZXItYmx1ZS0xOSBzdmctZmlsbC1ibHVlLTgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNMZWZ0SWNvbiAmJiBpc1NlbGVjdGVkTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrRm4oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIG1hcmdpbi1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5qdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbl09XCJpc1RydWNrT3JUcmFpbGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHR5cGUgPT09ICdEaXNwYXRjaGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLXByb2ZpbGUtaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmR4XT1cIiRpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dFNob3J0TmFtZV09XCJpdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YXRhckltZ109XCJpdGVtLmF2YXRhcj8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXJnaW4tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLXByb2ZpbGUtaW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAodHlwZSA9PT0gJ1N0YXR1cycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFN0YXR1c0VudW1baXRlbS5pZCFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZHJvcGRvd25Mb2FkU3RhdHVzQ29sb3I6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tc3RhdHVzLWNpcmNsZSBici1jaXJjbGUgbWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChoYXNMZWZ0SWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXItNCBzdmctc2l6ZS0xOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N2Zy1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNvbG9yLXdoaXRlIHRleHQtc2l6ZS0xNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jYS1mb250LWV4dHJhLWJvbGRdPVwiaXNTZWxlY3RlZExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC11cHBlcmNhc2VdPVwidHlwZSA9PT0gJ1N0YXR1cydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzVHJ1Y2tPclRyYWlsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0taWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tc3ZnLWZpbGwtY29sb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1Y2tPclRyYWlsZXJJY29uUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cIml0ZW0uaWNvblwiPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3RlZExpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjYUZpbHRlcnNTdmdSb3V0ZXMucmVtb3ZlU2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLXNpemUtMTAgc3ZnLWZpbGwtcmVkLTEwIGZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tcmVtb3ZlIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmlsdGVyLWRyb3Bkb3duLWxpc3QtYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N2Zy1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaXZpZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBEaXZpZGVyIFRlbXBsYXRlIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJhY2tncm91bmQtYmxhY2sgYnItMiBoZWlnaHQtMVwiPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtY291bnQ9XCJjb3VudFwiIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiPlxuICAgICAgICA8IS0tIENvdW50IGNhbiBiZSB1bmRlZmluZWQgZm9yIGV4YW1wbGUgb24gYXNzaWduIGRpc3BhdGNoIGxvYWQgbGlzdCwgb3IgaXQgY2FuIGJlIDAgYXMgd2VsbCBmb3Igc29tZSBkaXNwYXRjaGVycyAtLT5cbiAgICAgICAgQGlmIChjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJici0xMCBmaWx0ZXItZHJvcGRvd24tbGlzdC1pdGVtLWNvdW50IHRleHQtc2l6ZS0xMSBjYS1mb250LXNlbWktYm9sZCBwYWRkaW5nLXktMiBwYWRkaW5nLXgtNSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmlsdGVyLWRyb3Bkb3duLWxpc3QtYmFkZ2VcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdiYWNrZ3JvdW5kLWJsdWUtMTQgdGV4dC1jb2xvci13aGl0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JhY2tncm91bmQtYmxhY2sgdGV4dC1jb2xvci13aGl0ZS00J1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY291bnQgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYXBwLWNhLWZpbHRlci1kcm9wZG93bj5cbiJdfQ==