@sbb-esta/lyne-elements 1.15.1 → 2.0.0

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 (680) hide show
  1. package/README.md +6 -6
  2. package/accordion/accordion.d.ts +4 -1
  3. package/accordion/accordion.d.ts.map +1 -1
  4. package/accordion.js +31 -22
  5. package/action-group/action-group.d.ts +6 -4
  6. package/action-group/action-group.d.ts.map +1 -1
  7. package/action-group.js +20 -17
  8. package/alert/alert/alert.d.ts +7 -23
  9. package/alert/alert/alert.d.ts.map +1 -1
  10. package/alert/alert-group/alert-group.d.ts +0 -4
  11. package/alert/alert-group/alert-group.d.ts.map +1 -1
  12. package/alert/alert-group.js +46 -47
  13. package/alert/alert.js +74 -132
  14. package/animation.css +4 -8
  15. package/autocomplete/autocomplete-base-element.d.ts +7 -6
  16. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  17. package/autocomplete/autocomplete.d.ts +0 -1
  18. package/autocomplete/autocomplete.d.ts.map +1 -1
  19. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  20. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  21. package/autocomplete-grid/autocomplete-grid-button.js +11 -11
  22. package/autocomplete-grid/autocomplete-grid.js +0 -3
  23. package/autocomplete.js +68 -67
  24. package/button/accent-button/accent-button.d.ts +19 -0
  25. package/button/accent-button/accent-button.d.ts.map +1 -0
  26. package/button/accent-button-link/accent-button-link.d.ts +19 -0
  27. package/button/accent-button-link/accent-button-link.d.ts.map +1 -0
  28. package/button/accent-button-link.d.ts +2 -0
  29. package/button/accent-button-link.d.ts.map +1 -0
  30. package/button/accent-button-link.js +17 -0
  31. package/button/accent-button-static/accent-button-static.d.ts +19 -0
  32. package/button/accent-button-static/accent-button-static.d.ts.map +1 -0
  33. package/button/accent-button-static.d.ts +2 -0
  34. package/button/accent-button-static.d.ts.map +1 -0
  35. package/button/accent-button-static.js +17 -0
  36. package/button/accent-button.d.ts +2 -0
  37. package/button/accent-button.d.ts.map +1 -0
  38. package/button/accent-button.js +17 -0
  39. package/button/common/button-common.d.ts.map +1 -1
  40. package/button/common.d.ts.map +1 -1
  41. package/button/common.js +20 -16
  42. package/button/mini-button/mini-button.d.ts +4 -3
  43. package/button/mini-button/mini-button.d.ts.map +1 -1
  44. package/button/mini-button-group/mini-button-group.d.ts +4 -1
  45. package/button/mini-button-group/mini-button-group.d.ts.map +1 -1
  46. package/button/mini-button-group.js +12 -8
  47. package/button/mini-button.d.ts +0 -1
  48. package/button/mini-button.d.ts.map +1 -1
  49. package/button/mini-button.js +10 -20
  50. package/button.d.ts +3 -3
  51. package/button.d.ts.map +1 -1
  52. package/button.js +3 -3
  53. package/calendar.js +25 -25
  54. package/card/card/card.d.ts +4 -1
  55. package/card/card/card.d.ts.map +1 -1
  56. package/card/card.js +10 -6
  57. package/checkbox/checkbox/checkbox.d.ts +4 -6
  58. package/checkbox/checkbox/checkbox.d.ts.map +1 -1
  59. package/checkbox/checkbox-group/checkbox-group.d.ts +4 -1
  60. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  61. package/checkbox/checkbox-group.js +14 -10
  62. package/checkbox/checkbox-panel/checkbox-panel.d.ts +4 -4
  63. package/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  64. package/checkbox/checkbox-panel.js +21 -18
  65. package/checkbox/checkbox.js +28 -26
  66. package/{chip/chip.d.ts → chip-label/chip-label.d.ts} +4 -4
  67. package/chip-label/chip-label.d.ts.map +1 -0
  68. package/chip-label.d.ts +2 -0
  69. package/chip-label.d.ts.map +1 -0
  70. package/chip-label.js +54 -0
  71. package/clock.js +1 -1
  72. package/container/container.js +21 -21
  73. package/container/sticky-bar/sticky-bar.d.ts +1 -0
  74. package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  75. package/container/sticky-bar.js +20 -12
  76. package/core/base-elements/button-base-element.d.ts +27 -18
  77. package/core/base-elements/button-base-element.d.ts.map +1 -1
  78. package/core/base-elements/open-close-base-element.d.ts.map +1 -1
  79. package/core/base-elements.js +135 -138
  80. package/core/datetime/date-adapter.d.ts +2 -1
  81. package/core/datetime/date-adapter.d.ts.map +1 -1
  82. package/core/datetime/native-date-adapter.d.ts +1 -1
  83. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  84. package/core/datetime.js +29 -28
  85. package/core/dom/animation.d.ts +2 -0
  86. package/core/dom/animation.d.ts.map +1 -0
  87. package/core/dom/lean-context.d.ts +5 -0
  88. package/core/dom/lean-context.d.ts.map +1 -0
  89. package/core/dom.d.ts +2 -2
  90. package/core/dom.d.ts.map +1 -1
  91. package/core/dom.js +50 -55
  92. package/core/eventing/form-element-handlers.d.ts +0 -7
  93. package/core/eventing/form-element-handlers.d.ts.map +1 -1
  94. package/core/eventing.d.ts +0 -1
  95. package/core/eventing.d.ts.map +1 -1
  96. package/core/eventing.js +28 -49
  97. package/core/i18n/i18n.d.ts +4 -2
  98. package/core/i18n/i18n.d.ts.map +1 -1
  99. package/core/i18n.js +147 -140
  100. package/core/mixins/disabled-mixin.d.ts +2 -7
  101. package/core/mixins/disabled-mixin.d.ts.map +1 -1
  102. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  103. package/core/mixins/form-associated-mixin.d.ts +1 -1
  104. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  105. package/core/mixins/form-associated-radio-button-mixin.d.ts +35 -0
  106. package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -0
  107. package/core/mixins.d.ts +1 -0
  108. package/core/mixins.d.ts.map +1 -1
  109. package/core/mixins.js +347 -220
  110. package/core/styles/_index.scss +1 -0
  111. package/core/styles/core.scss +148 -0
  112. package/core/styles/image.scss +66 -0
  113. package/core/styles/mixins/animation.scss +2 -4
  114. package/core/styles/mixins/buttons.scss +7 -4
  115. package/core/styles/mixins/card.scss +1 -1
  116. package/core/styles/mixins/chip.scss +35 -35
  117. package/core/styles/mixins/image.scss +34 -0
  118. package/core/styles/mixins/overlay.scss +1 -1
  119. package/core/styles/mixins/panel.scss +1 -1
  120. package/core/styles/scrollbar.scss +44 -0
  121. package/core/styles/standard-theme.scss +2 -0
  122. package/core/styles/table.scss +4 -0
  123. package/core/testing/event-spy.d.ts +2 -1
  124. package/core/testing/event-spy.d.ts.map +1 -1
  125. package/core/testing.d.ts +0 -1
  126. package/core/testing.d.ts.map +1 -1
  127. package/core/testing.js +48 -57
  128. package/core.css +112 -0
  129. package/custom-elements.json +25961 -21672
  130. package/datepicker/common/datepicker-button.d.ts +3 -5
  131. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  132. package/datepicker/common.js +30 -29
  133. package/datepicker/datepicker/datepicker.d.ts +25 -72
  134. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  135. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +1 -3
  136. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  137. package/datepicker/datepicker-next-day.js +10 -12
  138. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +1 -3
  139. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  140. package/datepicker/datepicker-previous-day.js +11 -13
  141. package/datepicker/datepicker.js +129 -157
  142. package/development/accordion/accordion.d.ts +4 -1
  143. package/development/accordion/accordion.d.ts.map +1 -1
  144. package/development/accordion.js +16 -5
  145. package/development/action-group/action-group.d.ts +6 -4
  146. package/development/action-group/action-group.d.ts.map +1 -1
  147. package/development/action-group.js +10 -7
  148. package/development/alert/alert/alert.d.ts +7 -23
  149. package/development/alert/alert/alert.d.ts.map +1 -1
  150. package/development/alert/alert-group/alert-group.d.ts +0 -4
  151. package/development/alert/alert-group/alert-group.d.ts.map +1 -1
  152. package/development/alert/alert-group.js +10 -12
  153. package/development/alert/alert.js +38 -122
  154. package/development/autocomplete/autocomplete-base-element.d.ts +7 -6
  155. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  156. package/development/autocomplete/autocomplete.d.ts +0 -1
  157. package/development/autocomplete/autocomplete.d.ts.map +1 -1
  158. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts +0 -1
  159. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
  160. package/development/autocomplete-grid/autocomplete-grid-button.js +6 -6
  161. package/development/autocomplete-grid/autocomplete-grid.js +1 -7
  162. package/development/autocomplete.js +23 -19
  163. package/development/button/accent-button/accent-button.d.ts +19 -0
  164. package/development/button/accent-button/accent-button.d.ts.map +1 -0
  165. package/development/button/accent-button-link/accent-button-link.d.ts +19 -0
  166. package/development/button/accent-button-link/accent-button-link.d.ts.map +1 -0
  167. package/development/button/accent-button-link.d.ts +2 -0
  168. package/development/button/accent-button-link.d.ts.map +1 -0
  169. package/development/button/accent-button-link.js +25 -0
  170. package/development/button/accent-button-static/accent-button-static.d.ts +19 -0
  171. package/development/button/accent-button-static/accent-button-static.d.ts.map +1 -0
  172. package/development/button/accent-button-static.d.ts +2 -0
  173. package/development/button/accent-button-static.d.ts.map +1 -0
  174. package/development/button/accent-button-static.js +25 -0
  175. package/development/button/accent-button.d.ts +2 -0
  176. package/development/button/accent-button.d.ts.map +1 -0
  177. package/development/button/accent-button.js +25 -0
  178. package/development/button/common/button-common.d.ts.map +1 -1
  179. package/development/button/common.d.ts.map +1 -1
  180. package/development/button/common.js +20 -16
  181. package/development/button/mini-button/mini-button.d.ts +4 -3
  182. package/development/button/mini-button/mini-button.d.ts.map +1 -1
  183. package/development/button/mini-button-group/mini-button-group.d.ts +4 -1
  184. package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -1
  185. package/development/button/mini-button-group.js +7 -3
  186. package/development/button/mini-button.d.ts +0 -1
  187. package/development/button/mini-button.d.ts.map +1 -1
  188. package/development/button/mini-button.js +14 -32
  189. package/development/button.d.ts +3 -3
  190. package/development/button.d.ts.map +1 -1
  191. package/development/button.js +3 -3
  192. package/development/calendar.js +1 -1
  193. package/development/card/card/card.d.ts +4 -1
  194. package/development/card/card/card.d.ts.map +1 -1
  195. package/development/card/card.js +8 -4
  196. package/development/checkbox/checkbox/checkbox.d.ts +4 -6
  197. package/development/checkbox/checkbox/checkbox.d.ts.map +1 -1
  198. package/development/checkbox/checkbox-group/checkbox-group.d.ts +4 -1
  199. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
  200. package/development/checkbox/checkbox-group.js +7 -3
  201. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +4 -4
  202. package/development/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
  203. package/development/checkbox/checkbox-panel.js +7 -4
  204. package/development/checkbox/checkbox.js +8 -6
  205. package/development/{chip/chip.d.ts → chip-label/chip-label.d.ts} +4 -4
  206. package/development/chip-label/chip-label.d.ts.map +1 -0
  207. package/development/chip-label.d.ts +2 -0
  208. package/development/chip-label.d.ts.map +1 -0
  209. package/development/{chip.js → chip-label.js} +26 -26
  210. package/development/clock.js +1 -1
  211. package/development/container/container.js +8 -12
  212. package/development/container/sticky-bar/sticky-bar.d.ts +1 -0
  213. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  214. package/development/container/sticky-bar.js +18 -10
  215. package/development/core/base-elements/button-base-element.d.ts +27 -18
  216. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  217. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -1
  218. package/development/core/base-elements.js +66 -74
  219. package/development/core/datetime/date-adapter.d.ts +2 -1
  220. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  221. package/development/core/datetime/native-date-adapter.d.ts +1 -1
  222. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  223. package/development/core/datetime.js +4 -3
  224. package/development/core/dom/animation.d.ts +2 -0
  225. package/development/core/dom/animation.d.ts.map +1 -0
  226. package/development/core/dom/lean-context.d.ts +5 -0
  227. package/development/core/dom/lean-context.d.ts.map +1 -0
  228. package/development/core/dom.d.ts +2 -2
  229. package/development/core/dom.d.ts.map +1 -1
  230. package/development/core/dom.js +13 -21
  231. package/development/core/eventing/form-element-handlers.d.ts +0 -7
  232. package/development/core/eventing/form-element-handlers.d.ts.map +1 -1
  233. package/development/core/eventing.d.ts +0 -1
  234. package/development/core/eventing.d.ts.map +1 -1
  235. package/development/core/eventing.js +1 -25
  236. package/development/core/i18n/i18n.d.ts +4 -2
  237. package/development/core/i18n/i18n.d.ts.map +1 -1
  238. package/development/core/i18n.js +27 -23
  239. package/development/core/mixins/disabled-mixin.d.ts +2 -7
  240. package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
  241. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  242. package/development/core/mixins/form-associated-mixin.d.ts +1 -1
  243. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  244. package/development/core/mixins/form-associated-radio-button-mixin.d.ts +35 -0
  245. package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -0
  246. package/development/core/mixins.d.ts +1 -0
  247. package/development/core/mixins.d.ts.map +1 -1
  248. package/development/core/mixins.js +221 -30
  249. package/development/core/testing/event-spy.d.ts +2 -1
  250. package/development/core/testing/event-spy.d.ts.map +1 -1
  251. package/development/core/testing.d.ts +0 -1
  252. package/development/core/testing.d.ts.map +1 -1
  253. package/development/core/testing.js +4 -15
  254. package/development/datepicker/common/datepicker-button.d.ts +3 -5
  255. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  256. package/development/datepicker/common.js +13 -12
  257. package/development/datepicker/datepicker/datepicker.d.ts +25 -72
  258. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  259. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +1 -3
  260. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
  261. package/development/datepicker/datepicker-next-day.js +9 -15
  262. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +1 -3
  263. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
  264. package/development/datepicker/datepicker-previous-day.js +9 -15
  265. package/development/datepicker/datepicker.js +74 -115
  266. package/development/dialog/dialog/dialog.d.ts +3 -0
  267. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  268. package/development/dialog/dialog-title.js +2 -1
  269. package/development/dialog/dialog.js +46 -39
  270. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +7 -1
  271. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  272. package/development/expansion-panel/expansion-panel-header.js +3 -3
  273. package/development/expansion-panel/expansion-panel.js +32 -17
  274. package/development/file-selector/common/file-selector-common.d.ts +23 -0
  275. package/development/file-selector/common/file-selector-common.d.ts.map +1 -0
  276. package/development/file-selector/common.d.ts +2 -0
  277. package/development/file-selector/common.d.ts.map +1 -0
  278. package/development/file-selector/common.js +382 -0
  279. package/development/file-selector/file-selector/file-selector.d.ts +24 -0
  280. package/development/file-selector/file-selector/file-selector.d.ts.map +1 -0
  281. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts +33 -0
  282. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts.map +1 -0
  283. package/development/file-selector/file-selector-dropzone.d.ts +2 -0
  284. package/development/file-selector/file-selector-dropzone.d.ts.map +1 -0
  285. package/development/file-selector/file-selector-dropzone.js +181 -0
  286. package/development/file-selector/file-selector.d.ts +1 -87
  287. package/development/file-selector/file-selector.d.ts.map +1 -1
  288. package/development/file-selector/file-selector.js +52 -0
  289. package/development/file-selector.d.ts +2 -0
  290. package/development/file-selector.d.ts.map +1 -1
  291. package/development/file-selector.js +4 -552
  292. package/development/flip-card/flip-card-details.js +1 -1
  293. package/development/flip-card/flip-card-summary.js +3 -11
  294. package/development/flip-card/flip-card.js +6 -6
  295. package/development/form-field/form-field/form-field.d.ts +7 -10
  296. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  297. package/development/form-field/form-field-clear.js +6 -6
  298. package/development/form-field/form-field.js +74 -42
  299. package/development/header/common.js +2 -2
  300. package/development/header/header/header.d.ts +5 -3
  301. package/development/header/header/header.d.ts.map +1 -1
  302. package/development/header/header.js +15 -20
  303. package/development/image/image.d.ts +0 -30
  304. package/development/image/image.d.ts.map +1 -1
  305. package/development/image.js +62 -273
  306. package/development/journey-header/journey-header.d.ts +4 -1
  307. package/development/journey-header/journey-header.d.ts.map +1 -1
  308. package/development/journey-header.js +7 -3
  309. package/development/lead-container.js +2 -10
  310. package/development/link/common/link-common.d.ts.map +1 -1
  311. package/development/link/common.js +9 -8
  312. package/development/link-list/common/link-list-base.d.ts +1 -0
  313. package/development/link-list/common/link-list-base.d.ts.map +1 -1
  314. package/development/link-list/common.js +4 -2
  315. package/development/link-list/link-list-anchor.js +4 -4
  316. package/development/loading-indicator/loading-indicator.d.ts +1 -3
  317. package/development/loading-indicator/loading-indicator.d.ts.map +1 -1
  318. package/development/loading-indicator-circle/loading-indicator-circle.d.ts +16 -0
  319. package/development/loading-indicator-circle/loading-indicator-circle.d.ts.map +1 -0
  320. package/development/loading-indicator-circle.d.ts +2 -0
  321. package/development/loading-indicator-circle.d.ts.map +1 -0
  322. package/development/loading-indicator-circle.js +146 -0
  323. package/development/loading-indicator.js +81 -182
  324. package/development/map-container/map-container.d.ts.map +1 -1
  325. package/development/map-container.js +5 -5
  326. package/development/menu/common.js +5 -5
  327. package/development/menu/menu/menu.d.ts +3 -0
  328. package/development/menu/menu/menu.d.ts.map +1 -1
  329. package/development/menu/menu.js +39 -24
  330. package/development/navigation/common/navigation-action-common.d.ts.map +1 -1
  331. package/development/navigation/common.js +9 -5
  332. package/development/navigation/navigation/navigation.d.ts +3 -0
  333. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  334. package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  335. package/development/navigation/navigation-list.js +3 -2
  336. package/development/navigation/navigation-marker/navigation-marker.d.ts +2 -1
  337. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  338. package/development/navigation/navigation-marker.js +6 -4
  339. package/development/navigation/navigation-section/navigation-section.d.ts +3 -0
  340. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  341. package/development/navigation/navigation-section.js +38 -22
  342. package/development/navigation/navigation.js +42 -27
  343. package/development/notification/notification.d.ts +6 -2
  344. package/development/notification/notification.d.ts.map +1 -1
  345. package/development/notification.js +27 -21
  346. package/development/option/option/option-base-element.d.ts +0 -7
  347. package/development/option/option/option-base-element.d.ts.map +1 -1
  348. package/development/option/option.js +5 -26
  349. package/development/overlay/overlay-base-element.d.ts +2 -0
  350. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  351. package/development/overlay/overlay.d.ts +3 -0
  352. package/development/overlay/overlay.d.ts.map +1 -1
  353. package/development/overlay.js +43 -31
  354. package/development/paginator/common/paginator-common.d.ts.map +1 -1
  355. package/development/paginator/common.js +7 -3
  356. package/development/paginator/paginator.js +1 -1
  357. package/development/popover/popover/popover.d.ts +3 -0
  358. package/development/popover/popover/popover.d.ts.map +1 -1
  359. package/development/popover/popover-trigger.js +9 -9
  360. package/development/popover/popover.js +41 -26
  361. package/development/radio-button/common/radio-button-common.d.ts +3 -10
  362. package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
  363. package/development/radio-button/common.js +44 -121
  364. package/development/radio-button/radio-button/radio-button.d.ts +9 -1
  365. package/development/radio-button/radio-button/radio-button.d.ts.map +1 -1
  366. package/development/radio-button/radio-button-group/radio-button-group.d.ts +19 -26
  367. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  368. package/development/radio-button/radio-button-group.js +87 -123
  369. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +20 -2
  370. package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  371. package/development/radio-button/radio-button-panel.js +35 -15
  372. package/development/radio-button/radio-button.js +11 -15
  373. package/development/select/select.d.ts +3 -9
  374. package/development/select/select.d.ts.map +1 -1
  375. package/development/select.js +27 -25
  376. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +4 -1
  377. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  378. package/development/selection-expansion-panel.js +28 -16
  379. package/development/skiplink-list/skiplink-list.d.ts.map +1 -1
  380. package/development/skiplink-list.js +3 -2
  381. package/development/slider/slider.d.ts +0 -1
  382. package/development/slider/slider.d.ts.map +1 -1
  383. package/development/slider.js +2 -2
  384. package/development/stepper/step-label/step-label.d.ts +0 -2
  385. package/development/stepper/step-label/step-label.d.ts.map +1 -1
  386. package/development/stepper/step-label.js +10 -11
  387. package/development/stepper/step.js +1 -1
  388. package/development/stepper/stepper/stepper.d.ts +4 -1
  389. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  390. package/development/stepper/stepper.js +9 -7
  391. package/development/tabs/tab-group/tab-group.d.ts +4 -1
  392. package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
  393. package/development/tabs/tab-group.js +14 -5
  394. package/development/tabs/tab-label.js +1 -1
  395. package/development/tag/tag/tag.d.ts +4 -1
  396. package/development/tag/tag/tag.d.ts.map +1 -1
  397. package/development/tag/tag-group/tag-group.d.ts +5 -2
  398. package/development/tag/tag-group/tag-group.d.ts.map +1 -1
  399. package/development/tag/tag-group.js +7 -4
  400. package/development/tag/tag.js +16 -12
  401. package/development/teaser/teaser.d.ts +2 -2
  402. package/development/teaser/teaser.d.ts.map +1 -1
  403. package/development/teaser-hero/teaser-hero.d.ts +2 -6
  404. package/development/teaser-hero/teaser-hero.d.ts.map +1 -1
  405. package/development/teaser-hero.js +9 -60
  406. package/development/teaser-product/common.js +7 -14
  407. package/development/teaser-product/teaser-product.js +1 -21
  408. package/development/teaser.js +12 -31
  409. package/development/time-input/time-input.d.ts +3 -6
  410. package/development/time-input/time-input.d.ts.map +1 -1
  411. package/development/time-input.js +33 -27
  412. package/development/toast/toast.d.ts +3 -0
  413. package/development/toast/toast.d.ts.map +1 -1
  414. package/development/toast.js +27 -13
  415. package/development/toggle/toggle/toggle.d.ts +4 -8
  416. package/development/toggle/toggle/toggle.d.ts.map +1 -1
  417. package/development/toggle/toggle.js +9 -12
  418. package/development/toggle-check/toggle-check.d.ts +4 -6
  419. package/development/toggle-check/toggle-check.d.ts.map +1 -1
  420. package/development/toggle-check.js +9 -7
  421. package/development/train/train/train.d.ts.map +1 -1
  422. package/development/train/train-blocked-passage.js +2 -2
  423. package/development/train/train-formation/train-formation.d.ts +3 -11
  424. package/development/train/train-formation/train-formation.d.ts.map +1 -1
  425. package/development/train/train-formation.js +43 -74
  426. package/development/train/train-wagon/train-wagon.d.ts +11 -8
  427. package/development/train/train-wagon/train-wagon.d.ts.map +1 -1
  428. package/development/train/train-wagon.js +149 -124
  429. package/development/train/train.js +35 -112
  430. package/development/visual-checkbox/visual-checkbox.d.ts +4 -1
  431. package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -1
  432. package/development/visual-checkbox.js +7 -3
  433. package/dialog/dialog/dialog.d.ts +3 -0
  434. package/dialog/dialog/dialog.d.ts.map +1 -1
  435. package/dialog/dialog-title.js +9 -9
  436. package/dialog/dialog.js +56 -51
  437. package/expansion-panel/expansion-panel/expansion-panel.d.ts +7 -1
  438. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  439. package/expansion-panel/expansion-panel-header.js +1 -1
  440. package/expansion-panel/expansion-panel.js +41 -28
  441. package/file-selector/common/file-selector-common.d.ts +23 -0
  442. package/file-selector/common/file-selector-common.d.ts.map +1 -0
  443. package/file-selector/common.d.ts +2 -0
  444. package/file-selector/common.d.ts.map +1 -0
  445. package/file-selector/common.js +210 -0
  446. package/file-selector/file-selector/file-selector.d.ts +24 -0
  447. package/file-selector/file-selector/file-selector.d.ts.map +1 -0
  448. package/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts +33 -0
  449. package/file-selector/file-selector-dropzone/file-selector-dropzone.d.ts.map +1 -0
  450. package/file-selector/file-selector-dropzone.d.ts +2 -0
  451. package/file-selector/file-selector-dropzone.d.ts.map +1 -0
  452. package/file-selector/file-selector-dropzone.js +97 -0
  453. package/file-selector/file-selector.d.ts +1 -87
  454. package/file-selector/file-selector.d.ts.map +1 -1
  455. package/file-selector/file-selector.js +44 -0
  456. package/file-selector.d.ts +2 -0
  457. package/file-selector.d.ts.map +1 -1
  458. package/file-selector.js +3 -301
  459. package/flip-card/flip-card-details.js +5 -5
  460. package/flip-card/flip-card-summary.js +7 -7
  461. package/flip-card/flip-card.js +9 -9
  462. package/form-field/form-field/form-field.d.ts +7 -10
  463. package/form-field/form-field/form-field.d.ts.map +1 -1
  464. package/form-field/form-field-clear.js +12 -12
  465. package/form-field/form-field.js +118 -93
  466. package/header/common.js +10 -10
  467. package/header/header/header.d.ts +5 -3
  468. package/header/header/header.d.ts.map +1 -1
  469. package/header/header.js +28 -31
  470. package/image/image.d.ts +0 -30
  471. package/image/image.d.ts.map +1 -1
  472. package/image.js +187 -281
  473. package/index.d.ts +13 -9
  474. package/index.js +13 -9
  475. package/journey-header/journey-header.d.ts +4 -1
  476. package/journey-header/journey-header.d.ts.map +1 -1
  477. package/journey-header.js +29 -25
  478. package/lead-container.js +5 -5
  479. package/link/common/link-common.d.ts.map +1 -1
  480. package/link/common.js +18 -16
  481. package/link-list/common/link-list-base.d.ts +1 -0
  482. package/link-list/common/link-list-base.d.ts.map +1 -1
  483. package/link-list/common.js +11 -9
  484. package/link-list/link-list-anchor.js +8 -8
  485. package/loading-indicator/loading-indicator.d.ts +1 -3
  486. package/loading-indicator/loading-indicator.d.ts.map +1 -1
  487. package/loading-indicator-circle/loading-indicator-circle.d.ts +16 -0
  488. package/loading-indicator-circle/loading-indicator-circle.d.ts.map +1 -0
  489. package/loading-indicator-circle.d.ts +2 -0
  490. package/loading-indicator-circle.d.ts.map +1 -0
  491. package/loading-indicator-circle.js +46 -0
  492. package/loading-indicator.js +41 -51
  493. package/map-container/map-container.d.ts.map +1 -1
  494. package/map-container.js +7 -7
  495. package/menu/common.js +8 -8
  496. package/menu/menu/menu.d.ts +3 -0
  497. package/menu/menu/menu.d.ts.map +1 -1
  498. package/menu/menu.js +52 -43
  499. package/navigation/common/navigation-action-common.d.ts.map +1 -1
  500. package/navigation/common.js +10 -6
  501. package/navigation/navigation/navigation.d.ts +3 -0
  502. package/navigation/navigation/navigation.d.ts.map +1 -1
  503. package/navigation/navigation-list/navigation-list.d.ts.map +1 -1
  504. package/navigation/navigation-list.js +17 -16
  505. package/navigation/navigation-marker/navigation-marker.d.ts +2 -1
  506. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  507. package/navigation/navigation-marker.js +12 -10
  508. package/navigation/navigation-section/navigation-section.d.ts +3 -0
  509. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  510. package/navigation/navigation-section.js +46 -37
  511. package/navigation/navigation.js +30 -21
  512. package/notification/notification.d.ts +6 -2
  513. package/notification/notification.d.ts.map +1 -1
  514. package/notification.js +55 -51
  515. package/option/option/option-base-element.d.ts +0 -7
  516. package/option/option/option-base-element.d.ts.map +1 -1
  517. package/option/option.js +110 -125
  518. package/overlay/overlay-base-element.d.ts +2 -0
  519. package/overlay/overlay-base-element.d.ts.map +1 -1
  520. package/overlay/overlay.d.ts +3 -0
  521. package/overlay/overlay.d.ts.map +1 -1
  522. package/overlay.js +83 -77
  523. package/package.json +52 -29
  524. package/paginator/common/paginator-common.d.ts.map +1 -1
  525. package/paginator/common.js +21 -17
  526. package/paginator/paginator.js +1 -1
  527. package/popover/popover/popover.d.ts +3 -0
  528. package/popover/popover/popover.d.ts.map +1 -1
  529. package/popover/popover-trigger.js +6 -6
  530. package/popover/popover.js +114 -109
  531. package/radio-button/common/radio-button-common.d.ts +3 -10
  532. package/radio-button/common/radio-button-common.d.ts.map +1 -1
  533. package/radio-button/common.js +43 -90
  534. package/radio-button/radio-button/radio-button.d.ts +9 -1
  535. package/radio-button/radio-button/radio-button.d.ts.map +1 -1
  536. package/radio-button/radio-button-group/radio-button-group.d.ts +19 -26
  537. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  538. package/radio-button/radio-button-group.js +112 -131
  539. package/radio-button/radio-button-panel/radio-button-panel.d.ts +20 -2
  540. package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
  541. package/radio-button/radio-button-panel.js +56 -44
  542. package/radio-button/radio-button.js +34 -38
  543. package/scrollbar.css +158 -0
  544. package/select/select.d.ts +3 -9
  545. package/select/select.d.ts.map +1 -1
  546. package/select.js +65 -66
  547. package/selection-expansion-panel/selection-expansion-panel.d.ts +4 -1
  548. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  549. package/selection-expansion-panel.js +41 -31
  550. package/skiplink-list/skiplink-list.d.ts.map +1 -1
  551. package/skiplink-list.js +14 -13
  552. package/slider/slider.d.ts +0 -1
  553. package/slider/slider.d.ts.map +1 -1
  554. package/slider.js +1 -1
  555. package/standard-theme.css +396 -8
  556. package/stepper/step-label/step-label.d.ts +0 -2
  557. package/stepper/step-label/step-label.d.ts.map +1 -1
  558. package/stepper/step-label.js +6 -6
  559. package/stepper/step.js +4 -4
  560. package/stepper/stepper/stepper.d.ts +4 -1
  561. package/stepper/stepper/stepper.d.ts.map +1 -1
  562. package/stepper/stepper.js +22 -19
  563. package/table.css +232 -0
  564. package/tabs/tab-group/tab-group.d.ts +4 -1
  565. package/tabs/tab-group/tab-group.d.ts.map +1 -1
  566. package/tabs/tab-group.js +80 -74
  567. package/tabs/tab-label.js +1 -1
  568. package/tag/tag/tag.d.ts +4 -1
  569. package/tag/tag/tag.d.ts.map +1 -1
  570. package/tag/tag-group/tag-group.d.ts +5 -2
  571. package/tag/tag-group/tag-group.d.ts.map +1 -1
  572. package/tag/tag-group.js +13 -10
  573. package/tag/tag.js +25 -21
  574. package/teaser/teaser.d.ts +2 -2
  575. package/teaser/teaser.d.ts.map +1 -1
  576. package/teaser-hero/teaser-hero.d.ts +2 -6
  577. package/teaser-hero/teaser-hero.d.ts.map +1 -1
  578. package/teaser-hero.js +32 -57
  579. package/teaser-product/common.js +1 -1
  580. package/teaser-product/teaser-product.js +13 -13
  581. package/teaser.js +28 -28
  582. package/time-input/time-input.d.ts +3 -6
  583. package/time-input/time-input.d.ts.map +1 -1
  584. package/time-input.js +56 -55
  585. package/toast/toast.d.ts +3 -0
  586. package/toast/toast.d.ts.map +1 -1
  587. package/toast.js +51 -42
  588. package/toggle/toggle/toggle.d.ts +4 -8
  589. package/toggle/toggle/toggle.d.ts.map +1 -1
  590. package/toggle/toggle.js +48 -48
  591. package/toggle-check/toggle-check.d.ts +4 -6
  592. package/toggle-check/toggle-check.d.ts.map +1 -1
  593. package/toggle-check.js +23 -21
  594. package/train/train/train.d.ts.map +1 -1
  595. package/train/train-blocked-passage.js +1 -1
  596. package/train/train-formation/train-formation.d.ts +3 -11
  597. package/train/train-formation/train-formation.d.ts.map +1 -1
  598. package/train/train-formation.js +47 -65
  599. package/train/train-wagon/train-wagon.d.ts +11 -8
  600. package/train/train-wagon/train-wagon.d.ts.map +1 -1
  601. package/train/train-wagon.js +123 -134
  602. package/train/train.js +74 -78
  603. package/visual-checkbox/visual-checkbox.d.ts +4 -1
  604. package/visual-checkbox/visual-checkbox.d.ts.map +1 -1
  605. package/visual-checkbox.js +21 -17
  606. package/button/mini-button/mini-button-base-element.d.ts +0 -8
  607. package/button/mini-button/mini-button-base-element.d.ts.map +0 -1
  608. package/button/tertiary-button/tertiary-button.d.ts +0 -19
  609. package/button/tertiary-button/tertiary-button.d.ts.map +0 -1
  610. package/button/tertiary-button-link/tertiary-button-link.d.ts +0 -19
  611. package/button/tertiary-button-link/tertiary-button-link.d.ts.map +0 -1
  612. package/button/tertiary-button-link.d.ts +0 -2
  613. package/button/tertiary-button-link.d.ts.map +0 -1
  614. package/button/tertiary-button-link.js +0 -17
  615. package/button/tertiary-button-static/tertiary-button-static.d.ts +0 -19
  616. package/button/tertiary-button-static/tertiary-button-static.d.ts.map +0 -1
  617. package/button/tertiary-button-static.d.ts +0 -2
  618. package/button/tertiary-button-static.d.ts.map +0 -1
  619. package/button/tertiary-button-static.js +0 -17
  620. package/button/tertiary-button.d.ts +0 -2
  621. package/button/tertiary-button.d.ts.map +0 -1
  622. package/button/tertiary-button.js +0 -17
  623. package/chip/chip.d.ts.map +0 -1
  624. package/chip.d.ts +0 -2
  625. package/chip.d.ts.map +0 -1
  626. package/chip.js +0 -54
  627. package/core/dom/get-document-writing-mode.d.ts +0 -5
  628. package/core/dom/get-document-writing-mode.d.ts.map +0 -1
  629. package/core/dom/ssr.d.ts +0 -13
  630. package/core/dom/ssr.d.ts.map +0 -1
  631. package/core/eventing/handler-repository.d.ts +0 -28
  632. package/core/eventing/handler-repository.d.ts.map +0 -1
  633. package/core/observers/intersection-observer.d.ts +0 -20
  634. package/core/observers/intersection-observer.d.ts.map +0 -1
  635. package/core/observers/mutation-observer.d.ts +0 -13
  636. package/core/observers/mutation-observer.d.ts.map +0 -1
  637. package/core/observers/resize-observer.d.ts +0 -16
  638. package/core/observers/resize-observer.d.ts.map +0 -1
  639. package/core/observers.d.ts +0 -4
  640. package/core/observers.d.ts.map +0 -1
  641. package/core/observers.js +0 -38
  642. package/core/testing/wait-for-event.d.ts +0 -2
  643. package/core/testing/wait-for-event.d.ts.map +0 -1
  644. package/development/button/mini-button/mini-button-base-element.d.ts +0 -8
  645. package/development/button/mini-button/mini-button-base-element.d.ts.map +0 -1
  646. package/development/button/tertiary-button/tertiary-button.d.ts +0 -19
  647. package/development/button/tertiary-button/tertiary-button.d.ts.map +0 -1
  648. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +0 -19
  649. package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +0 -1
  650. package/development/button/tertiary-button-link.d.ts +0 -2
  651. package/development/button/tertiary-button-link.d.ts.map +0 -1
  652. package/development/button/tertiary-button-link.js +0 -25
  653. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +0 -19
  654. package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +0 -1
  655. package/development/button/tertiary-button-static.d.ts +0 -2
  656. package/development/button/tertiary-button-static.d.ts.map +0 -1
  657. package/development/button/tertiary-button-static.js +0 -25
  658. package/development/button/tertiary-button.d.ts +0 -2
  659. package/development/button/tertiary-button.d.ts.map +0 -1
  660. package/development/button/tertiary-button.js +0 -25
  661. package/development/chip/chip.d.ts.map +0 -1
  662. package/development/chip.d.ts +0 -2
  663. package/development/chip.d.ts.map +0 -1
  664. package/development/core/dom/get-document-writing-mode.d.ts +0 -5
  665. package/development/core/dom/get-document-writing-mode.d.ts.map +0 -1
  666. package/development/core/dom/ssr.d.ts +0 -13
  667. package/development/core/dom/ssr.d.ts.map +0 -1
  668. package/development/core/eventing/handler-repository.d.ts +0 -28
  669. package/development/core/eventing/handler-repository.d.ts.map +0 -1
  670. package/development/core/observers/intersection-observer.d.ts +0 -20
  671. package/development/core/observers/intersection-observer.d.ts.map +0 -1
  672. package/development/core/observers/mutation-observer.d.ts +0 -13
  673. package/development/core/observers/mutation-observer.d.ts.map +0 -1
  674. package/development/core/observers/resize-observer.d.ts +0 -16
  675. package/development/core/observers/resize-observer.d.ts.map +0 -1
  676. package/development/core/observers.d.ts +0 -4
  677. package/development/core/observers.d.ts.map +0 -1
  678. package/development/core/observers.js +0 -39
  679. package/development/core/testing/wait-for-event.d.ts +0 -2
  680. package/development/core/testing/wait-for-event.d.ts.map +0 -1
@@ -12,7 +12,7 @@ import { ref } from "lit/directives/ref.js";
12
12
  import { setModalityOnNextFocus, getFirstFocusableElement, getFocusableElements } from "../core/a11y.js";
13
13
  import { SbbLanguageController } from "../core/controllers.js";
14
14
  import { hostAttributes, slotState, forceType, omitEmptyConverter } from "../core/decorators.js";
15
- import { setOrRemoveAttribute, findReferencedElement, isBreakpoint } from "../core/dom.js";
15
+ import { setOrRemoveAttribute, isZeroAnimationDuration, findReferencedElement, isBreakpoint } from "../core/dom.js";
16
16
  import { i18nGoBack } from "../core/i18n.js";
17
17
  import { SbbUpdateSchedulerMixin } from "../core/mixins.js";
18
18
  import { removeAriaOverlayTriggerAttributes, setAriaOverlayTriggerAttributes } from "../core/overlay.js";
@@ -30,7 +30,7 @@ const style = css`*,
30
30
  --sbb-navigation-section-position: fixed;
31
31
  --sbb-navigation-section-pointer-events: none;
32
32
  --sbb-navigation-section-animation-duration: var(
33
- --sbb-disable-animation-zero-time,
33
+ --sbb-disable-animation-duration,
34
34
  var(--sbb-animation-duration-3x)
35
35
  );
36
36
  --sbb-navigation-section-animation-easing: ease-out;
@@ -54,7 +54,7 @@ const style = css`*,
54
54
  :host {
55
55
  --sbb-navigation-section-column: 5 / 9;
56
56
  --sbb-navigation-section-animation-duration: var(
57
- --sbb-disable-animation-zero-time,
57
+ --sbb-disable-animation-duration,
58
58
  var(--sbb-animation-duration-4x)
59
59
  );
60
60
  --sbb-navigation-section-padding-block: var(--sbb-spacing-responsive-xl);
@@ -395,6 +395,34 @@ let SbbNavigationSectionElement = (() => {
395
395
  this.startUpdate();
396
396
  this.inert = true;
397
397
  (_a2 = this._triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "true");
398
+ if (this._isZeroAnimationDuration()) {
399
+ this._handleOpening();
400
+ }
401
+ }
402
+ _isZeroAnimationDuration() {
403
+ return isZeroAnimationDuration(this, "--sbb-navigation-section-animation-duration");
404
+ }
405
+ _handleOpening() {
406
+ this._state = "opened";
407
+ this.inert = false;
408
+ this._attachWindowEvents();
409
+ this._setNavigationInert();
410
+ this._setNavigationSectionFocus();
411
+ this._checkActiveAction();
412
+ this.completeUpdate();
413
+ }
414
+ _handleClosing() {
415
+ var _a2;
416
+ this._state = "closed";
417
+ this._navigationSectionContainerElement.scrollTo(0, 0);
418
+ (_a2 = this._windowEventsController) == null ? void 0 : _a2.abort();
419
+ this._resetLists();
420
+ this._setNavigationInert();
421
+ if (this._isZeroToLargeBreakpoint() && this._triggerElement) {
422
+ setModalityOnNextFocus(this._triggerElement);
423
+ this._triggerElement.focus();
424
+ }
425
+ this.completeUpdate();
398
426
  }
399
427
  _setActiveNavigationAction() {
400
428
  var _a2, _b;
@@ -416,6 +444,9 @@ let SbbNavigationSectionElement = (() => {
416
444
  this.startUpdate();
417
445
  this.inert = true;
418
446
  (_a2 = this._triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "false");
447
+ if (this._isZeroAnimationDuration()) {
448
+ this._handleClosing();
449
+ }
419
450
  }
420
451
  // Removes trigger click listener on trigger change.
421
452
  _removeTriggerClickListener(newValue, oldValue) {
@@ -457,26 +488,11 @@ let SbbNavigationSectionElement = (() => {
457
488
  // In rare cases it can be that the animationEnd event is triggered twice.
458
489
  // To avoid entering a corrupt state, exit when state is not expected.
459
490
  _onAnimationEnd(event) {
460
- var _a2;
461
491
  if (event.animationName === "open" && this._state === "opening") {
462
- this._state = "opened";
463
- this.inert = false;
464
- this._attachWindowEvents();
465
- this._setNavigationInert();
466
- this._setNavigationSectionFocus();
467
- this._checkActiveAction();
492
+ this._handleOpening();
468
493
  } else if (event.animationName === "close" && this._state === "closing") {
469
- this._state = "closed";
470
- this._navigationSectionContainerElement.scrollTo(0, 0);
471
- (_a2 = this._windowEventsController) == null ? void 0 : _a2.abort();
472
- this._resetLists();
473
- this._setNavigationInert();
474
- if (this._isZeroToLargeBreakpoint() && this._triggerElement) {
475
- setModalityOnNextFocus(this._triggerElement);
476
- this._triggerElement.focus();
477
- }
494
+ this._handleClosing();
478
495
  }
479
- this.completeUpdate();
480
496
  }
481
497
  _resetLists() {
482
498
  const activeActions = Array.from(this.querySelectorAll("[data-section-action][data-action-active]"));
@@ -555,7 +571,7 @@ let SbbNavigationSectionElement = (() => {
555
571
  ${ref((el) => this._navigationSectionContainerElement = el)}
556
572
  >
557
573
  <nav
558
- @animationend=${(event) => this._onAnimationEnd(event)}
574
+ @animationend=${this._onAnimationEnd}
559
575
  class="sbb-navigation-section"
560
576
  aria-labelledby=${!this.accessibilityLabel ? "title" : nothing}
561
577
  aria-label=${this.accessibilityLabel ? this.accessibilityLabel : nothing}
@@ -614,4 +630,4 @@ let SbbNavigationSectionElement = (() => {
614
630
  export {
615
631
  SbbNavigationSectionElement
616
632
  };
617
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZWN0aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXNlY3Rpb24vbmF2aWdhdGlvbi1zZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIExpdEVsZW1lbnQsIG5vdGhpbmcsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQge1xuICBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQsXG4gIGdldEZvY3VzYWJsZUVsZW1lbnRzLFxuICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzLFxufSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhvc3RBdHRyaWJ1dGVzLCBvbWl0RW1wdHlDb252ZXJ0ZXIsIHNsb3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBmaW5kUmVmZXJlbmNlZEVsZW1lbnQsIGlzQnJlYWtwb2ludCwgc2V0T3JSZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBpMThuR29CYWNrIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxuICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuLi8uLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tYnV0dG9uLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiTmF2aWdhdGlvbkxpbmtFbGVtZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1saW5rLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiTmF2aWdhdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vbmF2aWdhdGlvbi1zZWN0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vYnV0dG9uL3RyYW5zcGFyZW50LWJ1dHRvbi5qcyc7XG5pbXBvcnQgJy4uLy4uL2RpdmlkZXIuanMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBJdCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRhaW5lciBmb3IgYHNiYi1uYXZpZ2F0aW9uLWxpc3RgIHdpdGhpbiBhIGBzYmItbmF2aWdhdGlvbmAuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBgc2JiLW5hdmlnYXRpb24tc2VjdGlvbmAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1uYXZpZ2F0aW9uLXNlY3Rpb24nKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgc2xvdDogJ25hdmlnYXRpb24tc2VjdGlvbicsXG59KVxuQHNsb3RTdGF0ZSgpXG5jbGFzcyBTYmJOYXZpZ2F0aW9uU2VjdGlvbkVsZW1lbnQgZXh0ZW5kcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbihMaXRFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgdG8gYmUgc2hvd24gYmVmb3JlIHRoZSBhY3Rpb24gbGlzdC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd0aXRsZS1jb250ZW50JywgcmVmbGVjdDogdHJ1ZSwgY29udmVydGVyOiBvbWl0RW1wdHlDb252ZXJ0ZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIHRpdGxlQ29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBuYXZpZ2F0aW9uIHNlY3Rpb24uXG4gICAqIEFjY2VwdHMgYm90aCBhIHN0cmluZyAoaWQgb2YgYW4gZWxlbWVudCkgb3IgYW4gSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB0cmlnZ2VyKHZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3RyaWdnZXI7XG4gICAgdGhpcy5fdHJpZ2dlciA9IHZhbHVlO1xuICAgIHRoaXMuX3JlbW92ZVRyaWdnZXJDbGlja0xpc3RlbmVyKHRoaXMuX3RyaWdnZXIsIG9sZFZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRyaWdnZXIoKTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcjtcbiAgfVxuICBwcml2YXRlIF90cmlnZ2VyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIG5hdiBlbGVtZW50IGFuZCBpcyByZWFkIGFzIGEgdGl0bGUgb2YgdGhlIG5hdmlnYXRpb24tc2VjdGlvbi5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSBiYWNrIGJ1dHRvbiBlbGVtZW50LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktYmFjay1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlCYWNrTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdGhlIG5hdmlnYXRpb24gc2VjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2V0IF9zdGF0ZShzdGF0ZTogU2JiT3BlbmVkQ2xvc2VkU3RhdGUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsIHN0YXRlKTtcbiAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLCAnYXJpYS1oaWRkZW4nLCB0aGlzLl9zdGF0ZSAhPT0gJ29wZW5lZCcgPyAndHJ1ZScgOiBudWxsKTtcbiAgfVxuICBwcml2YXRlIGdldCBfc3RhdGUoKTogU2JiT3BlbmVkQ2xvc2VkU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScpIGFzIFNiYk9wZW5lZENsb3NlZFN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlyc3RMZXZlbE5hdmlnYXRpb24/OiBTYmJOYXZpZ2F0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU2VjdGlvbiE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRhaW5lckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX25hdmlnYXRpb25TZWN0aW9uQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfd2luZG93RXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgbmF2aWdhdGlvbiBzZWN0aW9uIG9uIHRyaWdnZXIgY2xpY2suXG4gICAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnIHx8ICF0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEFjdGl2ZU5hdmlnYXRpb25BY3Rpb24oKTtcbiAgICB0aGlzLl9jbG9zZVByZXZpb3VzTmF2aWdhdGlvblNlY3Rpb24oKTtcbiAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnN0YXJ0VXBkYXRlKCk7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVOYXZpZ2F0aW9uQWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5tYXJrZXI/LnNlbGVjdCh0aGlzLl90cmlnZ2VyRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZVByZXZpb3VzTmF2aWdhdGlvblNlY3Rpb24oKTogdm9pZCB7XG4gICAgKHRoaXMuX2ZpcnN0TGV2ZWxOYXZpZ2F0aW9uPy5hY3RpdmVOYXZpZ2F0aW9uU2VjdGlvbiBhcyBTYmJOYXZpZ2F0aW9uU2VjdGlvbkVsZW1lbnQpPy5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbmF2aWdhdGlvbiBzZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLnN0YXJ0VXBkYXRlKCk7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgLy8gUmVtb3ZlcyB0cmlnZ2VyIGNsaWNrIGxpc3RlbmVyIG9uIHRyaWdnZXIgY2hhbmdlLlxuICBwcml2YXRlIF9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcihcbiAgICBuZXdWYWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIG9sZFZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMuX25hdmlnYXRpb25TZWN0aW9uQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdHJpZ2dlciBpcyB2YWxpZCBhbmQgYXR0YWNoIGNsaWNrIGV2ZW50IGxpc3RlbmVycy5cbiAgcHJpdmF0ZSBfY29uZmlndXJlKHRyaWdnZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuXG4gICAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBmaW5kUmVmZXJlbmNlZEVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICBpZiAoIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0QXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCwgJ21lbnUnLCB0aGlzLmlkLCB0aGlzLl9zdGF0ZSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlY3Rpb25Db250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TZWN0aW9uQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5jb25uZWN0ZWRTZWN0aW9uID0gdGhpcztcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX25hdmlnYXRpb25TZWN0aW9uQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB0aGlzLl9oYW5kbGVOYXZpZ2F0aW9uU2VjdGlvbkZvY3VzKGV2ZW50KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmF2aWdhdGlvbkluZXJ0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZmlyc3RMZXZlbE5hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKFxuICAgICAgdGhpcy5fZmlyc3RMZXZlbE5hdmlnYXRpb24hLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcuc2JiLW5hdmlnYXRpb25fX2NvbnRlbnQnLFxuICAgICAgKSBhcyBIVE1MRWxlbWVudFxuICAgICkuaW5lcnQgPSB0aGlzLl9pc1plcm9Ub0xhcmdlQnJlYWtwb2ludCgpICYmIHRoaXMuX3N0YXRlICE9PSAnY2xvc2VkJztcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLl9zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuZWQnO1xuICAgICAgdGhpcy5pbmVydCA9IGZhbHNlO1xuICAgICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uSW5lcnQoKTtcbiAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25TZWN0aW9uRm9jdXMoKTtcbiAgICAgIHRoaXMuX2NoZWNrQWN0aXZlQWN0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuX3N0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRhaW5lckVsZW1lbnQuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fcmVzZXRMaXN0cygpO1xuICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkluZXJ0KCk7XG4gICAgICBpZiAodGhpcy5faXNaZXJvVG9MYXJnZUJyZWFrcG9pbnQoKSAmJiB0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRMaXN0cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2VjdGlvbi1hY3Rpb25dW2RhdGEtYWN0aW9uLWFjdGl2ZV0nKSxcbiAgICApIGFzIChTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB8IFNiYk5hdmlnYXRpb25MaW5rRWxlbWVudClbXTtcbiAgICBhY3RpdmVBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGFjdGlvbi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uLWFjdGl2ZScpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBuYXZpZ2F0aW9uIHNlY3Rpb24gb24gYWN0aW9uIGNsaWNrIG9yIHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY2xvc2UgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVOYXZpZ2F0aW9uU2VjdGlvbkNsb3NlLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGNsaWNrIHdhcyB0cmlnZ2VyZWQgb24gYW4gZWxlbWVudCB0aGF0IHNob3VsZCBjbG9zZSB0aGUgc2VjdGlvbi5cbiAgcHJpdmF0ZSBfaGFuZGxlTmF2aWdhdGlvblNlY3Rpb25DbG9zZSA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjb21wb3NlZFBhdGhFbGVtZW50cyA9IGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5maWx0ZXIoKGVsKSA9PiBlbCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCk7XG4gICAgaWYgKGNvbXBvc2VkUGF0aEVsZW1lbnRzLnNvbWUoKGVsKSA9PiB0aGlzLl9pc0Nsb3NlRWxlbWVudChlbCBhcyBIVE1MRWxlbWVudCkpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX2lzQ2xvc2VFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVsZW1lbnQubm9kZU5hbWUgPT09ICdBJyB8fFxuICAgICAgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJlxuICAgICAgICAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3NiYi1uYXZpZ2F0aW9uLWNsb3NlJykgfHxcbiAgICAgICAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1jbG9zZScpKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvVG9MYXJnZUJyZWFrcG9pbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQnJlYWtwb2ludCgnemVybycsICdsYXJnZScpID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBuYXZpZ2F0aW9uIG9uIFwiRXNjXCIga2V5IHByZXNzZWQuXG4gIHByaXZhdGUgX29uS2V5ZG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAnb3BlbmVkJyAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0TmF2aWdhdGlvblNlY3Rpb25Gb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZUVsZW1lbnQgPSBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoXG4gICAgICBbdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcjc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1iYWNrLWJ1dHRvbicpXVxuICAgICAgICAuY29uY2F0KEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikpXG4gICAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpLFxuICAgICk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlRWxlbWVudCkge1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZUVsZW1lbnQpO1xuICAgICAgZmlyc3RGb2N1c2FibGVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tBY3RpdmVBY3Rpb24oKTogdm9pZCB7XG4gICAgKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnOmlzKHNiYi1uYXZpZ2F0aW9uLWJ1dHRvbiwgc2JiLW5hdmlnYXRpb24tbGluaykuc2JiLWFjdGl2ZScsXG4gICAgICApIGFzIEhUTUxFbGVtZW50XG4gICAgKT8udG9nZ2xlQXR0cmlidXRlKCdkYXRhLWFjdGlvbi1hY3RpdmUnLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU5hdmlnYXRpb25TZWN0aW9uRm9jdXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnVGFiJyB8fCB0aGlzLl9pc1plcm9Ub0xhcmdlQnJlYWtwb2ludCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHluYW1pY2FsbHkgZ2V0IGZpcnN0IGFuZCBsYXN0IGZvY3VzYWJsZSBlbGVtZW50LCBhcyB0aGlzIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSBvcGVuaW5nIG92ZXJsYXlcbiAgICBjb25zdCBuYXZpZ2F0aW9uQ2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5jbG9zZXN0KCdzYmItbmF2aWdhdGlvbicpIS5zaGFkb3dSb290IS5jaGlsZHJlbixcbiAgICApIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgbmF2aWdhdGlvbkZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMobmF2aWdhdGlvbkNoaWxkcmVuLCB7XG4gICAgICBmaWx0ZXI6IChlbCkgPT4gZWwubm9kZU5hbWUgIT09ICdTQkItTkFWSUdBVElPTi1TRUNUSU9OJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlY3Rpb25DaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290IS5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCBzZWN0aW9uRm9jdXNhYmxlRWxlbWVudHMgPSBnZXRGb2N1c2FibGVFbGVtZW50cyhzZWN0aW9uQ2hpbGRyZW4pO1xuXG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBzZWN0aW9uRm9jdXNhYmxlRWxlbWVudHNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgbGFzdEZvY3VzYWJsZSA9IHNlY3Rpb25Gb2N1c2FibGVFbGVtZW50c1tcbiAgICAgIHNlY3Rpb25Gb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXG4gICAgXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gZXZlbnQuc2hpZnRLZXlcbiAgICAgID8gdGhpcy5fdHJpZ2dlckVsZW1lbnRcbiAgICAgIDogbmF2aWdhdGlvbkZvY3VzYWJsZUVsZW1lbnRzW25hdmlnYXRpb25Gb2N1c2FibGVFbGVtZW50cy5pbmRleE9mKHRoaXMuX3RyaWdnZXJFbGVtZW50ISkgKyAxXTtcbiAgICBjb25zdCBwaXZvdCA9IGV2ZW50LnNoaWZ0S2V5ID8gZmlyc3RGb2N1c2FibGUgOiBsYXN0Rm9jdXNhYmxlO1xuXG4gICAgaWYgKFxuICAgICAgISFlbGVtZW50VG9Gb2N1cyAmJlxuICAgICAgKChmaXJzdEZvY3VzYWJsZS5nZXRSb290Tm9kZSgpIGFzIERvY3VtZW50IHwgU2hhZG93Um9vdCkuYWN0aXZlRWxlbWVudCA9PT0gcGl2b3QgfHxcbiAgICAgICAgKGxhc3RGb2N1c2FibGUuZ2V0Um9vdE5vZGUoKSBhcyBEb2N1bWVudCB8IFNoYWRvd1Jvb3QpLmFjdGl2ZUVsZW1lbnQgPT09IHBpdm90KVxuICAgICkge1xuICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5pZCB8fD0gYHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tJHtuZXh0SWQrK31gO1xuICAgIHRoaXMuX3N0YXRlIHx8PSAnY2xvc2VkJztcbiAgICAvLyBWYWxpZGF0ZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIGF0dGFjaCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgICB0aGlzLl9maXJzdExldmVsTmF2aWdhdGlvbiA9IHRoaXMuX3RyaWdnZXJFbGVtZW50Py5jbG9zZXN0Py4oJ3NiYi1uYXZpZ2F0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2NvbnRhaW5lclwiXG4gICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpID0+ICh0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRhaW5lckVsZW1lbnQgPSBlbCBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICA8bmF2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhldmVudDogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX29uQW5pbWF0aW9uRW5kKGV2ZW50KX1cbiAgICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25cIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT0keyF0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbCA/ICd0aXRsZScgOiBub3RoaW5nfVxuICAgICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbCA/IHRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsIDogbm90aGluZ31cbiAgICAgICAgICAke3JlZihcbiAgICAgICAgICAgIChuYXZpZ2F0aW9uU2VjdGlvblJlZj86IEVsZW1lbnQpID0+XG4gICAgICAgICAgICAgICh0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbiA9IG5hdmlnYXRpb25TZWN0aW9uUmVmIGFzIEhUTUxFbGVtZW50KSxcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbmF2aWdhdGlvbi1zZWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbmF2aWdhdGlvbi1zZWN0aW9uX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEJhY2sgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxzYmItdHJhbnNwYXJlbnQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBpZD1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tYmFjay1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItbmF2aWdhdGlvbi1zZWN0aW9uX19iYWNrXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmFjY2Vzc2liaWxpdHlCYWNrTGFiZWwgfHwgaTE4bkdvQmFja1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGljb24tbmFtZT1cImNoZXZyb24tc21hbGwtbGVmdC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBzYmItbmF2aWdhdGlvbi1zZWN0aW9uLWNsb3NlXG4gICAgICAgICAgICAgICAgPjwvc2JiLXRyYW5zcGFyZW50LWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fdGl0bGVcIiBpZD1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj4ke3RoaXMudGl0bGVDb250ZW50fTwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uYXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItbmF2aWdhdGlvbi1zZWN0aW9uJzogU2JiTmF2aWdhdGlvblNlY3Rpb25FbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBLElBQUksU0FBUztJQWFQLCtCQUEyQixNQUFBOztBQUxoQyxNQUFBLG1CQUFBLENBQUEsY0FBYyx3QkFBd0IsR0FDdEMsZUFBZTtBQUFBLElBQ2QsTUFBTTtBQUFBLEVBQUEsQ0FDUCxHQUNBLFVBQUEsQ0FBVzs7OztvQkFDOEIsd0JBQXdCLFVBQVU7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
633
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZWN0aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXNlY3Rpb24vbmF2aWdhdGlvbi1zZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIExpdEVsZW1lbnQsIG5vdGhpbmcsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQge1xuICBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQsXG4gIGdldEZvY3VzYWJsZUVsZW1lbnRzLFxuICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzLFxufSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhvc3RBdHRyaWJ1dGVzLCBvbWl0RW1wdHlDb252ZXJ0ZXIsIHNsb3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQge1xuICBmaW5kUmVmZXJlbmNlZEVsZW1lbnQsXG4gIGlzQnJlYWtwb2ludCxcbiAgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sXG4gIHNldE9yUmVtb3ZlQXR0cmlidXRlLFxufSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBpMThuR29CYWNrIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxuICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuLi8uLi9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tYnV0dG9uLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiTmF2aWdhdGlvbkxpbmtFbGVtZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1saW5rLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiTmF2aWdhdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vbmF2aWdhdGlvbi1zZWN0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vYnV0dG9uL3RyYW5zcGFyZW50LWJ1dHRvbi5qcyc7XG5pbXBvcnQgJy4uLy4uL2RpdmlkZXIuanMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBJdCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRhaW5lciBmb3IgYHNiYi1uYXZpZ2F0aW9uLWxpc3RgIHdpdGhpbiBhIGBzYmItbmF2aWdhdGlvbmAuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBgc2JiLW5hdmlnYXRpb24tc2VjdGlvbmAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1uYXZpZ2F0aW9uLXNlY3Rpb24nKVxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgc2xvdDogJ25hdmlnYXRpb24tc2VjdGlvbicsXG59KVxuQHNsb3RTdGF0ZSgpXG5jbGFzcyBTYmJOYXZpZ2F0aW9uU2VjdGlvbkVsZW1lbnQgZXh0ZW5kcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbihMaXRFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgdG8gYmUgc2hvd24gYmVmb3JlIHRoZSBhY3Rpb24gbGlzdC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd0aXRsZS1jb250ZW50JywgcmVmbGVjdDogdHJ1ZSwgY29udmVydGVyOiBvbWl0RW1wdHlDb252ZXJ0ZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIHRpdGxlQ29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBuYXZpZ2F0aW9uIHNlY3Rpb24uXG4gICAqIEFjY2VwdHMgYm90aCBhIHN0cmluZyAoaWQgb2YgYW4gZWxlbWVudCkgb3IgYW4gSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB0cmlnZ2VyKHZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3RyaWdnZXI7XG4gICAgdGhpcy5fdHJpZ2dlciA9IHZhbHVlO1xuICAgIHRoaXMuX3JlbW92ZVRyaWdnZXJDbGlja0xpc3RlbmVyKHRoaXMuX3RyaWdnZXIsIG9sZFZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRyaWdnZXIoKTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcjtcbiAgfVxuICBwcml2YXRlIF90cmlnZ2VyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIG5hdiBlbGVtZW50IGFuZCBpcyByZWFkIGFzIGEgdGl0bGUgb2YgdGhlIG5hdmlnYXRpb24tc2VjdGlvbi5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSBiYWNrIGJ1dHRvbiBlbGVtZW50LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktYmFjay1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlCYWNrTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdGhlIG5hdmlnYXRpb24gc2VjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2V0IF9zdGF0ZShzdGF0ZTogU2JiT3BlbmVkQ2xvc2VkU3RhdGUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsIHN0YXRlKTtcbiAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLCAnYXJpYS1oaWRkZW4nLCB0aGlzLl9zdGF0ZSAhPT0gJ29wZW5lZCcgPyAndHJ1ZScgOiBudWxsKTtcbiAgfVxuICBwcml2YXRlIGdldCBfc3RhdGUoKTogU2JiT3BlbmVkQ2xvc2VkU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScpIGFzIFNiYk9wZW5lZENsb3NlZFN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlyc3RMZXZlbE5hdmlnYXRpb24/OiBTYmJOYXZpZ2F0aW9uRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU2VjdGlvbiE6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRhaW5lckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX25hdmlnYXRpb25TZWN0aW9uQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfd2luZG93RXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgbmF2aWdhdGlvbiBzZWN0aW9uIG9uIHRyaWdnZXIgY2xpY2suXG4gICAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnIHx8ICF0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEFjdGl2ZU5hdmlnYXRpb25BY3Rpb24oKTtcbiAgICB0aGlzLl9jbG9zZVByZXZpb3VzTmF2aWdhdGlvblNlY3Rpb24oKTtcbiAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnN0YXJ0VXBkYXRlKCk7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1plcm9BbmltYXRpb25EdXJhdGlvbih0aGlzLCAnLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuaW5lcnQgPSBmYWxzZTtcbiAgICB0aGlzLl9hdHRhY2hXaW5kb3dFdmVudHMoKTtcbiAgICB0aGlzLl9zZXROYXZpZ2F0aW9uSW5lcnQoKTtcbiAgICB0aGlzLl9zZXROYXZpZ2F0aW9uU2VjdGlvbkZvY3VzKCk7XG4gICAgdGhpcy5fY2hlY2tBY3RpdmVBY3Rpb24oKTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlY3Rpb25Db250YWluZXJFbGVtZW50LnNjcm9sbFRvKDAsIDApO1xuICAgIHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fcmVzZXRMaXN0cygpO1xuICAgIHRoaXMuX3NldE5hdmlnYXRpb25JbmVydCgpO1xuICAgIGlmICh0aGlzLl9pc1plcm9Ub0xhcmdlQnJlYWtwb2ludCgpICYmIHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuY29tcGxldGVVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEFjdGl2ZU5hdmlnYXRpb25BY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/Lm1hcmtlcj8uc2VsZWN0KHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlUHJldmlvdXNOYXZpZ2F0aW9uU2VjdGlvbigpOiB2b2lkIHtcbiAgICAodGhpcy5fZmlyc3RMZXZlbE5hdmlnYXRpb24/LmFjdGl2ZU5hdmlnYXRpb25TZWN0aW9uIGFzIFNiYk5hdmlnYXRpb25TZWN0aW9uRWxlbWVudCk/LmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBuYXZpZ2F0aW9uIHNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICB0aGlzLmluZXJ0ID0gdHJ1ZTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZXMgdHJpZ2dlciBjbGljayBsaXN0ZW5lciBvbiB0cmlnZ2VyIGNoYW5nZS5cbiAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIoXG4gICAgbmV3VmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCxcbiAgICBvbGRWYWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsLFxuICApOiB2b2lkIHtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fY29uZmlndXJlKHRoaXMudHJpZ2dlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHRyaWdnZXIgaXMgdmFsaWQgYW5kIGF0dGFjaCBjbGljayBldmVudCBsaXN0ZW5lcnMuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZSh0cmlnZ2VyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcblxuICAgIGlmICghdHJpZ2dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gZmluZFJlZmVyZW5jZWRFbGVtZW50KHRyaWdnZXIpO1xuXG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXModGhpcy5fdHJpZ2dlckVsZW1lbnQsICdtZW51JywgdGhpcy5pZCwgdGhpcy5fc3RhdGUpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TZWN0aW9uQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29ubmVjdGVkU2VjdGlvbiA9IHRoaXM7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLm9wZW4oKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4gdGhpcy5faGFuZGxlTmF2aWdhdGlvblNlY3Rpb25Gb2N1cyhldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fbmF2aWdhdGlvblNlY3Rpb25Db250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE5hdmlnYXRpb25JbmVydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ZpcnN0TGV2ZWxOYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIChcbiAgICAgIHRoaXMuX2ZpcnN0TGV2ZWxOYXZpZ2F0aW9uIS5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnNiYi1uYXZpZ2F0aW9uX19jb250ZW50JyxcbiAgICAgICkgYXMgSFRNTEVsZW1lbnRcbiAgICApLmluZXJ0ID0gdGhpcy5faXNaZXJvVG9MYXJnZUJyZWFrcG9pbnQoKSAmJiB0aGlzLl9zdGF0ZSAhPT0gJ2Nsb3NlZCc7XG4gIH1cblxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5fc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRMaXN0cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2VjdGlvbi1hY3Rpb25dW2RhdGEtYWN0aW9uLWFjdGl2ZV0nKSxcbiAgICApIGFzIChTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB8IFNiYk5hdmlnYXRpb25MaW5rRWxlbWVudClbXTtcbiAgICBhY3RpdmVBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGFjdGlvbi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uLWFjdGl2ZScpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBuYXZpZ2F0aW9uIHNlY3Rpb24gb24gYWN0aW9uIGNsaWNrIG9yIHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY2xvc2UgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVOYXZpZ2F0aW9uU2VjdGlvbkNsb3NlLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGNsaWNrIHdhcyB0cmlnZ2VyZWQgb24gYW4gZWxlbWVudCB0aGF0IHNob3VsZCBjbG9zZSB0aGUgc2VjdGlvbi5cbiAgcHJpdmF0ZSBfaGFuZGxlTmF2aWdhdGlvblNlY3Rpb25DbG9zZSA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjb21wb3NlZFBhdGhFbGVtZW50cyA9IGV2ZW50XG4gICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgIC5maWx0ZXIoKGVsKSA9PiBlbCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCk7XG4gICAgaWYgKGNvbXBvc2VkUGF0aEVsZW1lbnRzLnNvbWUoKGVsKSA9PiB0aGlzLl9pc0Nsb3NlRWxlbWVudChlbCBhcyBIVE1MRWxlbWVudCkpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX2lzQ2xvc2VFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVsZW1lbnQubm9kZU5hbWUgPT09ICdBJyB8fFxuICAgICAgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJlxuICAgICAgICAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3NiYi1uYXZpZ2F0aW9uLWNsb3NlJykgfHxcbiAgICAgICAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1jbG9zZScpKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvVG9MYXJnZUJyZWFrcG9pbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQnJlYWtwb2ludCgnemVybycsICdsYXJnZScpID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBuYXZpZ2F0aW9uIG9uIFwiRXNjXCIga2V5IHByZXNzZWQuXG4gIHByaXZhdGUgX29uS2V5ZG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAnb3BlbmVkJyAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0TmF2aWdhdGlvblNlY3Rpb25Gb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZUVsZW1lbnQgPSBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoXG4gICAgICBbdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcjc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1iYWNrLWJ1dHRvbicpXVxuICAgICAgICAuY29uY2F0KEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikpXG4gICAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpLFxuICAgICk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlRWxlbWVudCkge1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZUVsZW1lbnQpO1xuICAgICAgZmlyc3RGb2N1c2FibGVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tBY3RpdmVBY3Rpb24oKTogdm9pZCB7XG4gICAgKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnOmlzKHNiYi1uYXZpZ2F0aW9uLWJ1dHRvbiwgc2JiLW5hdmlnYXRpb24tbGluaykuc2JiLWFjdGl2ZScsXG4gICAgICApIGFzIEhUTUxFbGVtZW50XG4gICAgKT8udG9nZ2xlQXR0cmlidXRlKCdkYXRhLWFjdGlvbi1hY3RpdmUnLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU5hdmlnYXRpb25TZWN0aW9uRm9jdXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnVGFiJyB8fCB0aGlzLl9pc1plcm9Ub0xhcmdlQnJlYWtwb2ludCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHluYW1pY2FsbHkgZ2V0IGZpcnN0IGFuZCBsYXN0IGZvY3VzYWJsZSBlbGVtZW50LCBhcyB0aGlzIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSBvcGVuaW5nIG92ZXJsYXlcbiAgICBjb25zdCBuYXZpZ2F0aW9uQ2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5jbG9zZXN0KCdzYmItbmF2aWdhdGlvbicpIS5zaGFkb3dSb290IS5jaGlsZHJlbixcbiAgICApIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgbmF2aWdhdGlvbkZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMobmF2aWdhdGlvbkNoaWxkcmVuLCB7XG4gICAgICBmaWx0ZXI6IChlbCkgPT4gZWwubm9kZU5hbWUgIT09ICdTQkItTkFWSUdBVElPTi1TRUNUSU9OJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlY3Rpb25DaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290IS5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCBzZWN0aW9uRm9jdXNhYmxlRWxlbWVudHMgPSBnZXRGb2N1c2FibGVFbGVtZW50cyhzZWN0aW9uQ2hpbGRyZW4pO1xuXG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBzZWN0aW9uRm9jdXNhYmxlRWxlbWVudHNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgbGFzdEZvY3VzYWJsZSA9IHNlY3Rpb25Gb2N1c2FibGVFbGVtZW50c1tcbiAgICAgIHNlY3Rpb25Gb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXG4gICAgXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gZXZlbnQuc2hpZnRLZXlcbiAgICAgID8gdGhpcy5fdHJpZ2dlckVsZW1lbnRcbiAgICAgIDogbmF2aWdhdGlvbkZvY3VzYWJsZUVsZW1lbnRzW25hdmlnYXRpb25Gb2N1c2FibGVFbGVtZW50cy5pbmRleE9mKHRoaXMuX3RyaWdnZXJFbGVtZW50ISkgKyAxXTtcbiAgICBjb25zdCBwaXZvdCA9IGV2ZW50LnNoaWZ0S2V5ID8gZmlyc3RGb2N1c2FibGUgOiBsYXN0Rm9jdXNhYmxlO1xuXG4gICAgaWYgKFxuICAgICAgISFlbGVtZW50VG9Gb2N1cyAmJlxuICAgICAgKChmaXJzdEZvY3VzYWJsZS5nZXRSb290Tm9kZSgpIGFzIERvY3VtZW50IHwgU2hhZG93Um9vdCkuYWN0aXZlRWxlbWVudCA9PT0gcGl2b3QgfHxcbiAgICAgICAgKGxhc3RGb2N1c2FibGUuZ2V0Um9vdE5vZGUoKSBhcyBEb2N1bWVudCB8IFNoYWRvd1Jvb3QpLmFjdGl2ZUVsZW1lbnQgPT09IHBpdm90KVxuICAgICkge1xuICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5pZCB8fD0gYHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tJHtuZXh0SWQrK31gO1xuICAgIHRoaXMuX3N0YXRlIHx8PSAnY2xvc2VkJztcbiAgICAvLyBWYWxpZGF0ZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIGF0dGFjaCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgICB0aGlzLl9maXJzdExldmVsTmF2aWdhdGlvbiA9IHRoaXMuX3RyaWdnZXJFbGVtZW50Py5jbG9zZXN0Py4oJ3NiYi1uYXZpZ2F0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2NvbnRhaW5lclwiXG4gICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpID0+ICh0aGlzLl9uYXZpZ2F0aW9uU2VjdGlvbkNvbnRhaW5lckVsZW1lbnQgPSBlbCBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICA8bmF2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfVxuICAgICAgICAgIGNsYXNzPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PSR7IXRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsID8gJ3RpdGxlJyA6IG5vdGhpbmd9XG4gICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUxhYmVsID8gdGhpcy5hY2Nlc3NpYmlsaXR5TGFiZWwgOiBub3RoaW5nfVxuICAgICAgICAgICR7cmVmKFxuICAgICAgICAgICAgKG5hdmlnYXRpb25TZWN0aW9uUmVmPzogRWxlbWVudCkgPT5cbiAgICAgICAgICAgICAgKHRoaXMuX25hdmlnYXRpb25TZWN0aW9uID0gbmF2aWdhdGlvblNlY3Rpb25SZWYgYXMgSFRNTEVsZW1lbnQpLFxuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQmFjayBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPHNiYi10cmFuc3BhcmVudC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGlkPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbi1iYWNrLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2JhY2tcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUJhY2tMYWJlbCB8fCBpMThuR29CYWNrW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC1sZWZ0LXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY2xvc2VcbiAgICAgICAgICAgICAgICA+PC9zYmItdHJhbnNwYXJlbnQtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItbmF2aWdhdGlvbi1zZWN0aW9uX190aXRsZVwiIGlkPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJ0aXRsZVwiPiR7dGhpcy50aXRsZUNvbnRlbnR9PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25hdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1uYXZpZ2F0aW9uLXNlY3Rpb24nOiBTYmJOYXZpZ2F0aW9uU2VjdGlvbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ0EsSUFBSSxTQUFTO0lBYVAsK0JBQTJCLE1BQUE7O0FBTGhDLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLHdCQUF3QixHQUN0QyxlQUFlO0FBQUEsSUFDZCxNQUFNO0FBQUEsRUFBQSxDQUNQLEdBQ0EsVUFBQSxDQUFXOzs7O29CQUM4Qix3QkFBd0IsVUFBVTs7Ozs7Ozs7Ozs7O0FBQTFDLEVBQUEsbUJBQVEsWUFBbUM7QUFBQTs7QUFRM0U7QUFzQkE7QUFPQTtBQXJDSSx5QkFBQSxpQ0FBQSxrQkFBQSxNQUFBLDBCQUFBLEdBUW1DLGtCQUFBLE1BQUEsNEJBQUEsRUFBRTtBQWVqQyxXQUFRLFlB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
@@ -15,7 +15,7 @@ import { SbbFocusHandler, setModalityOnNextFocus } from "../core/a11y.js";
15
15
  import { SbbOpenCloseBaseElement } from "../core/base-elements.js";
16
16
  import { SbbConnectedAbortController, SbbLanguageController, SbbInertController } from "../core/controllers.js";
17
17
  import { hostAttributes, forceType } from "../core/decorators.js";
18
- import { SbbScrollHandler, findReferencedElement } from "../core/dom.js";
18
+ import { SbbScrollHandler, isZeroAnimationDuration, findReferencedElement } from "../core/dom.js";
19
19
  import { i18nCloseNavigation } from "../core/i18n.js";
20
20
  import { SbbUpdateSchedulerMixin } from "../core/mixins.js";
21
21
  import { isEventOnElement, removeAriaOverlayTriggerAttributes, setAriaOverlayTriggerAttributes } from "../core/overlay.js";
@@ -29,7 +29,7 @@ const style = css`*,
29
29
  :host {
30
30
  --sbb-navigation-grid-column: 1 / 5;
31
31
  --sbb-navigation-animation-duration: var(
32
- --sbb-disable-animation-zero-time,
32
+ --sbb-disable-animation-duration,
33
33
  var(--sbb-animation-duration-3x)
34
34
  );
35
35
  --sbb-navigation-animation-easing: ease-in;
@@ -63,7 +63,7 @@ const style = css`*,
63
63
  :host {
64
64
  --sbb-navigation-grid-column: 1 / 5;
65
65
  --sbb-navigation-animation-duration: var(
66
- --sbb-disable-animation-zero-time,
66
+ --sbb-disable-animation-duration,
67
67
  var(--sbb-animation-duration-6x)
68
68
  );
69
69
  --sbb-navigation-padding-block-start: var(--sbb-spacing-responsive-xl);
@@ -106,8 +106,7 @@ const style = css`*,
106
106
  }
107
107
 
108
108
  :host([data-resize-disable-animation]) {
109
- --sbb-disable-animation-time: 0.1ms;
110
- --sbb-disable-animation-zero-time: 0s;
109
+ --sbb-disable-animation-duration: 0s;
111
110
  }
112
111
 
113
112
  .sbb-navigation__container {
@@ -384,6 +383,9 @@ let SbbNavigationElement = (() => {
384
383
  this.startUpdate();
385
384
  this._scrollHandler.disableScroll();
386
385
  (_a2 = this._triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "true");
386
+ if (this._isZeroAnimationDuration()) {
387
+ this._handleOpening();
388
+ }
387
389
  }
388
390
  _checkActiveSection() {
389
391
  var _a2;
@@ -411,6 +413,37 @@ let SbbNavigationElement = (() => {
411
413
  this.state = "closing";
412
414
  this.startUpdate();
413
415
  (_a2 = this._triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "false");
416
+ if (this._isZeroAnimationDuration()) {
417
+ this._handleClosing();
418
+ }
419
+ }
420
+ _isZeroAnimationDuration() {
421
+ return isZeroAnimationDuration(this, "--sbb-navigation-animation-duration");
422
+ }
423
+ _handleClosing() {
424
+ var _a2, _b;
425
+ this.state = "closed";
426
+ this._navigationContentElement.scrollTo(0, 0);
427
+ setModalityOnNextFocus(this._triggerElement);
428
+ this._inertController.deactivate();
429
+ (_a2 = this._triggerElement) == null ? void 0 : _a2.focus();
430
+ this.didClose.emit();
431
+ this._navigationResizeObserver.unobserve(this);
432
+ this._resetMarkers();
433
+ (_b = this._windowEventsController) == null ? void 0 : _b.abort();
434
+ this._focusHandler.disconnect();
435
+ this._scrollHandler.enableScroll();
436
+ this.completeUpdate();
437
+ }
438
+ _handleOpening() {
439
+ this.state = "opened";
440
+ this.didOpen.emit();
441
+ this._navigationResizeObserver.observe(this);
442
+ this._inertController.activate();
443
+ this._focusHandler.trap(this, { filter: this._trapFocusFilter });
444
+ this._attachWindowEvents();
445
+ this._setNavigationFocus();
446
+ this.completeUpdate();
414
447
  }
415
448
  // Removes trigger click listener on trigger change.
416
449
  _removeTriggerClickListener(newValue, oldValue) {
@@ -442,29 +475,11 @@ let SbbNavigationElement = (() => {
442
475
  // In rare cases it can be that the animationEnd event is triggered twice.
443
476
  // To avoid entering a corrupt state, exit when state is not expected.
444
477
  _onAnimationEnd(event) {
445
- var _a2, _b;
446
478
  if (event.animationName === "open" && this.state === "opening") {
447
- this.state = "opened";
448
- this.didOpen.emit();
449
- this._navigationResizeObserver.observe(this);
450
- this._inertController.activate();
451
- this._focusHandler.trap(this, { filter: this._trapFocusFilter });
452
- this._attachWindowEvents();
453
- this._setNavigationFocus();
479
+ this._handleOpening();
454
480
  } else if (event.animationName === "close" && this.state === "closing") {
455
- this.state = "closed";
456
- this._navigationContentElement.scrollTo(0, 0);
457
- setModalityOnNextFocus(this._triggerElement);
458
- this._inertController.deactivate();
459
- (_a2 = this._triggerElement) == null ? void 0 : _a2.focus();
460
- this.didClose.emit();
461
- this._navigationResizeObserver.unobserve(this);
462
- this._resetMarkers();
463
- (_b = this._windowEventsController) == null ? void 0 : _b.abort();
464
- this._focusHandler.disconnect();
465
- this._scrollHandler.enableScroll();
481
+ this._handleClosing();
466
482
  }
467
- this.completeUpdate();
468
483
  }
469
484
  _resetMarkers() {
470
485
  const activeActions = Array.from(this.querySelectorAll(":is(sbb-navigation-button, sbb-navigation-link)[data-action-active]:not(.sbb-active)"));
@@ -554,7 +569,7 @@ let SbbNavigationElement = (() => {
554
569
  <div class="sbb-navigation__container">
555
570
  <div
556
571
  id="sbb-navigation-overlay"
557
- @animationend=${(event) => this._onAnimationEnd(event)}
572
+ @animationend=${this._onAnimationEnd}
558
573
  class="sbb-navigation"
559
574
  ${ref((navigationRef) => this._navigation = navigationRef)}
560
575
  >
@@ -595,4 +610,4 @@ let SbbNavigationElement = (() => {
595
610
  export {
596
611
  SbbNavigationElement
597
612
  };
598
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL25hdmlnYXRpb24vbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11dGF0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvbXV0YXRpb24tY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzSGFuZGxlciwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQge1xuICBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIsXG4gIFNiYkluZXJ0Q29udHJvbGxlcixcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgZmluZFJlZmVyZW5jZWRFbGVtZW50LCBTYmJTY3JvbGxIYW5kbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgaTE4bkNsb3NlTmF2aWdhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgeyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7XG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1idXR0b24uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJOYXZpZ2F0aW9uTGlua0VsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLWxpbmsuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9uYXZpZ2F0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vYnV0dG9uL3RyYW5zcGFyZW50LWJ1dHRvbi5qcyc7XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB0aGUgYXR0cmlidXRlIHRvIGxvb2sgYXQgaWYgYSBuYXZpZ2F0aW9uIHNlY3Rpb24gaXMgZGlzcGxheWVkICovXG5jb25zdCBuYXZpZ2F0aW9uT2JzZXJ2ZXJDb25maWc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICBzdWJ0cmVlOiB0cnVlLFxuICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGF0YS1zdGF0ZSddLFxufTtcblxubGV0IG5leHRJZCA9IDA7XG5jb25zdCBERUJPVU5DRV9USU1FID0gMTUwO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgbmF2aWdhdGlvbiBtZW51LCB3cmFwcGluZyBvbmUgb3IgbW9yZSBgc2JiLW5hdmlnYXRpb24tKmAgY29tcG9uZW50cy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLW5hdmlnYXRpb24tYnV0dG9uYC9gc2JiLW5hdmlnYXRpb24tbGlua2AgZWxlbWVudHMgaW50byB0aGUgc2JiLW5hdmlnYXRpb24gbWVudS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItbmF2aWdhdGlvbmAgYmVnaW5zIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1uYXZpZ2F0aW9uYCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1uYXZpZ2F0aW9uYCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1uYXZpZ2F0aW9uYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItbmF2aWdhdGlvbi16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1uYXZpZ2F0aW9uJylcbkBob3N0QXR0cmlidXRlcyh7XG4gIHJvbGU6ICduYXZpZ2F0aW9uJyxcbn0pXG5jbGFzcyBTYmJOYXZpZ2F0aW9uRWxlbWVudCBleHRlbmRzIFNiYlVwZGF0ZVNjaGVkdWxlck1peGluKFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdhdGlvbi5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHRyaWdnZXIodmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdHJpZ2dlcjtcbiAgICB0aGlzLl90cmlnZ2VyID0gdmFsdWU7XG4gICAgdGhpcy5fcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIodGhpcy5fdHJpZ2dlciwgb2xkVmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdHJpZ2dlcigpOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90cmlnZ2VyO1xuICB9XG4gIHByaXZhdGUgX3RyaWdnZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgY2xvc2UgYnV0dG9uIGVsZW1lbnQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1jbG9zZS1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlDbG9zZUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogV2hldGhlciBhIG5hdmlnYXRpb24gc2VjdGlvbiBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9hY3RpdmVOYXZpZ2F0aW9uU2VjdGlvbjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgZ2V0IGFjdGl2ZU5hdmlnYXRpb25TZWN0aW9uKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5hdmlnYXRpb25TZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbiE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uQ29udGVudEVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX25hdmlnYXRpb25Db250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF93aW5kb3dFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfaW5lcnRDb250cm9sbGVyID0gbmV3IFNiYkluZXJ0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcml2YXRlIF9zY3JvbGxIYW5kbGVyID0gbmV3IFNiYlNjcm9sbEhhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25OYXZpZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvblJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLl9vbk5hdmlnYXRpb25SZXNpemUoKSxcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBuZXcgTXV0YXRpb25Db250cm9sbGVyKHRoaXMsIHtcbiAgICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgICAgY29uZmlnOiBuYXZpZ2F0aW9uT2JzZXJ2ZXJDb25maWcsXG4gICAgICBjYWxsYmFjazogKG11dGF0aW9uc0xpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHRoaXMuX29uTmF2aWdhdGlvblNlY3Rpb25DaGFuZ2UobXV0YXRpb25zTGlzdCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG5hdmlnYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgfHwgIXRoaXMuX25hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5fY2hlY2tBY3RpdmVBY3Rpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tBY3RpdmVTZWN0aW9uKCk7XG4gICAgdGhpcy5zdGFydFVwZGF0ZSgpO1xuXG4gICAgLy8gRGlzYWJsZSBzY3JvbGxpbmcgZm9yIGNvbnRlbnQgYmVsb3cgdGhlIG5hdmlnYXRpb25cbiAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmRpc2FibGVTY3JvbGwoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQWN0aXZlU2VjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb24gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnc2JiLW5hdmlnYXRpb24tYnV0dG9uLnNiYi1hY3RpdmUnLFxuICAgICkgYXMgU2JiTmF2aWdhdGlvbkJ1dHRvbkVsZW1lbnQ7XG4gICAgYWN0aXZlQWN0aW9uPy5jb25uZWN0ZWRTZWN0aW9uPy5vcGVuKCk7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0FjdGl2ZUFjdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJzppcyhzYmItbmF2aWdhdGlvbi1idXR0b24sIHNiYi1uYXZpZ2F0aW9uLWxpbmspLnNiYi1hY3RpdmUnKSxcbiAgICApIGFzIChTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB8IFNiYk5hdmlnYXRpb25MaW5rRWxlbWVudClbXTtcbiAgICBhY3RpdmVBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGFjdGlvbi5tYXJrZXI/LnNlbGVjdChhY3Rpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG5hdmlnYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcbiAgICB0aGlzLnN0YXJ0VXBkYXRlKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgLy8gUmVtb3ZlcyB0cmlnZ2VyIGNsaWNrIGxpc3RlbmVyIG9uIHRyaWdnZXIgY2hhbmdlLlxuICBwcml2YXRlIF9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcihcbiAgICBuZXdWYWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIG9sZFZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMuX25hdmlnYXRpb25Db250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZSh0aGlzLnRyaWdnZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUodHJpZ2dlcjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgcmVtb3ZlQXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCk7XG5cbiAgICBpZiAoIXRyaWdnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudCh0cmlnZ2VyKTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnbWVudScsIHRoaXMuaWQsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuX25hdmlnYXRpb25Db250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX25hdmlnYXRpb25Db250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fbmF2aWdhdGlvbkNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhcEZvY3VzRmlsdGVyID0gKGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBlbC5ub2RlTmFtZSAhPT0gJ1NCQi1OQVZJR0FUSU9OLVNFQ1RJT04nIHx8IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScpID09PSAnb3BlbmVkJztcbiAgfTtcblxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICAgICAgdGhpcy5fbmF2aWdhdGlvblJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcyk7XG4gICAgICB0aGlzLl9pbmVydENvbnRyb2xsZXIuYWN0aXZhdGUoKTtcbiAgICAgIHRoaXMuX2ZvY3VzSGFuZGxlci50cmFwKHRoaXMsIHsgZmlsdGVyOiB0aGlzLl90cmFwRm9jdXNGaWx0ZXIgfSk7XG4gICAgICB0aGlzLl9hdHRhY2hXaW5kb3dFdmVudHMoKTtcbiAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25Gb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICAgIHRoaXMuX25hdmlnYXRpb25Db250ZW50RWxlbWVudC5zY3JvbGxUbygwLCAwKTtcbiAgICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXModGhpcy5fdHJpZ2dlckVsZW1lbnQpO1xuICAgICAgdGhpcy5faW5lcnRDb250cm9sbGVyLmRlYWN0aXZhdGUoKTtcbiAgICAgIC8vIFRvIGVuYWJsZSBmb2N1c2luZyBvdGhlciBlbGVtZW50IHRoYW4gdGhlIHRyaWdnZXIsIHdlIG5lZWQgdG8gY2FsbCBmb2N1cygpIGEgc2Vjb25kIHRpbWUuXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCgpO1xuICAgICAgdGhpcy5fbmF2aWdhdGlvblJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzKTtcbiAgICAgIHRoaXMuX3Jlc2V0TWFya2VycygpO1xuICAgICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG5cbiAgICAgIC8vIEVuYWJsZSBzY3JvbGxpbmcgZm9yIGNvbnRlbnQgYmVsb3cgdGhlIG5hdmlnYXRpb25cbiAgICAgIHRoaXMuX3Njcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gICAgfVxuICAgIHRoaXMuY29tcGxldGVVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0TWFya2VycygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJzppcyhzYmItbmF2aWdhdGlvbi1idXR0b24sIHNiYi1uYXZpZ2F0aW9uLWxpbmspW2RhdGEtYWN0aW9uLWFjdGl2ZV06bm90KC5zYmItYWN0aXZlKScsXG4gICAgICApLFxuICAgICkgYXMgKFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHwgU2JiTmF2aWdhdGlvbkxpbmtFbGVtZW50KVtdO1xuICAgIGFjdGl2ZUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gYWN0aW9uLm1hcmtlcj8ucmVzZXQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fb25LZXlkb3duRXZlbnQoZXZlbnQpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlTmF2aWdhdGlvbkNsb3NlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvc2VkUGF0aEVsZW1lbnRzID0gZXZlbnRcbiAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgLmZpbHRlcigoZWwpID0+IGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KTtcbiAgICBpZiAoY29tcG9zZWRQYXRoRWxlbWVudHMuc29tZSgoZWwpID0+IHRoaXMuX2lzQ2xvc2VFbGVtZW50KGVsIGFzIEhUTUxFbGVtZW50KSkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0Nsb3NlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlbGVtZW50Lm5vZGVOYW1lID09PSAnQScgfHxcbiAgICAgIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2JiLW5hdmlnYXRpb24tY2xvc2UnKSAmJiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENsb3NlcyB0aGUgbmF2aWdhdGlvbiBvbiBcIkVzY1wiIGtleSBwcmVzc2VkLlxuICBwcml2YXRlIF9vbktleWRvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0TmF2aWdhdGlvbkZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKFxuICAgICAgJyNzYmItbmF2aWdhdGlvbi1jbG9zZS1idXR0b24nLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhjbG9zZUJ1dHRvbik7XG4gICAgY2xvc2VCdXR0b24uZm9jdXMoKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBuYXZpZ2F0aW9uLlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk5hdmlnYXRpb24gPVxuICAgICAgaXNFdmVudE9uRWxlbWVudCh0aGlzLl9uYXZpZ2F0aW9uLCBldmVudCkgfHxcbiAgICAgIGlzRXZlbnRPbkVsZW1lbnQoXG4gICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnc2JiLW5hdmlnYXRpb24tc2VjdGlvbltkYXRhLXN0YXRlPVwib3BlbmVkXCJdJyxcbiAgICAgICAgKT8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcignbmF2LnNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24nKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgZXZlbnQsXG4gICAgICApO1xuICB9O1xuXG4gIC8vIENsb3NlIG5hdmlnYXRpb24gb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTmF2aWdhdGlvbiAmJiAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9uYXZpZ2F0aW9uLCBldmVudCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gT2JzZXJ2ZSBjaGFuZ2VzIG9uIG5hdmlnYXRpb24gc2VjdGlvbiBkYXRhLXN0YXRlLlxuICBwcml2YXRlIF9vbk5hdmlnYXRpb25TZWN0aW9uQ2hhbmdlKG11dGF0aW9uc0xpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgIGlmICgobXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5ub2RlTmFtZSA9PT0gJ1NCQi1OQVZJR0FUSU9OLVNFQ1RJT04nKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZU5hdmlnYXRpb25TZWN0aW9uID0gdGhpcy5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICdzYmItbmF2aWdhdGlvbi1zZWN0aW9uW2RhdGEtc3RhdGU9XCJvcGVuaW5nXCJdLCBzYmItbmF2aWdhdGlvbi1zZWN0aW9uW2RhdGEtc3RhdGU9XCJvcGVuZWRcIl0nLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1oYXMtbmF2aWdhdGlvbi1zZWN0aW9uJywgISF0aGlzLl9hY3RpdmVOYXZpZ2F0aW9uU2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25OYXZpZ2F0aW9uUmVzaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXJlc2l6ZS1kaXNhYmxlLWFuaW1hdGlvbicsIHRydWUpO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzaXppbmcgdGhlIG5hdmlnYXRpb24gdG8gYXZvaWQgc3RyYW5nZSBoZWlnaHQgdHJhbnNpdGlvbiBlZmZlY3RzLlxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyVGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1yZXNpemUtZGlzYWJsZS1hbmltYXRpb24nKSxcbiAgICAgIERFQk9VTkNFX1RJTUUsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuaWQgfHw9IGBzYmItbmF2aWdhdGlvbi0ke25leHRJZCsrfWA7XG4gICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fYWJvcnQuc2lnbmFsO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gdGhpcy5faGFuZGxlTmF2aWdhdGlvbkNsb3NlKGUpLCB7IHNpZ25hbCB9KTtcbiAgICAvLyBWYWxpZGF0ZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIGF0dGFjaCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldmVudCkgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXZlbnQpLCB7IHNpZ25hbCB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2ZW50KSwgeyBzaWduYWwgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gaHRtbGBcbiAgICAgIDxzYmItdHJhbnNwYXJlbnQtYnV0dG9uXG4gICAgICAgIGlkPVwic2JiLW5hdmlnYXRpb24tY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzYmItbmF2aWdhdGlvbl9fY2xvc2VcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbCB8fCBpMThuQ2xvc2VOYXZpZ2F0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICBhcmlhLWNvbnRyb2xzPVwic2JiLW5hdmlnYXRpb24tb3ZlcmxheVwiXG4gICAgICAgIG5lZ2F0aXZlXG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb24tbmFtZT1cImNyb3NzLXNtYWxsXCJcbiAgICAgICAgc2JiLW5hdmlnYXRpb24tY2xvc2VcbiAgICAgID48L3NiYi10cmFuc3BhcmVudC1idXR0b24+XG4gICAgYDtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwic2JiLW5hdmlnYXRpb24tb3ZlcmxheVwiXG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhldmVudDogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX29uQW5pbWF0aW9uRW5kKGV2ZW50KX1cbiAgICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAke3JlZigobmF2aWdhdGlvblJlZj86IEVsZW1lbnQpID0+ICh0aGlzLl9uYXZpZ2F0aW9uID0gbmF2aWdhdGlvblJlZiBhcyBIVE1MRGl2RWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uX19oZWFkZXJcIj4ke2Nsb3NlQnV0dG9ufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbmF2aWdhdGlvbl9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uX19jb250ZW50XCJcbiAgICAgICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCkgPT4gKHRoaXMuX25hdmlnYXRpb25Db250ZW50RWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNsb3QgbmFtZT1cIm5hdmlnYXRpb24tc2VjdGlvblwiPjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1uYXZpZ2F0aW9uJzogU2JiTmF2aWdhdGlvbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCQSxNQUFNLDJCQUFpRDtBQUFBLEVBQ3JELFNBQVM7QUFBQSxFQUNULGlCQUFpQixDQUFDLFlBQVk7O0FBR2hDLElBQUksU0FBUztBQUNiLE1BQU0sZ0JBQWdCO0lBbUJoQix3QkFBb0IsTUFBQTs7QUFKekIsTUFBQSxtQkFBQSxDQUFBLGNBQWMsZ0JBQWdCLEdBQzlCLGVBQWU7QUFBQSxJQUNkLE1BQU07QUFBQSxFQUFBLENBQ1AsQ0FBQzs7OztvQkFDaUMsd0JBQXdCLHVCQUF1Qjs7Ozs7Ozs7O0FBQXZELEVBQUEsbUJBQVEsWUFBZ0Q7QUFBQSxJQW1EakYsY0FBQTs7QUE1QkE7QUFLUztBQVpELFdBQUEsWUFoQkosa0JBQUEsTUFBQSwwQkFBQSxHQWdCNEM7QUFPaEMseUJBQUEsMkNBQUEsa0JBQUEsTUFBQSx1Q0FBa0MsRUFBRTtBQUsxQix5QkFBQSw2Q0FBQSxrQkFBQSxNQUFBLDBDQUFBLEdBQUEsa0JBQUEsTUFBQSx3Q0FBK0Ms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
613
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL25hdmlnYXRpb24vbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11dGF0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvbXV0YXRpb24tY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzSGFuZGxlciwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQge1xuICBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIsXG4gIFNiYkluZXJ0Q29udHJvbGxlcixcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHtcbiAgZmluZFJlZmVyZW5jZWRFbGVtZW50LFxuICBpc1plcm9BbmltYXRpb25EdXJhdGlvbixcbiAgU2JiU2Nyb2xsSGFuZGxlcixcbn0gZnJvbSAnLi4vLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgaTE4bkNsb3NlTmF2aWdhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgeyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7XG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1idXR0b24uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJOYXZpZ2F0aW9uTGlua0VsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLWxpbmsuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9uYXZpZ2F0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vYnV0dG9uL3RyYW5zcGFyZW50LWJ1dHRvbi5qcyc7XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB0aGUgYXR0cmlidXRlIHRvIGxvb2sgYXQgaWYgYSBuYXZpZ2F0aW9uIHNlY3Rpb24gaXMgZGlzcGxheWVkICovXG5jb25zdCBuYXZpZ2F0aW9uT2JzZXJ2ZXJDb25maWc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICBzdWJ0cmVlOiB0cnVlLFxuICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGF0YS1zdGF0ZSddLFxufTtcblxubGV0IG5leHRJZCA9IDA7XG5jb25zdCBERUJPVU5DRV9USU1FID0gMTUwO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgbmF2aWdhdGlvbiBtZW51LCB3cmFwcGluZyBvbmUgb3IgbW9yZSBgc2JiLW5hdmlnYXRpb24tKmAgY29tcG9uZW50cy5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLW5hdmlnYXRpb24tYnV0dG9uYC9gc2JiLW5hdmlnYXRpb24tbGlua2AgZWxlbWVudHMgaW50byB0aGUgc2JiLW5hdmlnYXRpb24gbWVudS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItbmF2aWdhdGlvbmAgYmVnaW5zIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1uYXZpZ2F0aW9uYCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1uYXZpZ2F0aW9uYCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1uYXZpZ2F0aW9uYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItbmF2aWdhdGlvbi16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1uYXZpZ2F0aW9uJylcbkBob3N0QXR0cmlidXRlcyh7XG4gIHJvbGU6ICduYXZpZ2F0aW9uJyxcbn0pXG5jbGFzcyBTYmJOYXZpZ2F0aW9uRWxlbWVudCBleHRlbmRzIFNiYlVwZGF0ZVNjaGVkdWxlck1peGluKFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdhdGlvbi5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHRyaWdnZXIodmFsdWU6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdHJpZ2dlcjtcbiAgICB0aGlzLl90cmlnZ2VyID0gdmFsdWU7XG4gICAgdGhpcy5fcmVtb3ZlVHJpZ2dlckNsaWNrTGlzdGVuZXIodGhpcy5fdHJpZ2dlciwgb2xkVmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdHJpZ2dlcigpOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90cmlnZ2VyO1xuICB9XG4gIHByaXZhdGUgX3RyaWdnZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgY2xvc2UgYnV0dG9uIGVsZW1lbnQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1jbG9zZS1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlDbG9zZUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogV2hldGhlciBhIG5hdmlnYXRpb24gc2VjdGlvbiBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9hY3RpdmVOYXZpZ2F0aW9uU2VjdGlvbjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgZ2V0IGFjdGl2ZU5hdmlnYXRpb25TZWN0aW9uKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5hdmlnYXRpb25TZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbiE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uQ29udGVudEVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX25hdmlnYXRpb25Db250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF93aW5kb3dFdmVudHNDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9hYm9ydCA9IG5ldyBTYmJDb25uZWN0ZWRBYm9ydENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfaW5lcnRDb250cm9sbGVyID0gbmV3IFNiYkluZXJ0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcml2YXRlIF9zY3JvbGxIYW5kbGVyID0gbmV3IFNiYlNjcm9sbEhhbmRsZXIoKTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25OYXZpZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvblJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLl9vbk5hdmlnYXRpb25SZXNpemUoKSxcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBuZXcgTXV0YXRpb25Db250cm9sbGVyKHRoaXMsIHtcbiAgICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgICAgY29uZmlnOiBuYXZpZ2F0aW9uT2JzZXJ2ZXJDb25maWcsXG4gICAgICBjYWxsYmFjazogKG11dGF0aW9uc0xpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHRoaXMuX29uTmF2aWdhdGlvblNlY3Rpb25DaGFuZ2UobXV0YXRpb25zTGlzdCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG5hdmlnYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgfHwgIXRoaXMuX25hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5fY2hlY2tBY3RpdmVBY3Rpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tBY3RpdmVTZWN0aW9uKCk7XG4gICAgdGhpcy5zdGFydFVwZGF0ZSgpO1xuXG4gICAgLy8gRGlzYWJsZSBzY3JvbGxpbmcgZm9yIGNvbnRlbnQgYmVsb3cgdGhlIG5hdmlnYXRpb25cbiAgICB0aGlzLl9zY3JvbGxIYW5kbGVyLmRpc2FibGVTY3JvbGwoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tBY3RpdmVTZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUFjdGlvbiA9IHRoaXMucXVlcnlTZWxlY3RvcihcbiAgICAgICdzYmItbmF2aWdhdGlvbi1idXR0b24uc2JiLWFjdGl2ZScsXG4gICAgKSBhcyBTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudDtcbiAgICBhY3RpdmVBY3Rpb24/LmNvbm5lY3RlZFNlY3Rpb24/Lm9wZW4oKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQWN0aXZlQWN0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnOmlzKHNiYi1uYXZpZ2F0aW9uLWJ1dHRvbiwgc2JiLW5hdmlnYXRpb24tbGluaykuc2JiLWFjdGl2ZScpLFxuICAgICkgYXMgKFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHwgU2JiTmF2aWdhdGlvbkxpbmtFbGVtZW50KVtdO1xuICAgIGFjdGl2ZUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gYWN0aW9uLm1hcmtlcj8uc2VsZWN0KGFjdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbmF2aWdhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbENsb3NlLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1plcm9BbmltYXRpb25EdXJhdGlvbih0aGlzLCAnLS1zYmItbmF2aWdhdGlvbi1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuX25hdmlnYXRpb25Db250ZW50RWxlbWVudC5zY3JvbGxUbygwLCAwKTtcbiAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICB0aGlzLl9pbmVydENvbnRyb2xsZXIuZGVhY3RpdmF0ZSgpO1xuICAgIC8vIFRvIGVuYWJsZSBmb2N1c2luZyBvdGhlciBlbGVtZW50IHRoYW4gdGhlIHRyaWdnZXIsIHdlIG5lZWQgdG8gY2FsbCBmb2N1cygpIGEgc2Vjb25kIHRpbWUuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KCk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzKTtcbiAgICB0aGlzLl9yZXNldE1hcmtlcnMoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG5cbiAgICAvLyBFbmFibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBuYXZpZ2F0aW9uXG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICAgIHRoaXMuX25hdmlnYXRpb25SZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xuICAgIHRoaXMuX2luZXJ0Q29udHJvbGxlci5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci50cmFwKHRoaXMsIHsgZmlsdGVyOiB0aGlzLl90cmFwRm9jdXNGaWx0ZXIgfSk7XG4gICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgdGhpcy5fc2V0TmF2aWdhdGlvbkZvY3VzKCk7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZSgpO1xuICB9XG5cbiAgLy8gUmVtb3ZlcyB0cmlnZ2VyIGNsaWNrIGxpc3RlbmVyIG9uIHRyaWdnZXIgY2hhbmdlLlxuICBwcml2YXRlIF9yZW1vdmVUcmlnZ2VyQ2xpY2tMaXN0ZW5lcihcbiAgICBuZXdWYWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIG9sZFZhbHVlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMuX25hdmlnYXRpb25Db250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZSh0aGlzLnRyaWdnZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmUodHJpZ2dlcjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgcmVtb3ZlQXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCk7XG5cbiAgICBpZiAoIXRyaWdnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IGZpbmRSZWZlcmVuY2VkRWxlbWVudCh0cmlnZ2VyKTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnbWVudScsIHRoaXMuaWQsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuX25hdmlnYXRpb25Db250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX25hdmlnYXRpb25Db250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5vcGVuKCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fbmF2aWdhdGlvbkNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhcEZvY3VzRmlsdGVyID0gKGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBlbC5ub2RlTmFtZSAhPT0gJ1NCQi1OQVZJR0FUSU9OLVNFQ1RJT04nIHx8IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScpID09PSAnb3BlbmVkJztcbiAgfTtcblxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0TWFya2VycygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJzppcyhzYmItbmF2aWdhdGlvbi1idXR0b24sIHNiYi1uYXZpZ2F0aW9uLWxpbmspW2RhdGEtYWN0aW9uLWFjdGl2ZV06bm90KC5zYmItYWN0aXZlKScsXG4gICAgICApLFxuICAgICkgYXMgKFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHwgU2JiTmF2aWdhdGlvbkxpbmtFbGVtZW50KVtdO1xuICAgIGFjdGl2ZUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gYWN0aW9uLm1hcmtlcj8ucmVzZXQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fb25LZXlkb3duRXZlbnQoZXZlbnQpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlTmF2aWdhdGlvbkNsb3NlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvc2VkUGF0aEVsZW1lbnRzID0gZXZlbnRcbiAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgLmZpbHRlcigoZWwpID0+IGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KTtcbiAgICBpZiAoY29tcG9zZWRQYXRoRWxlbWVudHMuc29tZSgoZWwpID0+IHRoaXMuX2lzQ2xvc2VFbGVtZW50KGVsIGFzIEhUTUxFbGVtZW50KSkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0Nsb3NlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlbGVtZW50Lm5vZGVOYW1lID09PSAnQScgfHxcbiAgICAgIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2JiLW5hdmlnYXRpb24tY2xvc2UnKSAmJiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENsb3NlcyB0aGUgbmF2aWdhdGlvbiBvbiBcIkVzY1wiIGtleSBwcmVzc2VkLlxuICBwcml2YXRlIF9vbktleWRvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0TmF2aWdhdGlvbkZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKFxuICAgICAgJyNzYmItbmF2aWdhdGlvbi1jbG9zZS1idXR0b24nLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhjbG9zZUJ1dHRvbik7XG4gICAgY2xvc2VCdXR0b24uZm9jdXMoKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBuYXZpZ2F0aW9uLlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk5hdmlnYXRpb24gPVxuICAgICAgaXNFdmVudE9uRWxlbWVudCh0aGlzLl9uYXZpZ2F0aW9uLCBldmVudCkgfHxcbiAgICAgIGlzRXZlbnRPbkVsZW1lbnQoXG4gICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnc2JiLW5hdmlnYXRpb24tc2VjdGlvbltkYXRhLXN0YXRlPVwib3BlbmVkXCJdJyxcbiAgICAgICAgKT8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcignbmF2LnNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24nKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgZXZlbnQsXG4gICAgICApO1xuICB9O1xuXG4gIC8vIENsb3NlIG5hdmlnYXRpb24gb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTmF2aWdhdGlvbiAmJiAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9uYXZpZ2F0aW9uLCBldmVudCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gT2JzZXJ2ZSBjaGFuZ2VzIG9uIG5hdmlnYXRpb24gc2VjdGlvbiBkYXRhLXN0YXRlLlxuICBwcml2YXRlIF9vbk5hdmlnYXRpb25TZWN0aW9uQ2hhbmdlKG11dGF0aW9uc0xpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgIGlmICgobXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5ub2RlTmFtZSA9PT0gJ1NCQi1OQVZJR0FUSU9OLVNFQ1RJT04nKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZU5hdmlnYXRpb25TZWN0aW9uID0gdGhpcy5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICdzYmItbmF2aWdhdGlvbi1zZWN0aW9uW2RhdGEtc3RhdGU9XCJvcGVuaW5nXCJdLCBzYmItbmF2aWdhdGlvbi1zZWN0aW9uW2RhdGEtc3RhdGU9XCJvcGVuZWRcIl0nLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1oYXMtbmF2aWdhdGlvbi1zZWN0aW9uJywgISF0aGlzLl9hY3RpdmVOYXZpZ2F0aW9uU2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25OYXZpZ2F0aW9uUmVzaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXJlc2l6ZS1kaXNhYmxlLWFuaW1hdGlvbicsIHRydWUpO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzaXppbmcgdGhlIG5hdmlnYXRpb24gdG8gYXZvaWQgc3RyYW5nZSBoZWlnaHQgdHJhbnNpdGlvbiBlZmZlY3RzLlxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyVGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1yZXNpemUtZGlzYWJsZS1hbmltYXRpb24nKSxcbiAgICAgIERFQk9VTkNFX1RJTUUsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuaWQgfHw9IGBzYmItbmF2aWdhdGlvbi0ke25leHRJZCsrfWA7XG4gICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fYWJvcnQuc2lnbmFsO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gdGhpcy5faGFuZGxlTmF2aWdhdGlvbkNsb3NlKGUpLCB7IHNpZ25hbCB9KTtcbiAgICAvLyBWYWxpZGF0ZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIGF0dGFjaCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9jb25maWd1cmUodGhpcy50cmlnZ2VyKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldmVudCkgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXZlbnQpLCB7IHNpZ25hbCB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2ZW50KSwgeyBzaWduYWwgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5fc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gaHRtbGBcbiAgICAgIDxzYmItdHJhbnNwYXJlbnQtYnV0dG9uXG4gICAgICAgIGlkPVwic2JiLW5hdmlnYXRpb24tY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzYmItbmF2aWdhdGlvbl9fY2xvc2VcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbCB8fCBpMThuQ2xvc2VOYXZpZ2F0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICBhcmlhLWNvbnRyb2xzPVwic2JiLW5hdmlnYXRpb24tb3ZlcmxheVwiXG4gICAgICAgIG5lZ2F0aXZlXG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb24tbmFtZT1cImNyb3NzLXNtYWxsXCJcbiAgICAgICAgc2JiLW5hdmlnYXRpb24tY2xvc2VcbiAgICAgID48L3NiYi10cmFuc3BhcmVudC1idXR0b24+XG4gICAgYDtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwic2JiLW5hdmlnYXRpb24tb3ZlcmxheVwiXG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfVxuICAgICAgICAgIGNsYXNzPVwic2JiLW5hdmlnYXRpb25cIlxuICAgICAgICAgICR7cmVmKChuYXZpZ2F0aW9uUmVmPzogRWxlbWVudCkgPT4gKHRoaXMuX25hdmlnYXRpb24gPSBuYXZpZ2F0aW9uUmVmIGFzIEhUTUxEaXZFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW5hdmlnYXRpb25fX2hlYWRlclwiPiR7Y2xvc2VCdXR0b259PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uX193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLW5hdmlnYXRpb25fX2NvbnRlbnRcIlxuICAgICAgICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KSA9PiAodGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbGVtZW50ID0gZWwgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2xvdCBuYW1lPVwibmF2aWdhdGlvbi1zZWN0aW9uXCI+PC9zbG90PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLW5hdmlnYXRpb24nOiBTYmJOYXZpZ2F0aW9uRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ0EsTUFBTSwyQkFBaUQ7QUFBQSxFQUNyRCxTQUFTO0FBQUEsRUFDVCxpQkFBaUIsQ0FBQyxZQUFZOztBQUdoQyxJQUFJLFNBQVM7QUFDYixNQUFNLGdCQUFnQjtJQW1CaEIsd0JBQW9CLE1BQUE7O0FBSnpCLE1BQUEsbUJBQUEsQ0FBQSxjQUFjLGdCQUFnQixHQUM5QixlQUFlO0FBQUEsSUFDZCxNQUFNO0FBQUEsRUFBQSxDQUNQLENBQUM7Ozs7b0JBQ2lDLHdCQUF3Qix1QkFBdUI7Ozs7Ozs7OztBQUF2RCxFQUFBLG1CQUFRLFlBQWdEO0FBQUEsSUFtRGpGLGNBQUE7O0FBNUJBO0FBS1M7QUFaRCxXQUFBLFlBaEJKLGtCQUFBLE1BQUEsMEJBQUEsR0FnQjRDO0FBT2hDLHlCQUFBLDJDQUFBLGtCQUFBLE1BQUEsdUNBQWtDLEVBQUU7QUFLMUIseUJBQUEsNkNBQUEsa0JBQUEsTUFBQSwwQ0FBQSxHQUFBLGtCQUFBLE1BQUEsd0NBQStDLElBQUk7QUFNckUsV0FBQSxjQUE2QixrQkFBQSxNQUFBLDJDQUFBO0FBRTdCLFdBQWUsa0JBQXVCO0FBR3RDLFdBQUEsU0FBUyxJQUFJLDRCQUE0QixJQUFJO0FBQzdDLFdBQUEsWUFBWSxJQUFJLHNCQUFzQixJQUFJO0FBQzFDLFdBQUEsbUJBQW1CLElBQUksbUJBQW1CLElBQUk7QUFDOUMsV0FBQSxnQkFBZ0IsSUFBSSxnQkFBZTtBQUNuQyxXQUFBLGlCQUFpQixJQUFJLGlCQUFnQjtBQUNyQyxXQUErQixrQ0FBWTtBQUMzQyxXQUFzQix5QkFBeUM7QUFDL0QsV0FBQSw0QkFBNEIsSUFBSSxpQkFBaUIsTUFBTTtBQUFBLFFBQzdELGFBQWE7QUFBQSxRQUNiLFVBQVUsTUFBTSxLQUFLLG9CQUFxQjtBQUFBLE1BQUEsQ0FDM0M7QUE4SU8sV0FBQSxtQkFBbUIsQ0FBQyxPQUE0QjtBQUN0RCxlQUFPLEdBQUcsYUFBYSw0QkFBNEIsR0FBRyxhQUFhLFlBQVksTUFBTTtBQUFBLE1BQ3ZGO0FBNkRRLFdBQUEsdUJBQXVCLENBQUMsVUFBNkI7O0FBQzNELGFBQUssa0NBQ0gsaUJBQWlCLEtBQUssYUFBYSxLQUFLLEtBQ3hDLGtCQUNFLE1BQUFBLE1BQUEsS0FBSyxjQUNILDZDQUE2QyxNQUQvQyxnQkFBQUEsSUFFRyxlQUZILG1CQUVlLGNBQWMsK0JBQzdCLEtBQUs7QUFBQSxNQUVYO0FBR1EsV0FBQSx3QkFBd0IsQ0FBQyxVQUE2QjtBQUN4RCxZQUFBLENBQUMsS0FBSyxtQ0FBbUMsQ0FBQyxpQkFBaUIsS0FBSyxhQUFhLEtBQUssR0FBRztBQUN2RixlQUFLLE1BQUs7QUFBQSxRQUFBO0FBQUEsTUFFZDtBQXhORSxVQUFJLG1CQUFtQixNQUFNO0FBQUEsUUFDM0IsYUFBYTtBQUFBLFFBQ2IsUUFBUTtBQUFBLFFBQ1IsVUFBVSxDQUFDLGtCQUFvQyxLQUFLLDJCQUEyQixhQUFhO0FBQUEsTUFBQSxDQUM3RjtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBbERILElBQVcsUUFBUSxPQUFrQztBQUNuRCxZQUFNLFdBQVcsS0FBSztBQUN0QixXQUFLLFdBQVc7QUFDWCxXQUFBLDRCQUE0QixLQUFLLFVBQVUsUUFBUTtBQUFBLElBQUE7QUFBQSxJQUUxRCxJQUFXLFVBQU87QUFDaEIsYUFBTyxLQUFLO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU2QsSUFBZ0IsMEJBQXFDO0FBQUEsYUFBQSxtQkFBQTtBQUFBLElBQUE7QUFBQSxJQUFyRCxJQUFnQix3QkFBcUMsT0FBQTtBQUFBLHlCQUFBLDJDQUFBO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVDLElBQWlCLDJCQUFvRDtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFBO0FBQUEsSUFBckUsSUFBaUIseUJBQW9ELE9BQUE7QUFBQSx5QkFBQSw0Q0FBQTtBQUFBLElBQUE7QUFBQSxJQUU5RSxJQUFXLDBCQUF1QjtBQUNoQyxhQUFPLEtBQUs7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFpQ1AsT0FBSTs7QUFDVCxVQUFJLEtBQUssVUFBVSxZQUFZLENBQUMsS0FBSyxhQUFhO0FBQ2hEO0FBQUEsTUFBQTtBQUdGLFVBQUksQ0FBQyxLQUFLLFNBQVMsUUFBUTtBQUN6QjtBQUFBLE1BQUE7QUFFRixXQUFLLFFBQVE7QUFDYixXQUFLLG9CQUFtQjtBQUN4QixXQUFLLG9CQUFtQjtBQUN4QixXQUFLLFlBQVc7QUFHaEIsV0FBSyxlQUFlO0FBQ2YsT0FBQUEsTUFBQSxLQUFBLG9CQUFBLGdCQUFBQSxJQUFpQixhQUFhLGlCQUFpQjtBQUloRCxVQUFBLEtBQUssNEJBQTRCO0FBQ25DLGFBQUssZUFBYztBQUFBLE1BQUE7QUFBQSxJQUNyQjtBQUFBLElBR00sc0JBQW1COztBQUNuQixZQUFBLGVBQWUsS0FBSyxjQUN4QixrQ0FBa0M7QUFFcEMsT0FBQUEsTUFBQSw2Q0FBYyxxQkFBZCxnQkFBQUEsSUFBZ0M7QUFBQTtJQUcxQixzQkFBbUI7QUFDekIsWUFBTSxnQkFBZ0IsTUFBTSxLQUMxQixLQUFLLGlCQUFpQiw0REFBNEQsQ0FBQztBQUVyRixxREFBZSxRQUFRLENBQUMsV0FBQTs7QUFBVyxnQkFBQUEsTUFBQSxPQUFPLFdBQVAsZ0JBQUFBLElBQWUsT0FBTztBQUFBO0FBQUEsSUFBTztBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTNELFFBQUs7O0FBQ04sVUFBQSxLQUFLLFVBQVUsVUFBVTtBQUMzQjtBQUFBLE1BQUE7QUFHRixVQUFJLENBQUMsS0FBSyxVQUFVLFFBQVE7QUFDMUI7QUFBQSxNQUFBO0FBRUYsV0FBSyxRQUFRO0FBQ2IsV0FBSyxZQUFXO0FBQ1gsT0FBQUEsTUFBQSxLQUFBLG9CQUFBLGdCQUFBQSxJQUFpQixhQUFhLGlCQUFpQjtBQUloRCxVQUFBLEtBQUssNEJBQTRCO0FBQ25DLGFBQUssZUFBYztBQUFBLE1BQUE7QUFBQSxJQUNyQjtBQUFBLElBR00sMkJBQXdCO0FBQ3ZCLGFBQUEsd0JBQXdCLE1BQU0scUNBQXFDO0FBQUEsSUFBQTtBQUFBLElBR3BFLGlCQUFjOztBQUNwQixXQUFLLFFBQVE7QUFDUixXQUFBLDBCQUEwQixTQUFTLEdBQUcsQ0FBQztBQUM1Qyw2QkFBdUIsS0FBSyxlQUFlO0FBQzNDLFdBQUssaUJBQWlCO0FBRXRCLE9BQUFBLE1BQUEsS0FBSyxvQkFBTCxnQkFBQUEsSUFBc0I7QUFDdEIsV0FBSyxTQUFTO0FBQ1QsV0FBQSwwQkFBMEIsVUFBVSxJQUFJO0FBQzdDLFdBQUssY0FBYTtBQUNsQixpQkFBSyw0QkFBTCxtQkFBOEI7QUFDOUIsV0FBSyxjQUFjO0FBR25CLFdBQUssZUFBZTtBQUNwQixXQUFLLGVBQWM7QUFBQSxJQUFBO0FBQUEsSUFHYixpQkFBYztBQUNwQixXQUFLLFFBQVE7QUFDYixXQUFLLFFBQVE7QUFDUixXQUFBLDBCQUEwQixRQUFRLElBQUk7QUFDM0MsV0FBSyxpQkFBaUI7QUFDdEIsV0FBSyxjQUFjLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxrQkFBa0I7QUFDL0QsV0FBSyxvQkFBbUI7QUFDeEIsV0FBSyxvQkFBbUI7QUFDeEIsV0FBSyxlQUFjO0FBQUEsSUFBQTtBQUFBO0FBQUEsSUFJYiw0QkFDTixVQUNBLFVBQXFDOztBQUVyQyxVQUFJLGFBQWEsVUFBVTtBQUN6QixTQUFBQSxNQUFBLEtBQUssMEJBQUwsZ0JBQUFBLElBQTRCO0FBQzVCLG1CQUFLLDRCQUFMLG1CQUE4QjtBQUN6QixhQUFBLFdBQVcsS0FBSyxPQUFPO0FBQUEsTUFBQTtBQUFBLElBQzlCO0FBQUE7QUFBQSxJQUlNLFdBQVcsU0FBb0M7O0FBQ3JELHlDQUFtQyxLQUFLLGVBQWU7QUFFdkQsVUFBSSxDQUFDLFNBQVM7QUFDWjtBQUFBLE1BQUE7QUFHRyxXQUFBLGtCQUFrQixzQkFBc0IsT0FBTztBQUVoRCxVQUFBLENBQUMsS0FBSyxpQkFBaUI7QUFDekI7QUFBQSxNQUFBO0FBR0Ysc0NBQWdDLEtBQUssaUJBQWlCLFFBQVEsS0FBSyxJQUFJLEtBQUssS0FBSztBQUNqRixPQUFBQSxNQUFBLEtBQUssMEJBQUwsZ0JBQUFBLElBQTRCO0FBQ3ZCLFdBQUEsd0JBQXdCLElBQUk7QUFDakMsV0FBSyxnQkFBZ0IsaUJBQWlCLFNBQVMsTUFBTSxLQUFLLFFBQVE7QUFBQSxRQUNoRSxRQUFRLEtBQUssc0JBQXNCO0FBQUEsTUFBQSxDQUNwQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUEsSUFTSyxnQkFBZ0IsT0FBcUI7QUFDM0MsVUFBSSxNQUFNLGtCQUFrQixVQUFVLEtBQUssVUFBVSxXQUFXO0FBQzlELGFBQUssZUFBYztBQUFBLE1BQUEsV0FDVixNQUFNLGtCQUFrQixXQUFXLEtBQUssVUFBVSxXQUFXO0FBQ3RFLGFBQUssZUFBYztBQUFBLE1BQUE7QUFBQSxJQUNyQjtBQUFBLElBR00sZ0JBQWE7QUFDbkIsWUFBTSxnQkFBZ0IsTUFBTSxLQUMxQixLQUFLLGlCQUNILHNGQUFzRixDQUN2RjtBQUVILHFEQUFlLFFBQVEsQ0FBQyxXQUFXOztBQUFBLGdCQUFBQSxNQUFBLE9BQU8sV0FBUCxnQkFBQUEsSUFBZTtBQUFBO0FBQUEsSUFBTztBQUFBLElBR25ELHNCQUFtQjtBQUNwQixXQUFBLDBCQUEwQixJQUFJO0FBQ25DLGFBQU8saUJBQWlCLFdBQVcsQ0FBQyxVQUF5QixLQUFLLGdCQUFnQixLQUFLLEdBQUc7QUFBQSxRQUN4RixRQUFRLEtBQUssd0JBQXdCO0FBQUEsTUFBQSxDQUN0QztBQUFBLElBQUE7QUFBQSxJQUdLLHVCQUF1QixPQUFZO0FBQ25DLFlBQUEsdUJBQXVCLE1BQzFCLGVBQ0EsT0FBTyxDQUFDLE9BQU8sY0FBYyxPQUFPLFdBQVc7QUFDOUMsVUFBQSxxQkFBcUIsS0FBSyxDQUFDLE9BQU8sS0FBSyxnQkFBZ0IsRUFBaUIsQ0FBQyxHQUFHO0FBQzlFLGFBQUssTUFBSztBQUFBLE1BQUE7QUFBQSxJQUNaO0FBQUEsSUFHTSxnQkFBZ0IsU0FBb0I7QUFFeEMsYUFBQSxRQUFRLGFBQWEsT0FDcEIsUUFBUSxhQUFhLHNCQUFzQixLQUFLLENBQUMsUUFBUSxhQUFhLFVBQVU7QUFBQSxJQUFBO0FBQUE7QUFBQSxJQUs3RSxnQkFBZ0IsT0FBb0I7QUFDMUMsVUFBSSxLQUFLLFVBQVUsWUFBWSxNQUFNLFFBQVEsVUFBVTtBQUNyRCxhQUFLLE1BQUs7QUFBQSxNQUFBO0FBQUEsSUFDWjtBQUFBO0FBQUEsSUFJTSxzQkFBbUI7QUFDekIsWUFBTSxjQUFjLEtBQUssV0FBWSxjQUNuQyw4QkFBOEI7QUFFaEMsNkJBQXVCLFdBQVc7QUFDbEMsa0JBQVksTUFBSztBQUFBLElBQUE7QUFBQTtBQUFBLElBdUJYLDJCQUEyQixlQUErQjtBQUNoRSxpQkFBVyxZQUFZLGVBQWU7QUFDL0IsWUFBQSxTQUFTLE9BQXVCLGFBQWEsMEJBQTBCO0FBQ3JFLGVBQUEsMkJBQTJCLEtBQUssY0FDbkMsMkZBQTJGO0FBRTdGLGVBQUssZ0JBQWdCLCtCQUErQixDQUFDLENBQUMsS0FBSyx3QkFBd0I7QUFBQSxRQUFBO0FBQUEsTUFDckY7QUFBQSxJQUNGO0FBQUEsSUFHTSxzQkFBbUI7QUFDckIsVUFBQSxLQUFLLFVBQVUsVUFBVTtBQUMzQjtBQUFBLE1BQUE7QUFHRixVQUFJLEtBQUssd0JBQXdCO0FBQy9CLHFCQUFhLEtBQUssc0JBQXNCO0FBQUEsTUFBQTtBQUdyQyxXQUFBLGdCQUFnQixpQ0FBaUMsSUFBSTtBQUcxRCxXQUFLLHlCQUF5QixXQUM1QixNQUFNLEtBQUssZ0JBQWdCLCtCQUErQixHQUMxRCxhQUFhO0FBQUEsSUFBQTtBQUFBLElBSUQsb0JBQWlCO0FBQy9CLFlBQU0sa0JBQWlCO0FBQ2xCLFdBQUEsT0FBQSxLQUFBLEtBQU8sa0JBQWtCLFFBQVE7QUFDaEMsWUFBQSxTQUFTLEtBQUssT0FBTztBQUN0QixXQUFBLGlCQUFpQixTQUFTLENBQUMsTUFBTSxLQUFLLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxRQUFRO0FBRTNFLFdBQUEsV0FBVyxLQUFLLE9BQU87QUFDdkIsV0FBQSxpQkFBaUIsYUFBYSxDQUFDLFVBQVUsS0FBSyxzQkFBc0IsS0FBSyxHQUFHLEVBQUUsUUFBUTtBQUN0RixXQUFBLGlCQUFpQixlQUFlLENBQUMsVUFBVSxLQUFLLHFCQUFxQixLQUFLLEdBQUcsRUFBRSxRQUFRO0FBQUEsSUFBQTtBQUFBLElBRzlFLHVCQUFvQjs7QUFDbEMsWUFBTSxxQkFBb0I7QUFDMUIsT0FBQUEsTUFBQSxLQUFLLDBCQUFMLGdCQUFBQSxJQUE0QjtBQUM1QixpQkFBSyw0QkFBTCxtQkFBOEI7QUFDOUIsV0FBSyxjQUFjO0FBQ25CLFdBQUssZUFBZTs7SUFHSCxTQUFNO0FBQ3ZCLFlBQU0sY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUlILEtBQUssMkJBQTJCLG9CQUFvQixLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVyRixhQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMEJBSWUsS0FBSyxlQUFlO0FBQUE7QUFBQSxZQUVsQyxJQUFJLENBQUMsa0JBQTZCLEtBQUssY0FBYyxhQUFnQyxDQUFDO0FBQUE7QUFBQSxnREFFbEQsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUkzQyxJQUFJLENBQUMsT0FBa0IsS0FBSyw0QkFBNEIsRUFBa0IsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBO0FBQUEsS0FyVXpGLDJEQUtTOztBQXJCUiw4QkFBQSxDQUFBLFVBQVU7MkNBY1YsYUFDQSxTQUFTLEVBQUUsV0FBVyw0QkFBQSxDQUE2QixDQUFDO0FBTXBELDJDQUFBLENBQUEsT0FBTztBQXBCUixpQkFBQSxJQUFBLE1BQUEseUJBQUEsRUFBQSxNQUFBLFVBQUEsTUFBQSxXQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLGFBQUEsS0FBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBVyxVQUlWO0FBQUEsU0FBQSxVQUFBLGFBQUEsTUFBQSwwQkFBQTtBQVdlLGlCQUFBLElBQUEsTUFBQSxxQ0FBQSxFQUFBLE1BQUEsWUFBQSxNQUFBLDJCQUFBLFFBQUEsT0FBQSxTQUFBLE9BQUEsUUFBQSxFQUFBLEtBQUEsQ0FBQSxRQUFBLDZCQUFBLEtBQUEsS0FBQSxDQUFBLFFBQUEsSUFBQSx5QkFBQSxLQUFBLENBQUEsS0FBQSxVQUFBO0FBQUEsVUFBQSwwQkFBcUM7QUFBQSxTQUFBLFVBQUEsYUFBQSx1Q0FBQSwwQ0FBQTtBQUszQixpQkFBQSxJQUFBLE1BQUEsc0NBQUEsRUFBQSxNQUFBLFlBQUEsTUFBQSw0QkFBQSxRQUFBLE9BQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxLQUFBLENBQUEsUUFBQSw4QkFBQSxLQUFBLEtBQUEsQ0FBQSxRQUFBLElBQUEsMEJBQUEsS0FBQSxDQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUEsMkJBQW9EO0FBQUEsU0FBQSxVQUFBLGFBQUEsd0NBQUEsMkNBQUE7QUE1QmhGLGlCQXNXQyxNQUFBLG1CQUFBLEVBQUEsT0FBQSxXQUFBLEdBQUEsa0JBQUEsRUFBQSxNQUFBLFNBQUEsTUFBQSxXQUFBLE1BQUEsVUFBQSxVQUFBLEdBQUEsTUFBQSx1QkFBQTs7O1FBcld3QixHQUFNLFNBQW1CLE9BRDVDLGtCQUFvQixZQUFBLHVCQUFBLEdBQUM7OzsifQ==
@@ -1,4 +1,4 @@
1
- import { CSSResultGroup, PropertyValues, TemplateResult, LitElement } from 'lit';
1
+ import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
2
  import { SbbTitleLevel } from '../title.js';
3
3
  /**
4
4
  * It displays messages which require a user's attention without interrupting its tasks.
@@ -31,7 +31,10 @@ export declare class SbbNotificationElement extends LitElement {
31
31
  * In readonly mode, there is no dismiss button offered to the user.
32
32
  */
33
33
  accessor readonly: boolean;
34
- /** Size variant, either s or m. */
34
+ /**
35
+ * Size variant, either s or m.
36
+ * @default 'm' / 's' (lean)
37
+ */
35
38
  accessor size: 'm' | 's';
36
39
  /** The enabled animations. */
37
40
  accessor animation: 'open' | 'close' | 'all' | 'none';
@@ -54,6 +57,7 @@ export declare class SbbNotificationElement extends LitElement {
54
57
  close(): void;
55
58
  connectedCallback(): void;
56
59
  protected firstUpdated(changedProperties: PropertyValues<this>): Promise<void>;
60
+ private _isZeroAnimationDuration;
57
61
  private _setNotificationHeight;
58
62
  private _onNotificationResize;
59
63
  private _onNotificationAnimationEnd;
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../../src/elements/notification/notification.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAQ,UAAU,EAAW,MAAM,KAAK,CAAC;AAQhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,+BAA+B,CAAC;AACvC,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AAWrB;;;;;;;;;;;GAWG;AACH,qBAGM,sBAAuB,SAAQ,UAAU;IAE7C,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;;;;MAKlB;IAEX,oCAAoC;IACpC,SAA6C,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAU;IAElG,wBAAwB;IACxB,SAEgB,YAAY,EAAE,MAAM,CAAM;IAE1C,yFAAyF;IACzF,SAAwD,UAAU,EAAE,aAAa,CAAO;IAExF;;;OAGG;IACH,SAEgB,QAAQ,EAAE,OAAO,CAAS;IAE1C,mCAAmC;IACnC,SAA6C,IAAI,EAAE,GAAG,GAAG,GAAG,CAAO;IAEnE,8BAA8B;IAC9B,SAA6C,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAS;IAElG,qCAAqC;IACrC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,oBAAoB,CAAe;IAC3C,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,2BAA2B,CAIhC;IAEH,2EAA2E;IAC3E,OAAO,CAAC,SAAS,CAGf;IAEF,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAGd;IAEF,2EAA2E;IAC3E,OAAO,CAAC,UAAU,CAGhB;IAEF,uDAAuD;IACvD,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,KAAK;IAON,KAAK,IAAI,IAAI;IAOJ,iBAAiB,IAAI,IAAI;cAMhB,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7F,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;cAOH,MAAM,IAAI,cAAc;CAuC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,kBAAkB,EAAE,sBAAsB,CAAC;KAC5C;CACF"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../../src/elements/notification/notification.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAEnB,UAAU,EAEV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AASb,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,+BAA+B,CAAC;AACvC,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AAWrB;;;;;;;;;;;GAWG;AACH,qBAGM,sBAAuB,SAAQ,UAAU;IAE7C,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;;;;MAKlB;IAEX,oCAAoC;IACpC,SAA6C,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAU;IAElG,wBAAwB;IACxB,SAEgB,YAAY,EAAE,MAAM,CAAM;IAE1C,yFAAyF;IACzF,SAAwD,UAAU,EAAE,aAAa,CAAO;IAExF;;;OAGG;IACH,SAEgB,QAAQ,EAAE,OAAO,CAAS;IAE1C;;;OAGG;IACH,SAA6C,IAAI,EAAE,GAAG,GAAG,GAAG,CAAwB;IAEpF,8BAA8B;IAC9B,SAA6C,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAS;IAElG,qCAAqC;IACrC,OAAO,KAAK,MAAM,QAEjB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,oBAAoB,CAAe;IAC3C,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,2BAA2B,CAIhC;IAEH,2EAA2E;IAC3E,OAAO,CAAC,SAAS,CAIf;IAEF,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAId;IAEF,2EAA2E;IAC3E,OAAO,CAAC,UAAU,CAIhB;IAEF,uDAAuD;IACvD,OAAO,CAAC,SAAS,CAIf;IAEF,OAAO,CAAC,KAAK;IAaN,KAAK,IAAI,IAAI;IAYJ,iBAAiB,IAAI,IAAI;cAMhB,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7F,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;cAOH,MAAM,IAAI,cAAc;CAoC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,kBAAkB,EAAE,sBAAsB,CAAC;KAC5C;CACF"}