@sbb-esta/lyne-elements 4.0.0-next → 4.0.0-next.2

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 (309) hide show
  1. package/alert/alert/alert.component.js +5 -5
  2. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +6 -6
  3. package/badge.css +3 -3
  4. package/breadcrumb/breadcrumb/breadcrumb.component.js +4 -4
  5. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +1 -0
  6. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
  7. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +5 -5
  8. package/button/common.js +1 -1
  9. package/button/mini-button/mini-button.component.js +1 -1
  10. package/button.js +1 -1
  11. package/calendar/calendar.component.d.ts +1 -0
  12. package/calendar/calendar.component.d.ts.map +1 -1
  13. package/calendar/calendar.component.js +2 -2
  14. package/card/card-badge/card-badge.component.js +7 -7
  15. package/card/card-button/card-button.component.d.ts +1 -1
  16. package/card/card-link/card-link.component.d.ts +1 -1
  17. package/card/common/card-action-common.d.ts.map +1 -1
  18. package/card/common/card-action-common.js +5 -10
  19. package/carousel/carousel/carousel.component.d.ts +2 -1
  20. package/carousel/carousel/carousel.component.d.ts.map +1 -1
  21. package/carousel/carousel/carousel.component.js +33 -28
  22. package/carousel/carousel-list/carousel-list.component.d.ts +1 -1
  23. package/carousel/carousel-list/carousel-list.component.d.ts.map +1 -1
  24. package/carousel/carousel-list/carousel-list.component.js +17 -22
  25. package/checkbox/checkbox/checkbox.component.d.ts +1 -1
  26. package/checkbox/common.js +1 -1
  27. package/checkbox-common-CrwfdL9V.js +5 -0
  28. package/checkbox.js +1 -1
  29. package/chip/chip/chip.component.js +3 -3
  30. package/chip-label/chip-label.component.js +8 -8
  31. package/core/a11y/interactivity-checker.js +0 -7
  32. package/core/a11y/live-announcer.js +0 -7
  33. package/core/config/config.d.ts +5 -0
  34. package/core/config/config.d.ts.map +1 -1
  35. package/core/controllers/media-matchers-controller.d.ts.map +1 -1
  36. package/core/controllers/media-matchers-controller.js +27 -27
  37. package/core/datetime/native-date-adapter.d.ts +1 -0
  38. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  39. package/core/datetime/native-date-adapter.js +1 -1
  40. package/core/dom/breakpoint.d.ts +1 -0
  41. package/core/dom/breakpoint.d.ts.map +1 -1
  42. package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  43. package/core/styles/core.scss +67 -69
  44. package/core/styles/mixins/chip.scss +4 -4
  45. package/core/styles/mixins/lists.scss +3 -3
  46. package/core/styles/mixins/panel.scss +2 -2
  47. package/core/styles/mixins/typo.scss +42 -40
  48. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables-as-css.scss +166 -38
  49. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +4 -4
  50. package/core/styles/typography.scss +6 -6
  51. package/core.css +92 -100
  52. package/custom-elements.json +1565 -1739
  53. package/date-input/date-input.component.d.ts +1 -0
  54. package/date-input/date-input.component.d.ts.map +1 -1
  55. package/date-input/date-input.component.js +1 -0
  56. package/development/alert/alert/alert.component.js +7 -5
  57. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +3 -3
  58. package/development/breadcrumb/breadcrumb/breadcrumb.component.js +3 -3
  59. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts +1 -0
  60. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
  61. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +5 -5
  62. package/development/button/common.js +1 -1
  63. package/development/button/mini-button/mini-button.component.js +2 -2
  64. package/development/button.js +1 -1
  65. package/development/calendar/calendar.component.d.ts +1 -0
  66. package/development/calendar/calendar.component.d.ts.map +1 -1
  67. package/development/calendar/calendar.component.js +17 -17
  68. package/development/card/card-badge/card-badge.component.js +3 -3
  69. package/development/card/card-button/card-button.component.d.ts +1 -1
  70. package/development/card/card-link/card-link.component.d.ts +1 -1
  71. package/development/card/common/card-action-common.d.ts.map +1 -1
  72. package/development/card/common/card-action-common.js +14 -7
  73. package/development/carousel/carousel/carousel.component.d.ts +2 -1
  74. package/development/carousel/carousel/carousel.component.d.ts.map +1 -1
  75. package/development/carousel/carousel/carousel.component.js +19 -8
  76. package/development/carousel/carousel-list/carousel-list.component.d.ts +1 -1
  77. package/development/carousel/carousel-list/carousel-list.component.d.ts.map +1 -1
  78. package/development/carousel/carousel-list/carousel-list.component.js +7 -14
  79. package/development/checkbox/checkbox/checkbox.component.d.ts +1 -1
  80. package/development/checkbox/common.js +1 -1
  81. package/development/{checkbox-common-BZFJgZd7.js → checkbox-common-BKjxH3Rp.js} +12 -12
  82. package/development/checkbox.js +1 -1
  83. package/development/chip/chip/chip.component.js +3 -3
  84. package/development/chip-label/chip-label.component.js +6 -6
  85. package/development/core/a11y/interactivity-checker.js +1 -8
  86. package/development/core/a11y/live-announcer.js +1 -8
  87. package/development/core/config/config.d.ts +5 -0
  88. package/development/core/config/config.d.ts.map +1 -1
  89. package/development/core/config/config.js +1 -1
  90. package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
  91. package/development/core/controllers/media-matchers-controller.js +5 -6
  92. package/development/core/datetime/native-date-adapter.d.ts +1 -0
  93. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  94. package/development/core/datetime/native-date-adapter.js +2 -2
  95. package/development/core/dom/breakpoint.d.ts +1 -0
  96. package/development/core/dom/breakpoint.d.ts.map +1 -1
  97. package/development/core/dom/breakpoint.js +1 -1
  98. package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  99. package/development/core/mixins/form-associated-input-mixin.js +1 -1
  100. package/development/date-input/date-input.component.d.ts +1 -0
  101. package/development/date-input/date-input.component.d.ts.map +1 -1
  102. package/development/date-input/date-input.component.js +2 -1
  103. package/development/dialog/dialog/dialog.component.d.ts +3 -4
  104. package/development/dialog/dialog/dialog.component.d.ts.map +1 -1
  105. package/development/dialog/dialog/dialog.component.js +47 -112
  106. package/development/dialog/dialog-actions/dialog-actions.component.d.ts +0 -1
  107. package/development/dialog/dialog-actions/dialog-actions.component.d.ts.map +1 -1
  108. package/development/dialog/dialog-actions/dialog-actions.component.js +3 -7
  109. package/development/dialog/dialog-close-button/dialog-close-button.component.d.ts +0 -1
  110. package/development/dialog/dialog-close-button/dialog-close-button.component.d.ts.map +1 -1
  111. package/development/dialog/dialog-close-button/dialog-close-button.component.js +5 -5
  112. package/development/dialog/dialog-content/dialog-content.component.d.ts +1 -0
  113. package/development/dialog/dialog-content/dialog-content.component.d.ts.map +1 -1
  114. package/development/dialog/dialog-content/dialog-content.component.js +14 -2
  115. package/development/dialog/dialog-title/dialog-title.component.d.ts +0 -1
  116. package/development/dialog/dialog-title/dialog-title.component.d.ts.map +1 -1
  117. package/development/dialog/dialog-title/dialog-title.component.js +14 -7
  118. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +3 -3
  119. package/development/file-selector/common.js +1 -1
  120. package/development/file-selector/file-selector/file-selector.component.d.ts +1 -1
  121. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts +1 -1
  122. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +8 -8
  123. package/development/{file-selector-common-CsFa5XJ-.js → file-selector-common-B-9Eiig3.js} +4 -4
  124. package/development/file-selector.js +1 -1
  125. package/development/footer/footer.component.js +3 -3
  126. package/development/form-error/form-error.component.js +5 -5
  127. package/development/form-field/form-field/form-field.component.js +14 -14
  128. package/development/header/common/header-action-common.js +3 -3
  129. package/development/header/header-button/header-button.component.d.ts +1 -1
  130. package/development/header/header-environment/header-environment.component.js +3 -3
  131. package/development/header/header-link/header-link.component.d.ts +1 -1
  132. package/development/image/image.component.d.ts +0 -1
  133. package/development/image/image.component.d.ts.map +1 -1
  134. package/development/image/image.component.js +11 -16
  135. package/development/link/common/block-link-common.js +10 -10
  136. package/development/menu/common/menu-action-common.js +3 -3
  137. package/development/message/message.component.js +6 -6
  138. package/development/{mini-button-common-Di32bSJj.js → mini-button-common-D1dU4MgN.js} +4 -4
  139. package/development/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +3 -3
  140. package/development/navigation/common/navigation-action-common.js +11 -11
  141. package/development/navigation/navigation-button/navigation-button.component.d.ts +1 -1
  142. package/development/navigation/navigation-link/navigation-link.component.d.ts +1 -1
  143. package/development/navigation/navigation-list/navigation-list.component.js +3 -3
  144. package/development/navigation/navigation-marker/navigation-marker.component.js +9 -9
  145. package/development/navigation/navigation-section/navigation-section.component.js +5 -5
  146. package/development/notification/notification.component.js +7 -7
  147. package/development/option/optgroup/optgroup-base-element.js +3 -3
  148. package/development/option/option/option-base-element.d.ts.map +1 -1
  149. package/development/option/option/option-base-element.js +14 -4
  150. package/development/option/option/option.component.d.ts.map +1 -1
  151. package/development/option/option/option.component.js +8 -5
  152. package/development/option/option-hint/option-hint.component.js +3 -3
  153. package/development/paginator/common/paginator-common.d.ts.map +1 -1
  154. package/development/paginator/common/paginator-common.js +7 -24
  155. package/development/paginator/compact-paginator/compact-paginator.component.d.ts +1 -1
  156. package/development/paginator/compact-paginator/compact-paginator.component.d.ts.map +1 -1
  157. package/development/paginator/compact-paginator/compact-paginator.component.js +5 -6
  158. package/development/paginator/paginator/paginator.component.d.ts +1 -7
  159. package/development/paginator/paginator/paginator.component.d.ts.map +1 -1
  160. package/development/paginator/paginator/paginator.component.js +16 -31
  161. package/development/popover/popover/popover.component.d.ts.map +1 -1
  162. package/development/popover/popover/popover.component.js +63 -13
  163. package/development/radio-button/common.js +1 -1
  164. package/development/radio-button/radio-button/radio-button.component.d.ts +1 -1
  165. package/development/{radio-button-common-5uawgCpB.js → radio-button-common-BPrInmpg.js} +11 -11
  166. package/development/radio-button.js +1 -1
  167. package/development/sbb-tokens-DZrHvErO.js +19 -0
  168. package/development/select/select.component.d.ts +1 -1
  169. package/development/select/select.component.d.ts.map +1 -1
  170. package/development/select/select.component.js +8 -5
  171. package/development/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts +1 -1
  172. package/development/sidebar/icon-sidebar-link/icon-sidebar-link.component.d.ts +1 -1
  173. package/development/sidebar/sidebar-title/sidebar-title.component.js +1 -1
  174. package/development/status/status.component.js +4 -4
  175. package/development/stepper/step/step.component.js +3 -3
  176. package/development/stepper/step-label/step-label.component.js +15 -15
  177. package/development/tabs/tab-label/tab-label.component.js +18 -18
  178. package/development/tag/tag/tag.component.js +7 -7
  179. package/development/teaser/teaser.component.js +3 -3
  180. package/development/teaser-hero/teaser-hero.component.js +2 -2
  181. package/development/teaser-product/common.js +1 -1
  182. package/development/teaser-product/teaser-product/teaser-product.component.d.ts +1 -1
  183. package/development/teaser-product/teaser-product-static/teaser-product-static.component.d.ts +1 -1
  184. package/development/{teaser-product-common-B1KK4iNu.js → teaser-product-common-v3BvyFdH.js} +5 -5
  185. package/development/teaser-product.js +1 -1
  186. package/development/timetable-occupancy/timetable-occupancy.component.js +3 -3
  187. package/development/title/title-base.js +10 -10
  188. package/development/title/title.component.d.ts +1 -2
  189. package/development/title/title.component.d.ts.map +1 -1
  190. package/development/title/title.component.js +25 -13
  191. package/development/toast/toast.component.js +5 -5
  192. package/development/toggle/toggle/toggle.component.js +3 -3
  193. package/development/toggle/toggle-option/toggle-option.component.js +3 -3
  194. package/development/toggle-check/toggle-check.component.js +11 -11
  195. package/development/tooltip/tooltip.component.js +3 -3
  196. package/development/train/train/train.component.js +4 -4
  197. package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  198. package/development/train/train-formation/train-formation.component.js +3 -3
  199. package/development/train/train-wagon/train-wagon.component.js +9 -9
  200. package/dialog/dialog/dialog.component.d.ts +3 -4
  201. package/dialog/dialog/dialog.component.d.ts.map +1 -1
  202. package/dialog/dialog/dialog.component.js +61 -58
  203. package/dialog/dialog-actions/dialog-actions.component.d.ts +0 -1
  204. package/dialog/dialog-actions/dialog-actions.component.d.ts.map +1 -1
  205. package/dialog/dialog-actions/dialog-actions.component.js +4 -7
  206. package/dialog/dialog-close-button/dialog-close-button.component.d.ts +0 -1
  207. package/dialog/dialog-close-button/dialog-close-button.component.d.ts.map +1 -1
  208. package/dialog/dialog-close-button/dialog-close-button.component.js +16 -19
  209. package/dialog/dialog-content/dialog-content.component.d.ts +1 -0
  210. package/dialog/dialog-content/dialog-content.component.d.ts.map +1 -1
  211. package/dialog/dialog-content/dialog-content.component.js +14 -11
  212. package/dialog/dialog-title/dialog-title.component.d.ts +0 -1
  213. package/dialog/dialog-title/dialog-title.component.d.ts.map +1 -1
  214. package/dialog/dialog-title/dialog-title.component.js +11 -14
  215. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
  216. package/file-selector/common.js +1 -1
  217. package/file-selector/file-selector/file-selector.component.d.ts +1 -1
  218. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts +1 -1
  219. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +9 -9
  220. package/{file-selector-common-CUp299VH.js → file-selector-common-DbYkpr-x.js} +1 -1
  221. package/file-selector.js +1 -1
  222. package/footer/footer.component.js +1 -1
  223. package/form-error/form-error.component.js +1 -1
  224. package/form-field/form-field/form-field.component.js +1 -1
  225. package/header/common/header-action-common.js +1 -1
  226. package/header/header-button/header-button.component.d.ts +1 -1
  227. package/header/header-environment/header-environment.component.js +4 -4
  228. package/header/header-link/header-link.component.d.ts +1 -1
  229. package/image/image.component.d.ts +0 -1
  230. package/image/image.component.d.ts.map +1 -1
  231. package/image/image.component.js +93 -97
  232. package/link/common/block-link-common.js +14 -14
  233. package/lists.css +9 -9
  234. package/menu/common/menu-action-common.js +1 -1
  235. package/message/message.component.js +6 -6
  236. package/mini-button-common-DSGLaplg.js +10 -0
  237. package/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +1 -1
  238. package/navigation/common/navigation-action-common.js +17 -17
  239. package/navigation/navigation-button/navigation-button.component.d.ts +1 -1
  240. package/navigation/navigation-link/navigation-link.component.d.ts +1 -1
  241. package/navigation/navigation-list/navigation-list.component.js +3 -3
  242. package/navigation/navigation-marker/navigation-marker.component.js +12 -12
  243. package/navigation/navigation-section/navigation-section.component.js +5 -5
  244. package/notification/notification.component.js +1 -1
  245. package/off-brand-theme.css +145 -153
  246. package/option/optgroup/optgroup-base-element.js +1 -1
  247. package/option/option/option-base-element.d.ts.map +1 -1
  248. package/option/option/option-base-element.js +30 -20
  249. package/option/option/option.component.d.ts.map +1 -1
  250. package/option/option/option.component.js +8 -8
  251. package/option/option-hint/option-hint.component.js +10 -10
  252. package/package.json +1 -1
  253. package/paginator/common/paginator-common.d.ts.map +1 -1
  254. package/paginator/common/paginator-common.js +30 -46
  255. package/paginator/compact-paginator/compact-paginator.component.d.ts +1 -1
  256. package/paginator/compact-paginator/compact-paginator.component.d.ts.map +1 -1
  257. package/paginator/compact-paginator/compact-paginator.component.js +2 -3
  258. package/paginator/paginator/paginator.component.d.ts +1 -7
  259. package/paginator/paginator/paginator.component.d.ts.map +1 -1
  260. package/paginator/paginator/paginator.component.js +42 -54
  261. package/popover/popover/popover.component.d.ts.map +1 -1
  262. package/popover/popover/popover.component.js +70 -72
  263. package/radio-button/common.js +1 -1
  264. package/radio-button/radio-button/radio-button.component.d.ts +1 -1
  265. package/radio-button-common-chJrmIBn.js +5 -0
  266. package/radio-button.js +1 -1
  267. package/safety-theme.css +149 -157
  268. package/sbb-tokens-BNWpZrLn.js +11 -0
  269. package/select/select.component.d.ts +1 -1
  270. package/select/select.component.d.ts.map +1 -1
  271. package/select/select.component.js +22 -20
  272. package/sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts +1 -1
  273. package/sidebar/icon-sidebar-link/icon-sidebar-link.component.d.ts +1 -1
  274. package/sidebar/sidebar-title/sidebar-title.component.js +5 -5
  275. package/standard-theme.css +145 -153
  276. package/status/status.component.js +4 -4
  277. package/stepper/step/step.component.js +3 -3
  278. package/stepper/step-label/step-label.component.js +1 -1
  279. package/table.css +27 -27
  280. package/tabs/tab-label/tab-label.component.js +10 -10
  281. package/tag/tag/tag.component.js +1 -1
  282. package/teaser/teaser.component.js +1 -1
  283. package/teaser-hero/teaser-hero.component.js +1 -1
  284. package/teaser-product/common.js +1 -1
  285. package/teaser-product/teaser-product/teaser-product.component.d.ts +1 -1
  286. package/teaser-product/teaser-product-static/teaser-product-static.component.d.ts +1 -1
  287. package/teaser-product-common-a4NenpSA.js +5 -0
  288. package/teaser-product.js +1 -1
  289. package/timetable-occupancy/timetable-occupancy.component.js +1 -1
  290. package/title/title-base.js +19 -19
  291. package/title/title.component.d.ts +1 -2
  292. package/title/title.component.d.ts.map +1 -1
  293. package/title/title.component.js +17 -17
  294. package/toast/toast.component.js +1 -1
  295. package/toggle/toggle/toggle.component.js +1 -1
  296. package/toggle/toggle-option/toggle-option.component.js +7 -7
  297. package/toggle-check/toggle-check.component.js +15 -15
  298. package/tooltip/tooltip.component.js +5 -5
  299. package/train/train/train.component.js +1 -1
  300. package/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  301. package/train/train-formation/train-formation.component.js +1 -1
  302. package/train/train-wagon/train-wagon.component.js +1 -1
  303. package/typography.css +11 -11
  304. package/checkbox-common-BGA_q9nc.js +0 -5
  305. package/development/sbb-tokens-DXgmy_b-.js +0 -21
  306. package/mini-button-common-DBnJfrBZ.js +0 -10
  307. package/radio-button-common-BT3VkZLM.js +0 -5
  308. package/sbb-tokens-CB1Hgctn.js +0 -12
  309. package/teaser-product-common-BwqWqRrK.js +0 -5
@@ -0,0 +1,19 @@
1
+ const SbbBreakpointZeroMin = "0rem";
2
+ const SbbBreakpointZeroMax = "37.4375rem";
3
+ const SbbBreakpointSmallMin = "37.5rem";
4
+ const SbbBreakpointSmallMax = "63.9375rem";
5
+ const SbbBreakpointLargeMin = "64rem";
6
+ const SbbBreakpointLargeMax = "89.9375rem";
7
+ const SbbBreakpointUltraMin = "90rem";
8
+ const SbbBreakpointUltraMax = "161.1875rem";
9
+ export {
10
+ SbbBreakpointLargeMin as S,
11
+ SbbBreakpointLargeMax as a,
12
+ SbbBreakpointSmallMax as b,
13
+ SbbBreakpointUltraMax as c,
14
+ SbbBreakpointUltraMin as d,
15
+ SbbBreakpointSmallMin as e,
16
+ SbbBreakpointZeroMax as f,
17
+ SbbBreakpointZeroMin as g
18
+ };
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JiLXRva2Vucy1EWnJIdkVyTy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BzYmItZXN0YS9seW5lLWRlc2lnbi10b2tlbnMvZGlzdC9qcy9zYmItdG9rZW5zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRG8gbm90IGVkaXQgZGlyZWN0bHksIHRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuXG4gKi9cblxuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uMXggPSBcIjAuMDRzXCI7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb24yeCA9IFwiMC4wOHNcIjtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjN4ID0gXCIwLjEyc1wiO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uNHggPSBcIjAuMTZzXCI7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb241eCA9IFwiMC4yMHNcIjtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjZ4ID0gXCIwLjI0c1wiO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uMTJ4ID0gXCIwLjQ4c1wiO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkVhc2luZyA9IFwiY3ViaWMtYmV6aWVyKC40NywgLjEsIDEsIC42MylcIjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJXaWR0aDF4ID0gXCIwLjA2MjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJXaWR0aDJ4ID0gXCIwLjEyNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlcldpZHRoM3ggPSBcIjAuMTg3NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlcldpZHRoNHggPSBcIjAuMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXMxeCA9IFwiMC4xMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXMyeCA9IFwiMC4yNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czR4ID0gXCIwLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM2eCA9IFwiMC43NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czh4ID0gXCIxcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzMTZ4ID0gXCIycmVtXCI7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludFplcm9NaW4gPSBcIjByZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50WmVyb01heCA9IFwiMzcuNDM3NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRTbWFsbE1pbiA9IFwiMzcuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRTbWFsbE1heCA9IFwiNjMuOTM3NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRMYXJnZU1pbiA9IFwiNjRyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TGFyZ2VNYXggPSBcIjg5LjkzNzVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50VWx0cmFNaW4gPSBcIjkwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludFVsdHJhTWF4ID0gXCIxNjEuMTg3NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2sgPSBcIiMwMDAwMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pZG5pZ2h0ID0gXCIjMTUxNTE1XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbHVlID0gXCIjMmQzMjdkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDaGFyY29hbCA9IFwiIzIxMjEyMVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9ySXJvbiA9IFwiIzQ0NDQ0NFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQW50aHJhY2l0ZSA9IFwiIzVhNWE1YVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3Jhbml0ZSA9IFwiIzY4Njg2OFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTWV0YWwgPSBcIiM3Njc2NzZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlID0gXCIjOGQ4ZDhkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTdG9ybSA9IFwiI2E4YThhOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3JhcGhpdGUgPSBcIiNiN2I3YjdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckNlbWVudCA9IFwiI2JkYmRiZFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGxhdGludW0gPSBcIiNjZGNkY2RcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckFsdW1pbml1bSA9IFwiI2QyZDJkMlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU2lsdmVyID0gXCIjZGNkY2RjXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDbG91ZCA9IFwiI2U1ZTVlNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTWlsayA9IFwiI2Y2ZjZmNlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkID0gXCIjZWIwMDAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWQ4NSA9IFwiI2ZmMzgzOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkMTI1ID0gXCIjYzYwMDE4XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWQxNTAgPSBcIiNhMjAwMTNcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJveWFsTGlnaHQgPSBcIiMwNjM0OGJcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJveWFsRGFyayA9IFwiIzAwNTNlZlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUm95YWw4NUxpZ2h0ID0gXCIjNDA3N2RmXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSb3lhbDg1RGFyayA9IFwiIzQwNzdkZlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUm95YWwxMjVMaWdodCA9IFwiIzAzMjY2OFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUm95YWwxMjVEYXJrID0gXCIjMjQ1ZWNiXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSb3lhbDE1MExpZ2h0ID0gXCIjMDIxYzRlXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSb3lhbDE1MERhcmsgPSBcIiMzYzY1YjNcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlID0gXCIjZmZmZmZmXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTa3lMaWdodCA9IFwiIzAwNzRiZlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU2t5RGFyayA9IFwiIzEyOGVkZVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTmlnaHRMaWdodCA9IFwiIzE0M2E4NVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTmlnaHREYXJrID0gXCIjNjU4N2NhXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JWaW9sZXRMaWdodCA9IFwiIzZmMjI4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yVmlvbGV0RGFyayA9IFwiI2IzNmNjNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGlua0xpZ2h0ID0gXCIjYzczODdhXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQaW5rRGFyayA9IFwiI2U0NTI5NVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQXV0dW1uTGlnaHQgPSBcIiNjZjNiMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckF1dHVtbkRhcmsgPSBcIiNmMDUzMTNcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck9yYW5nZUxpZ2h0ID0gXCIjZjI3ZTAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JPcmFuZ2VEYXJrID0gXCIjZmI4ZTE5XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQZWFjaExpZ2h0ID0gXCIjZmNiYjAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQZWFjaERhcmsgPSBcIiNmZmM3MjdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckxlbW9uTGlnaHQgPSBcIiNmZmRlMTVcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckxlbW9uRGFyayA9IFwiI2ZmZTU0N1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQnJvd25MaWdodCA9IFwiI2EwNTQwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQnJvd25EYXJrID0gXCIjY2Y2ZjA0XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JHcmVlbkxpZ2h0ID0gXCIjMDA4MjMzXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JHcmVlbkRhcmsgPSBcIiMxMDlkNDdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclR1cnF1b2lzZUxpZ2h0ID0gXCIjMDA3ZTg0XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JUdXJxdW9pc2VEYXJrID0gXCIjMDBhNTliXCI7XG5leHBvcnQgY29uc3QgU2JiRm9jdXNPdXRsaW5lT2Zmc2V0ID0gXCIwLjE4NzVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJIb3ZlckltYWdlQnJpZ2h0bmVzcyA9IDEuMDc1O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1plcm8gPSA0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1NtYWxsID0gODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNMYXJnZSA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1VsdHJhID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlWmVybyA9IFwiMXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZVNtYWxsID0gXCIxLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVMYXJnZSA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZVVsdHJhID0gXCIycmVtXCI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVaZXJvID0gXCIxLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVTbWFsbCA9IFwiM3JlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlTGFyZ2UgPSBcIjRyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVVsdHJhID0gXCI3LjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlUGFnZU1heFdpZHRoID0gXCI3NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzFPZmZzZXRYID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MU9mZnNldFkgPSBcIjAuMTI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MUJsdXIgPSBcIjFyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxU3ByZWFkID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93Mk9mZnNldFggPSBcIjByZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyT2Zmc2V0WSA9IFwiMC4wNjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MkJsdXIgPSBcIjAuMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyU3ByZWFkID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MU9mZnNldFggPSBcIjByZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cxT2Zmc2V0WSA9IFwiMC4yNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFCbHVyID0gXCIycmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MVNwcmVhZCA9IFwiMHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJPZmZzZXRYID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93Mk9mZnNldFkgPSBcIjAuMDYyNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJCbHVyID0gXCIwLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cyU3ByZWFkID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MU9mZnNldFggPSBcIjByZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxT2Zmc2V0WSA9IFwiMXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzFCbHVyID0gXCI4cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MVNwcmVhZCA9IFwiMHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJPZmZzZXRYID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93Mk9mZnNldFkgPSBcIjAuMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cyQmx1ciA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJTcHJlYWQgPSBcIjByZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93MU9mZnNldFggPSBcIjByZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93MU9mZnNldFkgPSBcIjEuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxQmx1ciA9IFwiMTJyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93MVNwcmVhZCA9IFwiMHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyT2Zmc2V0WCA9IFwiMHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyT2Zmc2V0WSA9IFwiMC4yNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyQmx1ciA9IFwiNHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyU3ByZWFkID0gXCIwcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzWmVybyA9IFwiMS43NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1NtYWxsID0gXCIxLjc1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTGFyZ2UgPSBcIjJyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNVbHRyYSA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzWmVybyA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzU21hbGwgPSBcIjJyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c0xhcmdlID0gXCIyLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNVbHRyYSA9IFwiMi4yNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNaZXJvID0gXCIyLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYc1NtYWxsID0gXCIyLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYc0xhcmdlID0gXCIyLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzVWx0cmEgPSBcIjIuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1plcm8gPSBcIjIuNzVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNTbWFsbCA9IFwiMi43NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U0xhcmdlID0gXCIzcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTVWx0cmEgPSBcIjNyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1aZXJvID0gXCIzcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNU21hbGwgPSBcIjNyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1MYXJnZSA9IFwiMy41cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNVWx0cmEgPSBcIjMuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFplcm8gPSBcIjMuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFNtYWxsID0gXCIzLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExMYXJnZSA9IFwiNHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFVsdHJhID0gXCI0cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUljb25VaUV4dHJhU21hbGwgPSBcIjFyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpU21hbGwgPSBcIjEuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlNZWRpdW0gPSBcIjIuMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpTGFyZ2UgPSBcIjNyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQxeCA9IFwiMC4yNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDJ4ID0gXCIwLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQzeCA9IFwiMC43NXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDR4ID0gXCIxcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkNXggPSBcIjEuMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ2eCA9IFwiMS41cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkN3ggPSBcIjEuNzVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ4eCA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDl4ID0gXCIyLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTB4ID0gXCIyLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQxMnggPSBcIjNyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQxNHggPSBcIjMuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDE2eCA9IFwiNHJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDE4eCA9IFwiNC41cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTl4ID0gXCI0Ljc1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjB4ID0gXCI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjR4ID0gXCI2cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMzB4ID0gXCI3LjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNaZXJvID0gXCIwLjc1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzU21hbGwgPSBcIjAuNzVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNMYXJnZSA9IFwiMXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1VsdHJhID0gXCIxcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNaZXJvID0gXCIxcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNTbWFsbCA9IFwiMXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzTGFyZ2UgPSBcIjEuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzVWx0cmEgPSBcIjEuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNaZXJvID0gXCIxLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYc1NtYWxsID0gXCIxLjI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYc0xhcmdlID0gXCIxLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzVWx0cmEgPSBcIjEuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1plcm8gPSBcIjEuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1NtYWxsID0gXCIxLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNMYXJnZSA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1VsdHJhID0gXCIycmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNWmVybyA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTVNtYWxsID0gXCIycmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNTGFyZ2UgPSBcIjIuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTVVsdHJhID0gXCIzcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMWmVybyA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTFNtYWxsID0gXCIyLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxMYXJnZSA9IFwiMy41cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMVWx0cmEgPSBcIjRyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhsWmVybyA9IFwiMnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxTbWFsbCA9IFwiM3JlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxMYXJnZSA9IFwiNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxVbHRyYSA9IFwiNnJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsWmVybyA9IFwiM3JlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsU21hbGwgPSBcIjQuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsTGFyZ2UgPSBcIjZyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFVsdHJhID0gXCI3LjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvRm9udEZhbWlseSA9XG4gICdcIlNCQlwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYnO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MZXR0ZXJTcGFjaW5nSGVhZGluZyA9IFwiMGVtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xldHRlclNwYWNpbmdUZXh0ID0gXCIwLjAzZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvTGluZUhlaWdodEhlYWRpbmcgPSAxLjQ7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xpbmVIZWlnaHRUZXh0ID0gMS43NTtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUwNzV4ID0gXCIwLjc1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDgxMjV4ID0gXCIwLjgxMjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUwODc1eCA9IFwiMC44NzVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGVEZWZhdWx0ID0gXCIxcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTEyNXggPSBcIjEuMTI1cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTI1eCA9IFwiMS4yNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTE1eCA9IFwiMS41cmVtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMnggPSBcIjJyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUyNXggPSBcIjIuNXJlbVwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTN4ID0gXCIzcmVtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMzV4ID0gXCIzLjVyZW1cIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGU0eCA9IFwiNHJlbVwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNCWSxNQUFDLHVCQUF1QjtBQUN4QixNQUFDLHVCQUF1QjtBQUN4QixNQUFDLHdCQUF3QjtBQUN6QixNQUFDLHdCQUF3QjtBQUN6QixNQUFDLHdCQUF3QjtBQUN6QixNQUFDLHdCQUF3QjtBQUN6QixNQUFDLHdCQUF3QjtBQUN6QixNQUFDLHdCQUF3QjsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19
@@ -153,7 +153,7 @@ export declare class SbbSelectElement<T = string> extends SbbSelectElement_base
153
153
  private _closeOnBackdropClick;
154
154
  private _updateOptionsFromValue;
155
155
  private _updateValueFromOptions;
156
- private _onSlotChange;
156
+ private _updateValueOptionState;
157
157
  private _getSelected;
158
158
  private _toggleOpening;
159
159
  private _spreadDeferredDisplayValue;
@@ -1 +1 @@
1
- {"version":3,"file":"select.component.d.ts","sourceRoot":"","sources":["../../../../src/elements/select/select.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.component.d.ts","sourceRoot":"","sources":["../../../../src/elements/select/select.component.ts"],"names":[],"mappings":"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"}
@@ -168,7 +168,7 @@ const style = css`.sbb-gap-fix-wrapper {
168
168
  white-space: nowrap;
169
169
  text-overflow: ellipsis;
170
170
  cursor: var(--sbb-cursor-default);
171
- height: calc(1em * var(--sbb-typo-line-height-body-text));
171
+ height: calc(1em * var(--sbb-typo-line-height-text));
172
172
  }
173
173
 
174
174
  .sbb-select__trigger--placeholder {
@@ -394,7 +394,9 @@ let SbbSelectElement = (() => {
394
394
  };
395
395
  this.addEventListener?.("optionselectionchange", (e) => this._onOptionChanged(e));
396
396
  this.addEventListener?.("optionLabelChanged", (e) => this._onOptionLabelChanged(e));
397
- this.addEventListener?.("ɵoptgroupslotchange", () => this._onSlotChange(), { capture: true });
397
+ this.addEventListener?.("ɵoptgroupslotchange", () => this._updateValueOptionState(), {
398
+ capture: true
399
+ });
398
400
  this.addEventListener?.("click", (e) => {
399
401
  const target = e.target;
400
402
  if (target.localName === "sbb-option") {
@@ -581,6 +583,7 @@ let SbbSelectElement = (() => {
581
583
  }
582
584
  firstUpdated(changedProperties) {
583
585
  super.firstUpdated(changedProperties);
586
+ this._updateValueOptionState();
584
587
  if (!isNextjs()) {
585
588
  this.startUpdate();
586
589
  this._setupSelect();
@@ -954,7 +957,7 @@ let SbbSelectElement = (() => {
954
957
  }
955
958
  this._updateDisplayValue();
956
959
  }
957
- _onSlotChange() {
960
+ _updateValueOptionState() {
958
961
  if (this._isValueManuallyAssigned) {
959
962
  this._updateOptionsFromValue();
960
963
  } else {
@@ -1034,7 +1037,7 @@ let SbbSelectElement = (() => {
1034
1037
  ?aria-multiselectable=${this.multiple}
1035
1038
  ${ref((containerRef) => this._optionContainer = containerRef)}
1036
1039
  >
1037
- <slot @slotchange=${this._onSlotChange}></slot>
1040
+ <slot @slotchange=${this._updateValueOptionState}></slot>
1038
1041
  </div>
1039
1042
  </div>
1040
1043
  </div>
@@ -1084,4 +1087,4 @@ let SbbSelectElement = (() => {
1084
1087
  export {
1085
1088
  SbbSelectElement
1086
1089
  };
1087
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11dGF0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvbXV0YXRpb24tY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eURlY2xhcmF0aW9uLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgaXNTZXJ2ZXIsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgZ2V0T3ZlcnJpZGUsIGhhbmRsZURpc3RpbmN0Q2hhbmdlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7XG4gIGlzTGVhbixcbiAgaXNOZXh0anMsXG4gIGlzU2FmYXJpLFxuICBpc1plcm9BbmltYXRpb25EdXJhdGlvbixcbiAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUsXG59IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGkxOG5TZWxlY3Rpb25SZXF1aXJlZCB9IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIFNiYkh5ZHJhdGlvbk1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZWFkb25seU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxuICBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbixcbn0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgaXNFdmVudE9uRWxlbWVudCwgb3ZlcmxheUdhcEZpeENvcm5lcnMsIHNldE92ZXJsYXlQb3NpdGlvbiB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi9jb3JlL3N0eWxlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRpdmlkZXJFbGVtZW50IH0gZnJvbSAnLi4vZGl2aWRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdEdyb3VwRWxlbWVudCwgU2JiT3B0aW9uRWxlbWVudCwgU2JiT3B0aW9uSGludEVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIHBhbmVsIHdpdGggc2VsZWN0YWJsZSBvcHRpb25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIG9wdGlvbnMuXG4gKiBAY3NzcHJvcCBbLS1zYmItc2VsZWN0LXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSAoVCA9IHN0cmluZyB8IHN0cmluZ1tdKSB8IG51bGxcbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5jbGFzcyBTYmJTZWxlY3RFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oXG4gICAgU2JiTmVnYXRpdmVNaXhpbihcbiAgICAgIFNiYkh5ZHJhdGlvbk1peGluKFxuICAgICAgICBTYmJSZXF1aXJlZE1peGluKFxuICAgICAgICAgIFNiYlJlYWRvbmx5TWl4aW4oXG4gICAgICAgICAgICBTYmJGb3JtQXNzb2NpYXRlZE1peGluPHR5cGVvZiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudD4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICksXG4gICksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG5cbiAgLy8gVE9ETzogZml4IHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dDogJ2lucHV0JyxcbiAgICBkaXNwbGF5dmFsdWVjaGFuZ2U6ICdkaXNwbGF5dmFsdWVjaGFuZ2UnLFxuICAgIGJlZm9yZW9wZW46ICdiZWZvcmVvcGVuJyxcbiAgICBvcGVuOiAnb3BlbicsXG4gICAgYmVmb3JlY2xvc2U6ICdiZWZvcmVjbG9zZScsXG4gICAgY2xvc2U6ICdjbG9zZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGFsbG93cyBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAZm9yY2VUeXBlKClcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9jbG9zZU9uRGlzYWJsZWRSZWFkb25seUNoYW5nZWQobmV3VmFsdWUpLFxuICApXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgQGdldE92ZXJyaWRlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCB2OiBib29sZWFuKTogYm9vbGVhbiA9PiB2IHx8IGUuaXNEaXNhYmxlZEV4dGVybmFsbHkoKSlcbiAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc29yIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFRbXSB8IFQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICB0aGlzLl9pc1ZhbHVlTWFudWFsbHlBc3NpZ25lZCA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUW10gfCBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgVFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIG0gb3Igcy5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ20nIHwgJ3MnID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqXG4gICAqIEZvcm0gdHlwZSBvZiBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0LW9uZSAvIHNlbGVjdC1tdWx0aXBsZSdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ3NlbGVjdC1tdWx0aXBsZScgOiAnc2VsZWN0LW9uZSc7XG4gIH1cblxuICAvKiogVGhlIHZhbHVlIGRpc3BsYXllZCBieSB0aGUgY29tcG9uZW50LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9kaXNwbGF5VmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX29yaWdpblJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29yaWdpbkVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ29udHJvbGxlciA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSAnY29tYm9ib3gnIGlucHV0IGVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50O1xuICB9XG5cbiAgLyoqIFJldHVybnMgYWxsIFNiYk9wdGlvbkVsZW1lbnRzIGZyb20gdGhpcyBzYmItc2VsZWN0IGluc3RhbmNlLiAqL1xuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogU2JiT3B0aW9uRWxlbWVudDxUPltdIHtcbiAgICBjb25zdCBvcHRpb25zOiBTYmJPcHRpb25FbGVtZW50PFQ+W10gPSBbXTtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJPcHRpb25FbGVtZW50PFQ+Pignc2JiLW9wdGlvbicpLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShvcHRpb24pO1xuICAgICAgb3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Lignb3B0aW9uc2VsZWN0aW9uY2hhbmdlJywgKGU6IEV2ZW50KSA9PiB0aGlzLl9vbk9wdGlvbkNoYW5nZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdvcHRpb25MYWJlbENoYW5nZWQnLCAoZTogRXZlbnQpID0+IHRoaXMuX29uT3B0aW9uTGFiZWxDaGFuZ2VkKGUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignybVvcHRncm91cHNsb3RjaGFuZ2UnLCAoKSA9PiB0aGlzLl9vblNsb3RDaGFuZ2UoKSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBTYmJTZWxlY3RFbGVtZW50PFQ+IHwgU2JiT3B0aW9uRWxlbWVudDxUPjtcbiAgICAgIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnc2JiLW9wdGlvbicpIHtcbiAgICAgICAgLy8gT3B0aW9uIGNsaWNrXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhdGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb250cm9sbGVyKFxuICAgICAgbmV3IE11dGF0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgICAgIGNvbmZpZzogeyBhdHRyaWJ1dGVGaWx0ZXI6IFsnYXJpYS1sYWJlbGxlZGJ5JywgJ2FyaWEtbGFiZWwnLCAnYXJpYS1kZXNjcmliZWRieSddIH0sXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLl9zeW5jQXJpYUxhYmVscygpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNBcmlhTGFiZWxzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQgfHwgaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZShcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgJ2FyaWEtbGFiZWxsZWRieScsXG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JyksXG4gICAgKTtcbiAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLl90cmlnZ2VyRWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpKTtcbiAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZShcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LFxuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknLFxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKSxcbiAgICApO1xuXG4gICAgLy8gVXNpbmcgdGhlIGFzc29jaWF0ZWQgbGFiZWxzIGlzIG9ubHkgYSBmYWxsYmFjay5cbiAgICAvLyBUaGUgZHJhd2JhY2sgaXMsIHRoYXQgaXQgZG9lc24ndCBnZXQgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxpc3Qgb2YgbGFiZWwgY2hhbmdlcy5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJlxuICAgICAgIXRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKSAmJlxuICAgICAgdGhpcy5pbnRlcm5hbHMubGFiZWxzLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZShcbiAgICAgICAgJ2FyaWEtbGFiZWwnLFxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuaW50ZXJuYWxzLmxhYmVscylcbiAgICAgICAgICAubWFwKChsYWJlbCkgPT4gbGFiZWwudGV4dENvbnRlbnQpXG4gICAgICAgICAgLmpvaW4oJywgJyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBPcGVucyB0aGUgc2VsZWN0aW9uIHBhbmVsLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlICE9PSAnY2xvc2VkJyB8fFxuICAgICAgIXRoaXMuX292ZXJsYXkgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuZm9ybURpc2FibGVkIHx8XG4gICAgICAhdGhpcy5kaXNwYXRjaEJlZm9yZU9wZW5FdmVudCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpPy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZCcsIHRydWUpO1xuICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBzZWxlY3Rpb24gcGFuZWwuICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcgfHwgIXRoaXMuZGlzcGF0Y2hCZWZvcmVDbG9zZUV2ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX29yaWdpbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGN1cnJlbnQgZGlzcGxheWVkIHZhbHVlLiAqL1xuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZSA/PyAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGFibGVPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ncm91cC1kaXNhYmxlZCcpKTtcbiAgfVxuXG4gIC8qKiBMaXN0ZW5zIHRvIG9wdGlvbiBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkVsZW1lbnQ8VD47XG4gICAgaWYgKHRhcmdldC5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5fb25PcHRpb25TZWxlY3RlZCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vbk9wdGlvbkRlc2VsZWN0ZWQodGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICAvKiogTGlzdGVucyB0byBvcHRpb24gY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25MYWJlbENoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkVsZW1lbnQ8VD47XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLl9nZXRTZWxlY3RlZCgpO1xuXG4gICAgaWYgKFxuICAgICAgKCFBcnJheS5pc0FycmF5KHNlbGVjdGVkKSAmJiB0YXJnZXQgIT09IHNlbGVjdGVkKSB8fFxuICAgICAgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpICYmICFzZWxlY3RlZC5pbmNsdWRlcyh0YXJnZXQpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGlzcGxheVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5fZ2V0U2VsZWN0ZWQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHNlbGVjdGVkLm1hcCgobykgPT4gby50ZXh0Q29udGVudD8udHJpbSgpKS5qb2luKCcsICcpIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gc2VsZWN0ZWQ/LnRleHRDb250ZW50Py50cmltKCkgfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZGlzcGxheXZhbHVlY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGB2YWx1ZWAgcHJvcGVydHkgc2hvdWxkIGJlIGFkYXB0ZWQgd2hlbiB0aGUgYG11bHRpcGxlYCBwcm9wZXJ0eSBjaGFuZ2VzOlxuICAgKiAgIC0gaWYgaXQgY2hhbmdlcyB0byB0cnVlLCB0aGUgJ3ZhbHVlJyBpcyBzZXQgdG8gYW4gYXJyYXk7XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIGZhbHNlLCB0aGUgZmlyc3QgYXZhaWxhYmxlIG9wdGlvbiBpcyBzZXQgYXMgJ3ZhbHVlJyBvdGhlcndpc2UgaXQncyBzZXQgdG8gbnVsbC5cbiAgICovXG4gIHByaXZhdGUgX29uTXVsdGlwbGVDaGFuZ2VkKGlzQ2hhbmdpbmdUb011bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzQ2hhbmdpbmdUb011bHRpcGxlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkIHx8IHRoaXMudmFsdWUgIT0gbnVsbCA/IFt0aGlzLnZhbHVlIGFzIFRdIDogW107XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWUubGVuZ3RoID8gdGhpcy52YWx1ZVswXSA6IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBgZGlzYWJsZWRgIG9yIHRoZSBgcmVhZG9ubHlgIHByb3BlcnRpZXMgYXJlIHNldCwgYW5kIHRoZSBwYW5lbCBpcyBvcGVuLCBjbG9zZSBpdC5cbiAgICovXG4gIHByaXZhdGUgX2Nsb3NlT25EaXNhYmxlZFJlYWRvbmx5Q2hhbmdlZChuZXdWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3BlbiAmJiBuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgLy8gRm9yd2FyZCBmb2N1cyB0byB0aGUgdHJpZ2dlciBlbGVtZW50LlxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5mb2N1cygpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYmx1cigpOiB2b2lkIHtcbiAgICAvLyBGb3J3YXJkIGJsdXIgdG8gdGhlIHRyaWdnZXIgZWxlbWVudC5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXMuY2xvc2VzdD8uKCdbZGF0YS1mb3JtLWZpZWxkXScpO1xuXG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgdGhpcy5fc3luY0FyaWFMYWJlbHMoKTtcblxuICAgIGlmICh0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKCFuYW1lICYmIHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zeW5jQXJpYUxhYmVscygpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdtdWx0aXBsZScpKSB7XG4gICAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdyZWFkT25seScpKSB7XG4gICAgICB0aGlzLl9jbG9zZU9uRGlzYWJsZWRSZWFkb25seUNoYW5nZWQodGhpcy5yZWFkT25seSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVzZXQgdmFsdWUgaXMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSAodGhlIHNldHVwIHZhbHVlKSwgbnVsbCBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSAodGhpcy5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykgPyB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA6IG51bGwpIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIG1hbnVhbGx5QXNzaWduZWQgfSA9IEpTT04ucGFyc2Uoc3RhdGUgYXMgc3RyaW5nKSBhcyB7XG4gICAgICAgIHZhbHVlOiBUIHwgVFtdO1xuICAgICAgICBtYW51YWxseUFzc2lnbmVkOiBib29sZWFuO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cbiAgICAgIGlmICh2YWx1ZXMuc29tZSgodikgPT4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgUmVzdG9yaW5nIGNvbXBsZXggb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkIGZvciBzYmItc2VsZWN0IHdpdGggc3RhdGUgJHtzdGF0ZX1gLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkID0gbWFudWFsbHlBc3NpZ25lZDtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLl91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byByZXN0b3JlIHNiYi1zZWxlY3Qgd2l0aCBzdGF0ZSAke3N0YXRlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmb3JtU3RhdGUoKTogRm9ybVJlc3RvcmVTdGF0ZSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IHRoaXMudmFsdWUsIG1hbnVhbGx5QXNzaWduZWQ6IHRoaXMuX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiRGl2aWRlckVsZW1lbnQgfCBTYmJPcHRpb25IaW50RWxlbWVudD4oXG4gICAgICAnc2JiLWRpdmlkZXIsIHNiYi1vcHRpb24taGludCcsXG4gICAgKS5mb3JFYWNoKChlbCkgPT4gKGVsLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGUpID0+IGUucmVxdWVzdFVwZGF0ZT8uKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZFZhbGlkYXRlKG5hbWU6IFByb3BlcnR5S2V5IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFZhbGlkYXRlKG5hbWUpIHx8IG5hbWUgPT09ICd2YWx1ZScgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICh0aGlzLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8udmFsdWUgIT09IHRoaXMudmFsdWUpIHx8XG4gICAgICAgICghdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgJiYgdGhpcy52YWx1ZSA9PSBudWxsKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuU2VsZWN0aW9uUmVxdWlyZWRbdGhpcy5fbGFuZ3VhZ2VDb250cm9sbGVyLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwU2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgdGhpcy5fZGlkTG9hZCA9IHRydWU7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIG9yaWdpbkVsZW1lbnQ7IGlmIHRoZSBjb21wb25lbnQgaXMgdXNlZCBpbiBhIHNiYi1mb3JtLWZpZWxkIHVzZXMgaXQsIG90aGVyd2lzZSB1c2VzIHRoZSBwYXJlbnRFbGVtZW50LiAqL1xuICBwcml2YXRlIF9zZXR1cE9yaWdpbigpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX29yaWdpbkVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9vcmlnaW5FbGVtZW50ID1cbiAgICAgIGZvcm1GaWVsZD8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uKCcjb3ZlcmxheS1hbmNob3InKSA/PyB0aGlzLnBhcmVudEVsZW1lbnQhO1xuICAgIGlmICh0aGlzLl9vcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICAgJ2RhdGEtb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJyxcbiAgICAgICAgISFmb3JtRmllbGQ/Lmhhc0F0dHJpYnV0ZT8uKCdib3JkZXJsZXNzJyksXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9vcmlnaW5FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG8gYXNzZXNzIHNjcmVlbi1yZWFkZXJzIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhcmlhIHBhdHRlcm5zIGFuZCBzaGFkb3cgRE9NLFxuICAgKiB3ZSBhcmUgZm9yY2VkIHRvIG1vdmUgdGhlICdjb21ib2JveCcgdHJpZ2dlciBlbGVtZW50IHRvIHRoZSBsaWdodCBET01cbiAgICovXG4gIHByaXZhdGUgX3NldHVwVHJpZ2dlcigpOiB2b2lkIHtcbiAgICAvLyBNb3ZlIHRoZSB0cmlnZ2VyIGJlZm9yZSB0aGUgc2JiLXNlbGVjdFxuICAgIHRoaXMucGFyZW50RWxlbWVudCEuaW5zZXJ0QmVmb3JlPy4odGhpcy5fdHJpZ2dlckVsZW1lbnQsIHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0T3ZlcmxheVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICB0aGlzLl9vcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLXNlbGVjdF9fY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICApO1xuICB9XG5cbiAgLy8gSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgLy8gVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLl9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9vcmlnaW5FbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaE9wZW5FdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpPy5oaWRlUG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5fcmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHVwZGF0ZXMgdGhlIGRpc3BsYXlWYWx1ZTsgaXQgYWxzbyBjbG9zZXMgdGhlIHNlbGVjdCBpZiBub3QgYG11bHRpcGxlYC4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25TZWxlY3RlZChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gW29wdGlvbi52YWx1ZSFdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUhKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgb3B0aW9uLnZhbHVlIV07XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlT3B0aW9uc0Zyb21WYWx1ZSgpO1xuICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudHMoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyB1bnNlbGVjdGVkIGluIGBtdWx0aXBsZWAsIHJlbW92ZXMgaXQgZnJvbSB2YWx1ZSBhbmQgdXBkYXRlcyBkaXNwbGF5VmFsdWUuICovXG4gIHByaXZhdGUgX29uT3B0aW9uRGVzZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChlbCkgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSk7XG4gICAgICB0aGlzLl91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk7XG4gICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hJbnB1dEV2ZW50cygpOiB2b2lkIHtcbiAgICAvKiogVGhlIGlucHV0IGV2ZW50IGZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgdGhlIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgKiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZFxuICAgICAqIGZvciBlYWNoIGFsdGVyYXRpb24gdG8gYW4gZWxlbWVudCdzIHZhbHVlLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHNjcm9sbCBhbmQgd2luZG93IHJlc2l6ZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIC8vIFdpdGhvdXQgY2FwdHVyZSwgb3RoZXIgc2Nyb2xsIGNvbnRleHRzIHdvdWxkIG5vdCBidWJibGUgdG8gdGhpcyBldmVudCBsaXN0ZW5lci5cbiAgICAgIC8vIENhcHR1cmUgYWxsb3dzIHVzIHRvIHJlYWN0IHRvIGFsbCBzY3JvbGwgY29udGV4dHMgaW4gdGhpcyBET00uXG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xuICAgICAgdGhpcy5fb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICB0aGlzLl9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGVja0ZvckxldHRlclNlbGVjdGlvbihldmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSB8fCB0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGVja0ZvckxldHRlclNlbGVjdGlvbihldmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdEJ5S2V5Ym9hcmQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQsIDApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5sZW5ndGggLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnQ2xlYXInIHx8XG4gICAgICAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBldmVudC5rZXkgIT09ICcgJyAmJlxuICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICFldmVudC5jdHJsS2V5ICYmXG4gICAgICAgICFldmVudC5tZXRhS2V5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gU2V0IHRpbWVvdXQgYW5kIHRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICAgIGlmICh0eXBlb2YgdGhpcy5fc2VhcmNoVGltZW91dCA9PT0gdHlwZW9mIHNldFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy5fc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX3NlYXJjaFN0cmluZyA9ICcnKSwgMTAwMCk7XG4gICAgdGhpcy5fc2VhcmNoU3RyaW5nICs9IGV2ZW50LmtleTtcblxuICAgIC8vIFJlb3JkZXIgdGhlIF9maWx0ZXJlZE9wdGlvbiBhcnJheSB0byBoYXZlIHRoZSBsYXN0IHNlbGVjdGVkIGVsZW1lbnQgYXQgdGhlIGJvdHRvbS5cbiAgICBjb25zdCBpbmRleEZvclNsaWNlOiBudW1iZXIgPSB0aGlzLl9hY3RpdmVJdGVtSW5kZXggKyAxO1xuICAgIGNvbnN0IHNlbGVjdGFibGVPcHRpb25zID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQgPSBbXG4gICAgICAuLi5zZWxlY3RhYmxlT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnNlbGVjdGFibGVPcHRpb25zLnNsaWNlKDAsIGluZGV4Rm9yU2xpY2UpLFxuICAgIF07XG5cbiAgICBjb25zdCBtYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpID09PSAwLFxuICAgICk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAvLyBJZiBhbiBleGFjdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgZ28gdG8gdGhhdCBvcHRpb24uXG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCBzZWxlY3RhYmxlT3B0aW9ucy5pbmRleE9mKG1hdGNoKSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX3NlYXJjaFN0cmluZy5sZW5ndGggPiAxICYmXG4gICAgICBuZXcgUmVnRXhwKGBeJHt0aGlzLl9zZWFyY2hTdHJpbmcuY2hhckF0KDApfSokYCkudGVzdCh0aGlzLl9zZWFyY2hTdHJpbmcpXG4gICAgKSB7XG4gICAgICAvLyBJZiBubyBleGFjdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCBidXQgdGhlIHN0cmluZyB0byBzZWFyY2ggaXMgbWFkZSBieSB0aGUgc2FtZSByZXBlYXRlZCBsZXR0ZXIsXG4gICAgICAvLyBnbyB0byB0aGUgZmlyc3QgZWxlbWVudCwgaWYgZXhpc3RzLCB0aGF0IG1hdGNoZXMgdGhlIGxldHRlci5cbiAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24udGV4dENvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLl9zZWFyY2hTdHJpbmdbMF0udG9Mb3dlckNhc2UoKSkgPT09IDAsXG4gICAgICApO1xuICAgICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgc2VsZWN0YWJsZU9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlLZXlib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9zZWxlY3RhYmxlT3B0aW9ucygpW3RoaXMuX2FjdGl2ZUl0ZW1JbmRleF07XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgYWN0aXZlT3B0aW9uPy5bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKCFhY3RpdmVPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aGlzLl9zZWxlY3RhYmxlT3B0aW9ucygpO1xuXG4gICAgLy8gUHJldmVudCBrZXlib2FyZCBuYXZpZ2F0aW9uIGlmIGFsbCBvcHRpb25zIGFyZSBkaXNhYmxlZFxuICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgIGluZGV4ID8/IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCwgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dE9wdGlvbiA9IGZpbHRlcmVkT3B0aW9uc1tuZXh0SW5kZXhdO1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IGZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgdGhpcy5fc2V0QWN0aXZlRWxlbWVudChuZXh0T3B0aW9uLCBhY3RpdmVPcHRpb24pO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9zZXRTZWxlY3RlZEVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py5zaGlmdEtleSkge1xuICAgICAgbmV4dE9wdGlvblsnc2VsZWN0VmlhVXNlckludGVyYWN0aW9uJ10oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQ8VD4sXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudDxUPiB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIGlmIChzZXRBY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRBY3RpdmVPcHRpb24uaWQpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91c1xuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb24uc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRTZWxlY3RlZEVsZW1lbnQoXG4gICAgbmV4dEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudDxUPixcbiAgICBsYXN0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50PFQ+LFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uWydzZWxlY3RWaWFVc2VySW50ZXJhY3Rpb24nXSh0cnVlKTtcblxuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX3NlbGVjdGFibGVPcHRpb25zKClbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV07XG5cbiAgICBjb25zdCBkaXNwbGF5VmFsdWVzID0gW107XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgdGhpcy5vcHRpb25zKSB7XG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICBkaXNwbGF5VmFsdWVzLnB1c2gob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVEaXNwbGF5VmFsdWUoKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoXG4gICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVGcm9tT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBUW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKG9wdGlvbi52YWx1ZSEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uID09PSBzZWxlY3RlZCk7XG4gICAgICB0aGlzLl92YWx1ZSA9IHNlbGVjdGVkLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TbG90Q2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc1ZhbHVlTWFudWFsbHlBc3NpZ25lZCkge1xuICAgICAgdGhpcy5fdXBkYXRlT3B0aW9uc0Zyb21WYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cGRhdGVWYWx1ZUZyb21PcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0ZWQoKTogU2JiT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdGlvbkVsZW1lbnQ8VD5bXSB8IG51bGwge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKSA/PyBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgfHwgdGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2VkJzoge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShcbiAgICBwbGFjZWhvbGRlcjogVGVtcGxhdGVSZXN1bHQsXG4gICk6IChUZW1wbGF0ZVJlc3VsdCB8IFByb21pc2U8VGVtcGxhdGVSZXN1bHQ+KVtdIHtcbiAgICByZXR1cm4gW3RoaXMuX2RlZmVycmVkRGlzcGxheVZhbHVlKHBsYWNlaG9sZGVyKSwgcGxhY2Vob2xkZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZGVmZXJyZWREaXNwbGF5VmFsdWUocGxhY2Vob2xkZXI6IFRlbXBsYXRlUmVzdWx0KTogUHJvbWlzZTxUZW1wbGF0ZVJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlID8gaHRtbGAke3RoaXMuX2Rpc3BsYXlWYWx1ZX1gIDogcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDwhLS0gVGhpcyBlbGVtZW50IGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGlnaHQgRE9NIHRvIGFsbG93IHNjcmVlblxuICAgICAgcmVhZGVycyB0byB3b3JrIHByb3Blcmx5IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgc2JiLXNlbGVjdC10cmlnZ2VyXCJcbiAgICAgICAgdGFiaW5kZXg9JHt0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkID8gbm90aGluZyA6ICcwJ31cbiAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICBhcmlhLXJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZC50b1N0cmluZygpfVxuICAgICAgICBhcmlhLWNvbnRyb2xzPSR7dGhpcy5fb3ZlcmxheUlkfVxuICAgICAgICBhcmlhLW93bnM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIEBrZXlkb3duPSR7dGhpcy5fb25LZXlEb3dufVxuICAgICAgICBAY2xpY2s9JHt0aGlzLl90b2dnbGVPcGVuaW5nfVxuICAgICAgICAke3JlZigocmVmKSA9PiAodGhpcy5fdHJpZ2dlckVsZW1lbnQgPSByZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgID5cbiAgICAgICAgJHt1bnRpbCguLi50aGlzLl9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShodG1sYDxzcGFuPiR7dGhpcy5wbGFjZWhvbGRlcn08L3NwYW4+YCkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVmlzdWFsbHkgZGlzcGxheSB0aGUgdmFsdWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAke3VudGlsKFxuICAgICAgICAgIC4uLnRoaXMuX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKFxuICAgICAgICAgICAgaHRtbGA8c3BhbiBjbGFzcz1cInNiYi1zZWxlY3RfX3RyaWdnZXItLXBsYWNlaG9sZGVyXCI+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gLFxuICAgICAgICAgICksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19jb250YWluZXJcIiBwb3BvdmVyPVwibWFudWFsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19nYXAtZml4XCI+JHtvdmVybGF5R2FwRml4Q29ybmVycygpfTwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfVxuICAgICAgICAgIGNsYXNzPVwic2JiLXNlbGVjdF9fcGFuZWxcIlxuICAgICAgICAgICR7cmVmKChkaWFsb2dSZWYpID0+ICh0aGlzLl9vdmVybGF5ID0gZGlhbG9nUmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD0keyFhcmlhUm9sZU9uSG9zdCA/IHRoaXMuX292ZXJsYXlJZCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLXNlbGVjdF9fb3B0aW9uc1wiXG4gICAgICAgICAgICAgIHJvbGU9JHshYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBub3RoaW5nfVxuICAgICAgICAgICAgICA/YXJpYS1tdWx0aXNlbGVjdGFibGU9JHt0aGlzLm11bHRpcGxlfVxuICAgICAgICAgICAgICAke3JlZigoY29udGFpbmVyUmVmKSA9PiAodGhpcy5fb3B0aW9uQ29udGFpbmVyID0gY29udGFpbmVyUmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fb25TbG90Q2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2VsZWN0JzogU2JiU2VsZWN0RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInN0YXRlIiwicmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBD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
1090
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11dGF0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvbXV0YXRpb24tY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eURlY2xhcmF0aW9uLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgaXNTZXJ2ZXIsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgZ2V0T3ZlcnJpZGUsIGhhbmRsZURpc3RpbmN0Q2hhbmdlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7XG4gIGlzTGVhbixcbiAgaXNOZXh0anMsXG4gIGlzU2FmYXJpLFxuICBpc1plcm9BbmltYXRpb25EdXJhdGlvbixcbiAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUsXG59IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGkxOG5TZWxlY3Rpb25SZXF1aXJlZCB9IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG4gIFNiYkh5ZHJhdGlvbk1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZWFkb25seU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxuICBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbixcbn0gZnJvbSAnLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgaXNFdmVudE9uRWxlbWVudCwgb3ZlcmxheUdhcEZpeENvcm5lcnMsIHNldE92ZXJsYXlQb3NpdGlvbiB9IGZyb20gJy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi9jb3JlL3N0eWxlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRpdmlkZXJFbGVtZW50IH0gZnJvbSAnLi4vZGl2aWRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdEdyb3VwRWxlbWVudCwgU2JiT3B0aW9uRWxlbWVudCwgU2JiT3B0aW9uSGludEVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIHBhbmVsIHdpdGggc2VsZWN0YWJsZSBvcHRpb25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIG9wdGlvbnMuXG4gKiBAY3NzcHJvcCBbLS1zYmItc2VsZWN0LXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSAoVCA9IHN0cmluZyB8IHN0cmluZ1tdKSB8IG51bGxcbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlbGVjdCcpXG5jbGFzcyBTYmJTZWxlY3RFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oXG4gICAgU2JiTmVnYXRpdmVNaXhpbihcbiAgICAgIFNiYkh5ZHJhdGlvbk1peGluKFxuICAgICAgICBTYmJSZXF1aXJlZE1peGluKFxuICAgICAgICAgIFNiYlJlYWRvbmx5TWl4aW4oXG4gICAgICAgICAgICBTYmJGb3JtQXNzb2NpYXRlZE1peGluPHR5cGVvZiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudD4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICksXG4gICksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG5cbiAgLy8gVE9ETzogZml4IHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dDogJ2lucHV0JyxcbiAgICBkaXNwbGF5dmFsdWVjaGFuZ2U6ICdkaXNwbGF5dmFsdWVjaGFuZ2UnLFxuICAgIGJlZm9yZW9wZW46ICdiZWZvcmVvcGVuJyxcbiAgICBvcGVuOiAnb3BlbicsXG4gICAgYmVmb3JlY2xvc2U6ICdiZWZvcmVjbG9zZScsXG4gICAgY2xvc2U6ICdjbG9zZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGFsbG93cyBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAZm9yY2VUeXBlKClcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9jbG9zZU9uRGlzYWJsZWRSZWFkb25seUNoYW5nZWQobmV3VmFsdWUpLFxuICApXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgQGdldE92ZXJyaWRlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCB2OiBib29sZWFuKTogYm9vbGVhbiA9PiB2IHx8IGUuaXNEaXNhYmxlZEV4dGVybmFsbHkoKSlcbiAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc29yIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFRbXSB8IFQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICB0aGlzLl9pc1ZhbHVlTWFudWFsbHlBc3NpZ25lZCA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUW10gfCBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgVFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIG0gb3Igcy5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ20nIHwgJ3MnID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqXG4gICAqIEZvcm0gdHlwZSBvZiBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0LW9uZSAvIHNlbGVjdC1tdWx0aXBsZSdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ3NlbGVjdC1tdWx0aXBsZScgOiAnc2VsZWN0LW9uZSc7XG4gIH1cblxuICAvKiogVGhlIHZhbHVlIGRpc3BsYXllZCBieSB0aGUgY29tcG9uZW50LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9kaXNwbGF5VmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX29yaWdpblJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29yaWdpbkVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX292ZXJsYXlJZCA9IGBzYmItc2VsZWN0LSR7KytuZXh0SWR9YDtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3NlYXJjaFRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfc2VhcmNoU3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2RpZExvYWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNQb2ludGVyRG93bkV2ZW50T25NZW51OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ29udHJvbGxlciA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSAnY29tYm9ib3gnIGlucHV0IGVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50O1xuICB9XG5cbiAgLyoqIFJldHVybnMgYWxsIFNiYk9wdGlvbkVsZW1lbnRzIGZyb20gdGhpcyBzYmItc2VsZWN0IGluc3RhbmNlLiAqL1xuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogU2JiT3B0aW9uRWxlbWVudDxUPltdIHtcbiAgICBjb25zdCBvcHRpb25zOiBTYmJPcHRpb25FbGVtZW50PFQ+W10gPSBbXTtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJPcHRpb25FbGVtZW50PFQ+Pignc2JiLW9wdGlvbicpLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShvcHRpb24pO1xuICAgICAgb3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Lignb3B0aW9uc2VsZWN0aW9uY2hhbmdlJywgKGU6IEV2ZW50KSA9PiB0aGlzLl9vbk9wdGlvbkNoYW5nZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdvcHRpb25MYWJlbENoYW5nZWQnLCAoZTogRXZlbnQpID0+IHRoaXMuX29uT3B0aW9uTGFiZWxDaGFuZ2VkKGUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignybVvcHRncm91cHNsb3RjaGFuZ2UnLCAoKSA9PiB0aGlzLl91cGRhdGVWYWx1ZU9wdGlvblN0YXRlKCksIHtcbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIFNiYlNlbGVjdEVsZW1lbnQ8VD4gfCBTYmJPcHRpb25FbGVtZW50PFQ+O1xuICAgICAgaWYgKHRhcmdldC5sb2NhbE5hbWUgPT09ICdzYmItb3B0aW9uJykge1xuICAgICAgICAvLyBPcHRpb24gY2xpY2tcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmICF0YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl90b2dnbGVPcGVuaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgTXV0YXRpb25Db250cm9sbGVyKHRoaXMsIHtcbiAgICAgICAgY29uZmlnOiB7IGF0dHJpYnV0ZUZpbHRlcjogWydhcmlhLWxhYmVsbGVkYnknLCAnYXJpYS1sYWJlbCcsICdhcmlhLWRlc2NyaWJlZGJ5J10gfSxcbiAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuX3N5bmNBcmlhTGFiZWxzKCksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0FyaWFMYWJlbHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCB8fCBpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAnYXJpYS1sYWJlbGxlZGJ5JyxcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKSxcbiAgICApO1xuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnYXJpYS1sYWJlbCcsIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykpO1xuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieScsXG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpLFxuICAgICk7XG5cbiAgICAvLyBVc2luZyB0aGUgYXNzb2NpYXRlZCBsYWJlbHMgaXMgb25seSBhIGZhbGxiYWNrLlxuICAgIC8vIFRoZSBkcmF3YmFjayBpcywgdGhhdCBpdCBkb2Vzbid0IGdldCB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlzdCBvZiBsYWJlbCBjaGFuZ2VzLlxuICAgIGlmIChcbiAgICAgICF0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmXG4gICAgICAhdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpICYmXG4gICAgICB0aGlzLmludGVybmFscy5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKFxuICAgICAgICAnYXJpYS1sYWJlbCcsXG4gICAgICAgIEFycmF5LmZyb20odGhpcy5pbnRlcm5hbHMubGFiZWxzKVxuICAgICAgICAgIC5tYXAoKGxhYmVsKSA9PiBsYWJlbC50ZXh0Q29udGVudClcbiAgICAgICAgICAuam9pbignLCAnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBzZWxlY3Rpb24gcGFuZWwuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnIHx8XG4gICAgICAhdGhpcy5fb3ZlcmxheSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5mb3JtRGlzYWJsZWQgfHxcbiAgICAgICF0aGlzLmRpc3BhdGNoQmVmb3JlT3BlbkV2ZW50KClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KCcuc2JiLXNlbGVjdF9fY29udGFpbmVyJyk/LnNob3dQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLl9vcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aGlzLl9vcmlnaW5SZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5fb3JpZ2luRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYGNsb3NlZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW9wdGlvbnMtcGFuZWwtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBkaXNwbGF5ZWQgdmFsdWUuICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0YWJsZU9wdGlvbnMoKTogU2JiT3B0aW9uRWxlbWVudDxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0LmRpc2FibGVkICYmICFvcHQuaGFzQXR0cmlidXRlKCdkYXRhLWdyb3VwLWRpc2FibGVkJykpO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDxUPjtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBMaXN0ZW5zIHRvIG9wdGlvbiBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkxhYmVsQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDxUPjtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG5cbiAgICBpZiAoXG4gICAgICAoIUFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpICYmIHRhcmdldCAhPT0gc2VsZWN0ZWQpIHx8XG4gICAgICAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgJiYgIXNlbGVjdGVkLmluY2x1ZGVzKHRhcmdldCkpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEaXNwbGF5VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLl9nZXRTZWxlY3RlZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gc2VsZWN0ZWQubWFwKChvKSA9PiBvLnRleHRDb250ZW50Py50cmltKCkpLmpvaW4oJywgJykgfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBzZWxlY3RlZD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdkaXNwbGF5dmFsdWVjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYHZhbHVlYCBwcm9wZXJ0eSBzaG91bGQgYmUgYWRhcHRlZCB3aGVuIHRoZSBgbXVsdGlwbGVgIHByb3BlcnR5IGNoYW5nZXM6XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIHRydWUsIHRoZSAndmFsdWUnIGlzIHNldCB0byBhbiBhcnJheTtcbiAgICogICAtIGlmIGl0IGNoYW5nZXMgdG8gZmFsc2UsIHRoZSBmaXJzdCBhdmFpbGFibGUgb3B0aW9uIGlzIHNldCBhcyAndmFsdWUnIG90aGVyd2lzZSBpdCdzIHNldCB0byBudWxsLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25NdWx0aXBsZUNoYW5nZWQoaXNDaGFuZ2luZ1RvTXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNDaGFuZ2luZ1RvTXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgfHwgdGhpcy52YWx1ZSAhPSBudWxsID8gW3RoaXMudmFsdWUgYXMgVF0gOiBbXTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZS5sZW5ndGggPyB0aGlzLnZhbHVlWzBdIDogbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGBkaXNhYmxlZGAgb3IgdGhlIGByZWFkb25seWAgcHJvcGVydGllcyBhcmUgc2V0LCBhbmQgdGhlIHBhbmVsIGlzIG9wZW4sIGNsb3NlIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSBfY2xvc2VPbkRpc2FibGVkUmVhZG9ubHlDaGFuZ2VkKG5ld1ZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuICYmIG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlT3B0aW9uU3RhdGUoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgLy8gRm9yd2FyZCBmb2N1cyB0byB0aGUgdHJpZ2dlciBlbGVtZW50LlxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5mb2N1cygpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYmx1cigpOiB2b2lkIHtcbiAgICAvLyBGb3J3YXJkIGJsdXIgdG8gdGhlIHRyaWdnZXIgZWxlbWVudC5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpID8/IHRoaXMuY2xvc2VzdD8uKCdbZGF0YS1mb3JtLWZpZWxkXScpO1xuXG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IGZvcm1GaWVsZC5oYXNBdHRyaWJ1dGUoJ25lZ2F0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N5bmNQcm9wZXJ0aWVzKCk7XG4gICAgdGhpcy5fc3luY0FyaWFMYWJlbHMoKTtcblxuICAgIGlmICh0aGlzLl9kaWRMb2FkKSB7XG4gICAgICB0aGlzLl9zZXR1cE9yaWdpbigpO1xuICAgICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKCFuYW1lICYmIHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zeW5jQXJpYUxhYmVscygpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdtdWx0aXBsZScpKSB7XG4gICAgICB0aGlzLl9zeW5jUHJvcGVydGllcygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdyZWFkT25seScpKSB7XG4gICAgICB0aGlzLl9jbG9zZU9uRGlzYWJsZWRSZWFkb25seUNoYW5nZWQodGhpcy5yZWFkT25seSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTsgLy8gVGFrZSBiYWNrIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcHJldmlvdXNseSBtb3ZlZCB0byB0aGUgbGlnaHQgRE9NXG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVzZXQgdmFsdWUgaXMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSAodGhlIHNldHVwIHZhbHVlKSwgbnVsbCBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSAodGhpcy5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykgPyB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA6IG51bGwpIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIG1hbnVhbGx5QXNzaWduZWQgfSA9IEpTT04ucGFyc2Uoc3RhdGUgYXMgc3RyaW5nKSBhcyB7XG4gICAgICAgIHZhbHVlOiBUIHwgVFtdO1xuICAgICAgICBtYW51YWxseUFzc2lnbmVkOiBib29sZWFuO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cbiAgICAgIGlmICh2YWx1ZXMuc29tZSgodikgPT4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgUmVzdG9yaW5nIGNvbXBsZXggb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkIGZvciBzYmItc2VsZWN0IHdpdGggc3RhdGUgJHtzdGF0ZX1gLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkID0gbWFudWFsbHlBc3NpZ25lZDtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLl91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byByZXN0b3JlIHNiYi1zZWxlY3Qgd2l0aCBzdGF0ZSAke3N0YXRlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmb3JtU3RhdGUoKTogRm9ybVJlc3RvcmVTdGF0ZSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IHRoaXMudmFsdWUsIG1hbnVhbGx5QXNzaWduZWQ6IHRoaXMuX2lzVmFsdWVNYW51YWxseUFzc2lnbmVkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiRGl2aWRlckVsZW1lbnQgfCBTYmJPcHRpb25IaW50RWxlbWVudD4oXG4gICAgICAnc2JiLWRpdmlkZXIsIHNiYi1vcHRpb24taGludCcsXG4gICAgKS5mb3JFYWNoKChlbCkgPT4gKGVsLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKCdkYXRhLW5lZ2F0aXZlJywgdGhpcy5uZWdhdGl2ZSk7XG4gICAgICBlbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1tdWx0aXBsZScsIHRoaXMubXVsdGlwbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLW9wdGlvbiwgc2JiLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGUpID0+IGUucmVxdWVzdFVwZGF0ZT8uKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZFZhbGlkYXRlKG5hbWU6IFByb3BlcnR5S2V5IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFZhbGlkYXRlKG5hbWUpIHx8IG5hbWUgPT09ICd2YWx1ZScgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICh0aGlzLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8udmFsdWUgIT09IHRoaXMudmFsdWUpIHx8XG4gICAgICAgICghdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgJiYgdGhpcy52YWx1ZSA9PSBudWxsKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuU2VsZWN0aW9uUmVxdWlyZWRbdGhpcy5fbGFuZ3VhZ2VDb250cm9sbGVyLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwU2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgdGhpcy5fZGlkTG9hZCA9IHRydWU7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIG9yaWdpbkVsZW1lbnQ7IGlmIHRoZSBjb21wb25lbnQgaXMgdXNlZCBpbiBhIHNiYi1mb3JtLWZpZWxkIHVzZXMgaXQsIG90aGVyd2lzZSB1c2VzIHRoZSBwYXJlbnRFbGVtZW50LiAqL1xuICBwcml2YXRlIF9zZXR1cE9yaWdpbigpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX29yaWdpbkVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9vcmlnaW5FbGVtZW50ID1cbiAgICAgIGZvcm1GaWVsZD8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uKCcjb3ZlcmxheS1hbmNob3InKSA/PyB0aGlzLnBhcmVudEVsZW1lbnQhO1xuICAgIGlmICh0aGlzLl9vcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZShcbiAgICAgICAgJ2RhdGEtb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJyxcbiAgICAgICAgISFmb3JtRmllbGQ/Lmhhc0F0dHJpYnV0ZT8uKCdib3JkZXJsZXNzJyksXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9vcmlnaW5FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG8gYXNzZXNzIHNjcmVlbi1yZWFkZXJzIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhcmlhIHBhdHRlcm5zIGFuZCBzaGFkb3cgRE9NLFxuICAgKiB3ZSBhcmUgZm9yY2VkIHRvIG1vdmUgdGhlICdjb21ib2JveCcgdHJpZ2dlciBlbGVtZW50IHRvIHRoZSBsaWdodCBET01cbiAgICovXG4gIHByaXZhdGUgX3NldHVwVHJpZ2dlcigpOiB2b2lkIHtcbiAgICAvLyBNb3ZlIHRoZSB0cmlnZ2VyIGJlZm9yZSB0aGUgc2JiLXNlbGVjdFxuICAgIHRoaXMucGFyZW50RWxlbWVudCEuaW5zZXJ0QmVmb3JlPy4odGhpcy5fdHJpZ2dlckVsZW1lbnQsIHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0T3ZlcmxheVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICB0aGlzLl9vcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLXNlbGVjdF9fY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICApO1xuICB9XG5cbiAgLy8gSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgLy8gVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLl9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9vcmlnaW5FbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaE9wZW5FdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpPy5oaWRlUG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgdGhpcy5fcmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3B0aW9uQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gIH1cblxuICAvKiogV2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHVwZGF0ZXMgdGhlIGRpc3BsYXlWYWx1ZTsgaXQgYWxzbyBjbG9zZXMgdGhlIHNlbGVjdCBpZiBub3QgYG11bHRpcGxlYC4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25TZWxlY3RlZChvcHRpb246IFNiYk9wdGlvbkVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gW29wdGlvbi52YWx1ZSFdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUhKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgb3B0aW9uLnZhbHVlIV07XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlT3B0aW9uc0Zyb21WYWx1ZSgpO1xuICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudHMoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyB1bnNlbGVjdGVkIGluIGBtdWx0aXBsZWAsIHJlbW92ZXMgaXQgZnJvbSB2YWx1ZSBhbmQgdXBkYXRlcyBkaXNwbGF5VmFsdWUuICovXG4gIHByaXZhdGUgX29uT3B0aW9uRGVzZWxlY3RlZChvcHRpb25TZWxlY3Rpb25DaGFuZ2U6IFNiYk9wdGlvbkVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChlbCkgPT4gZWwgIT09IG9wdGlvblNlbGVjdGlvbkNoYW5nZS52YWx1ZSk7XG4gICAgICB0aGlzLl91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk7XG4gICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hJbnB1dEV2ZW50cygpOiB2b2lkIHtcbiAgICAvKiogVGhlIGlucHV0IGV2ZW50IGZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgdGhlIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgKiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZFxuICAgICAqIGZvciBlYWNoIGFsdGVyYXRpb24gdG8gYW4gZWxlbWVudCdzIHZhbHVlLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hPcGVuUGFuZWxFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBvdmVybGF5IHBvc2l0aW9uIG9uIHNjcm9sbCBhbmQgd2luZG93IHJlc2l6ZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIC8vIFdpdGhvdXQgY2FwdHVyZSwgb3RoZXIgc2Nyb2xsIGNvbnRleHRzIHdvdWxkIG5vdCBidWJibGUgdG8gdGhpcyBldmVudCBsaXN0ZW5lci5cbiAgICAgIC8vIENhcHR1cmUgYWxsb3dzIHVzIHRvIHJlYWN0IHRvIGFsbCBzY3JvbGwgY29udGV4dHMgaW4gdGhpcyBET00uXG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBtZW51IG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xuICAgICAgdGhpcy5fb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICB0aGlzLl9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGVja0ZvckxldHRlclNlbGVjdGlvbihldmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vcGVuZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSB8fCB0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGVja0ZvckxldHRlclNlbGVjdGlvbihldmVudCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdEJ5S2V5Ym9hcmQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQsIDApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5sZW5ndGggLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnQ2xlYXInIHx8XG4gICAgICAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBldmVudC5rZXkgIT09ICcgJyAmJlxuICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICFldmVudC5jdHJsS2V5ICYmXG4gICAgICAgICFldmVudC5tZXRhS2V5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zZXROZXh0QWN0aXZlT3B0aW9uQnlUZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gU2V0IHRpbWVvdXQgYW5kIHRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICAgIGlmICh0eXBlb2YgdGhpcy5fc2VhcmNoVGltZW91dCA9PT0gdHlwZW9mIHNldFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy5fc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX3NlYXJjaFN0cmluZyA9ICcnKSwgMTAwMCk7XG4gICAgdGhpcy5fc2VhcmNoU3RyaW5nICs9IGV2ZW50LmtleTtcblxuICAgIC8vIFJlb3JkZXIgdGhlIF9maWx0ZXJlZE9wdGlvbiBhcnJheSB0byBoYXZlIHRoZSBsYXN0IHNlbGVjdGVkIGVsZW1lbnQgYXQgdGhlIGJvdHRvbS5cbiAgICBjb25zdCBpbmRleEZvclNsaWNlOiBudW1iZXIgPSB0aGlzLl9hY3RpdmVJdGVtSW5kZXggKyAxO1xuICAgIGNvbnN0IHNlbGVjdGFibGVPcHRpb25zID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQgPSBbXG4gICAgICAuLi5zZWxlY3RhYmxlT3B0aW9ucy5zbGljZShpbmRleEZvclNsaWNlKSxcbiAgICAgIC4uLnNlbGVjdGFibGVPcHRpb25zLnNsaWNlKDAsIGluZGV4Rm9yU2xpY2UpLFxuICAgIF07XG5cbiAgICBjb25zdCBtYXRjaCA9IGZpbHRlcmVkT3B0aW9uc1NvcnRlZC5maW5kKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpID09PSAwLFxuICAgICk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAvLyBJZiBhbiBleGFjdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgZ28gdG8gdGhhdCBvcHRpb24uXG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCBzZWxlY3RhYmxlT3B0aW9ucy5pbmRleE9mKG1hdGNoKSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX3NlYXJjaFN0cmluZy5sZW5ndGggPiAxICYmXG4gICAgICBuZXcgUmVnRXhwKGBeJHt0aGlzLl9zZWFyY2hTdHJpbmcuY2hhckF0KDApfSokYCkudGVzdCh0aGlzLl9zZWFyY2hTdHJpbmcpXG4gICAgKSB7XG4gICAgICAvLyBJZiBubyBleGFjdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCBidXQgdGhlIHN0cmluZyB0byBzZWFyY2ggaXMgbWFkZSBieSB0aGUgc2FtZSByZXBlYXRlZCBsZXR0ZXIsXG4gICAgICAvLyBnbyB0byB0aGUgZmlyc3QgZWxlbWVudCwgaWYgZXhpc3RzLCB0aGF0IG1hdGNoZXMgdGhlIGxldHRlci5cbiAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24udGV4dENvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLl9zZWFyY2hTdHJpbmdbMF0udG9Mb3dlckNhc2UoKSkgPT09IDAsXG4gICAgICApO1xuICAgICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgc2VsZWN0YWJsZU9wdGlvbnMuaW5kZXhPZihmaXJzdE1hdGNoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1hdGNoIGZvdW5kLCBjbGVhciB0aGUgdGltZW91dCBhbmQgdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlYXJjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlLZXlib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9zZWxlY3RhYmxlT3B0aW9ucygpW3RoaXMuX2FjdGl2ZUl0ZW1JbmRleF07XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgYWN0aXZlT3B0aW9uPy5bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKCFhY3RpdmVPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aGlzLl9zZWxlY3RhYmxlT3B0aW9ucygpO1xuXG4gICAgLy8gUHJldmVudCBrZXlib2FyZCBuYXZpZ2F0aW9uIGlmIGFsbCBvcHRpb25zIGFyZSBkaXNhYmxlZFxuICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgIGluZGV4ID8/IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCwgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dE9wdGlvbiA9IGZpbHRlcmVkT3B0aW9uc1tuZXh0SW5kZXhdO1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IGZpbHRlcmVkT3B0aW9uc1t0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgdGhpcy5fc2V0QWN0aXZlRWxlbWVudChuZXh0T3B0aW9uLCBhY3RpdmVPcHRpb24pO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9zZXRTZWxlY3RlZEVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py5zaGlmdEtleSkge1xuICAgICAgbmV4dE9wdGlvblsnc2VsZWN0VmlhVXNlckludGVyYWN0aW9uJ10oIW5leHRPcHRpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBY3RpdmVFbGVtZW50KFxuICAgIG5leHRBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQ8VD4sXG4gICAgbGFzdEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudDxUPiB8IG51bGwgPSBudWxsLFxuICAgIHNldEFjdGl2ZURlc2NlbmRhbnQgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICBuZXh0QWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIGlmIChzZXRBY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRBY3RpdmVPcHRpb24uaWQpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91c1xuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb24uc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRTZWxlY3RlZEVsZW1lbnQoXG4gICAgbmV4dEFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uRWxlbWVudDxUPixcbiAgICBsYXN0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50PFQ+LFxuICApOiB2b2lkIHtcbiAgICBuZXh0QWN0aXZlT3B0aW9uWydzZWxlY3RWaWFVc2VySW50ZXJhY3Rpb24nXSh0cnVlKTtcblxuICAgIGlmIChsYXN0QWN0aXZlT3B0aW9uICYmIGxhc3RBY3RpdmVPcHRpb24gIT09IG5leHRBY3RpdmVPcHRpb24pIHtcbiAgICAgIGxhc3RBY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEFjdGl2ZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX3NlbGVjdGFibGVPcHRpb25zKClbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICBhY3RpdmVFbGVtZW50LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV07XG5cbiAgICBjb25zdCBkaXNwbGF5VmFsdWVzID0gW107XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgdGhpcy5vcHRpb25zKSB7XG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICBkaXNwbGF5VmFsdWVzLnB1c2gob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVEaXNwbGF5VmFsdWUoKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoXG4gICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVGcm9tT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBUW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKG9wdGlvbi52YWx1ZSEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uID09PSBzZWxlY3RlZCk7XG4gICAgICB0aGlzLl92YWx1ZSA9IHNlbGVjdGVkLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVPcHRpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWVGcm9tT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNlbGVjdGVkKCk6IFNiYk9wdGlvbkVsZW1lbnQ8VD4gfCBTYmJPcHRpb25FbGVtZW50PFQ+W10gfCBudWxsIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3RlZCkgPz8gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmZvY3VzKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgIGNhc2UgJ29wZW5lZCc6IHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2Nsb3NlZCc6IHtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoXG4gICAgcGxhY2Vob2xkZXI6IFRlbXBsYXRlUmVzdWx0LFxuICApOiAoVGVtcGxhdGVSZXN1bHQgfCBQcm9taXNlPFRlbXBsYXRlUmVzdWx0PilbXSB7XG4gICAgcmV0dXJuIFt0aGlzLl9kZWZlcnJlZERpc3BsYXlWYWx1ZShwbGFjZWhvbGRlciksIHBsYWNlaG9sZGVyXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2RlZmVycmVkRGlzcGxheVZhbHVlKHBsYWNlaG9sZGVyOiBUZW1wbGF0ZVJlc3VsdCk6IFByb21pc2U8VGVtcGxhdGVSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5oeWRyYXRpb25SZXF1aXJlZCkge1xuICAgICAgYXdhaXQgdGhpcy5oeWRyYXRpb25Db21wbGV0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZSA/IGh0bWxgJHt0aGlzLl9kaXNwbGF5VmFsdWV9YCA6IHBsYWNlaG9sZGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8IS0tIFRoaXMgZWxlbWVudCBpcyB2aXN1YWxseSBoaWRkZW4gYW5kIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGxpZ2h0IERPTSB0byBhbGxvdyBzY3JlZW5cbiAgICAgIHJlYWRlcnMgdG8gd29yayBwcm9wZXJseSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5IHNiYi1zZWxlY3QtdHJpZ2dlclwiXG4gICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCB8fCB0aGlzLmZvcm1EaXNhYmxlZCA/IG5vdGhpbmcgOiAnMCd9XG4gICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgYXJpYS1yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWQudG9TdHJpbmcoKX1cbiAgICAgICAgYXJpYS1jb250cm9scz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgYXJpYS1vd25zPSR7dGhpcy5fb3ZlcmxheUlkfVxuICAgICAgICBAa2V5ZG93bj0ke3RoaXMuX29uS2V5RG93bn1cbiAgICAgICAgQGNsaWNrPSR7dGhpcy5fdG9nZ2xlT3BlbmluZ31cbiAgICAgICAgJHtyZWYoKHJlZikgPT4gKHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gcmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICA+XG4gICAgICAgICR7dW50aWwoLi4udGhpcy5fc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoaHRtbGA8c3Bhbj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmApKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFZpc3VhbGx5IGRpc3BsYXkgdGhlIHZhbHVlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX3RyaWdnZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgJHt1bnRpbChcbiAgICAgICAgICAuLi50aGlzLl9zcHJlYWREZWZlcnJlZERpc3BsYXlWYWx1ZShcbiAgICAgICAgICAgIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc2VsZWN0X190cmlnZ2VyLS1wbGFjZWhvbGRlclwiPiR7dGhpcy5wbGFjZWhvbGRlcn08L3NwYW4+YCxcbiAgICAgICAgICApLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X19nYXAtZml4XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fY29udGFpbmVyXCIgcG9wb3Zlcj1cIm1hbnVhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPiR7b3ZlcmxheUdhcEZpeENvcm5lcnMoKX08L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbkFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX3BhbmVsXCJcbiAgICAgICAgICAke3JlZigoZGlhbG9nUmVmKSA9PiAodGhpcy5fb3ZlcmxheSA9IGRpYWxvZ1JlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX3dyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLl9vdmVybGF5SWQgOiBub3RoaW5nfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1zZWxlY3RfX29wdGlvbnNcIlxuICAgICAgICAgICAgICByb2xlPSR7IWFyaWFSb2xlT25Ib3N0ID8gJ2xpc3Rib3gnIDogbm90aGluZ31cbiAgICAgICAgICAgICAgP2FyaWEtbXVsdGlzZWxlY3RhYmxlPSR7dGhpcy5tdWx0aXBsZX1cbiAgICAgICAgICAgICAgJHtyZWYoKGNvbnRhaW5lclJlZikgPT4gKHRoaXMuX29wdGlvbkNvbnRhaW5lciA9IGNvbnRhaW5lclJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX3VwZGF0ZVZhbHVlT3B0aW9uU3RhdGV9Pjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1zZWxlY3QnOiBTYmJTZWxlY3RFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsic3RhdGUiLCJyZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1,7 +1,7 @@
1
1
  import { CSSResultGroup, TemplateResult } from 'lit';
2
2
  import { SbbButtonBaseElement } from '../../core/base-elements.js';
3
3
  import { SbbTooltipDefaultPositions } from '../../tooltip.js';
4
- declare const SbbIconSidebarButtonElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & typeof SbbButtonBaseElement;
4
+ declare const SbbIconSidebarButtonElement_base: import('../../core/mixins.ts').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & typeof SbbButtonBaseElement;
5
5
  /**
6
6
  * Button to be placed inside `sbb-icon-sidebar`.
7
7
  *
@@ -1,7 +1,7 @@
1
1
  import { CSSResultGroup, TemplateResult } from 'lit';
2
2
  import { SbbLinkBaseElement } from '../../core/base-elements.js';
3
3
  import { SbbTooltipDefaultPositions } from '../../tooltip.js';
4
- declare const SbbIconSidebarLinkElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & typeof SbbLinkBaseElement;
4
+ declare const SbbIconSidebarLinkElement_base: import('../../core/mixins.ts').AbstractConstructor<import('../../icon.js').SbbIconNameMixinType> & typeof SbbLinkBaseElement;
5
5
  /**
6
6
  * Link to be placed inside `sbb-icon-sidebar`.
7
7
  *
@@ -11,7 +11,7 @@ import { SbbTitleBase } from "../../title.js";
11
11
  import { css } from "lit";
12
12
  const style = css`:host {
13
13
  hyphens: auto;
14
- padding-block-start: calc(0.5 * (var(--sbb-sidebar__close-button-size) - 1em * var(--sbb-typo-line-height-titles)));
14
+ padding-block-start: calc(0.5 * (var(--sbb-sidebar__close-button-size) - 1em * var(--sbb-typo-line-height-heading)));
15
15
  min-height: var(--sbb-sidebar__close-button-size);
16
16
  }`;
17
17
  let SbbSidebarTitleElement = (() => {
@@ -49,11 +49,11 @@ const style = css`:host {
49
49
  }
50
50
 
51
51
  .sbb-status {
52
- --sbb-text-font-size: var(--sbb-font-size-text-s);
52
+ --sbb-text-font-size: var(--sbb-text-font-size-s);
53
53
  font-family: var(--sbb-typo-font-family);
54
54
  font-weight: normal;
55
- line-height: var(--sbb-typo-line-height-body-text);
56
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
55
+ line-height: var(--sbb-typo-line-height-text);
56
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
57
57
  font-size: var(--sbb-text-font-size);
58
58
  display: flex;
59
59
  gap: var(--sbb-status-gap);
@@ -64,7 +64,7 @@ const style = css`:host {
64
64
  display: flex;
65
65
  flex-shrink: 0;
66
66
  color: var(--_sbb-status-icon-color);
67
- margin-block-start: calc((var(--_sbb-status-title-font-size, var(--sbb-font-size-text-s)) * var(--_sbb-status-title-line-height, var(--sbb-typo-line-height-body-text)) - var(--sbb-size-icon-ui-small)) / 2);
67
+ margin-block-start: calc((var(--_sbb-status-title-font-size, var(--sbb-text-font-size-s)) * var(--_sbb-status-title-line-height, var(--sbb-typo-line-height-text)) - var(--sbb-size-icon-ui-small)) / 2);
68
68
  }
69
69
 
70
70
  .sbb-status__content-slot {
@@ -49,11 +49,11 @@ const style = css`:host {
49
49
  }
50
50
 
51
51
  .sbb-step {
52
- --sbb-text-font-size: var(--sbb-font-size-text-m);
52
+ --sbb-text-font-size: var(--sbb-text-font-size-m);
53
53
  font-family: var(--sbb-typo-font-family);
54
54
  font-weight: normal;
55
- line-height: var(--sbb-typo-line-height-body-text);
56
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
55
+ line-height: var(--sbb-typo-line-height-text);
56
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
57
57
  font-size: var(--sbb-text-font-size);
58
58
  position: var(--sbb-step-position);
59
59
  width: 100%;
@@ -21,11 +21,11 @@ const style = css`:host {
21
21
  max-width: fit-content;
22
22
  }
23
23
  :host::before {
24
- --sbb-text-font-size: var(--sbb-font-size-text-xxs);
24
+ --sbb-text-font-size: var(--sbb-text-font-size-xxs);
25
25
  font-family: var(--sbb-typo-font-family);
26
26
  font-weight: normal;
27
- line-height: var(--sbb-typo-line-height-body-text);
28
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
27
+ line-height: var(--sbb-typo-line-height-text);
28
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
29
29
  font-size: var(--sbb-text-font-size);
30
30
  position: absolute;
31
31
  top: 50%;
@@ -33,7 +33,7 @@ const style = css`:host {
33
33
  transform: translate(-50%, -50%);
34
34
  cursor: var(--sbb-step-label-cursor);
35
35
  color: var(--sbb-step-label-color);
36
- inset-block-start: calc(var(--sbb-font-size-text-l) * var(--sbb-typo-line-height-body-text) / 2 + var(--sbb-border-width-1x) / 2);
36
+ inset-block-start: calc(var(--sbb-text-font-size-l) * var(--sbb-typo-line-height-text) / 2 + var(--sbb-border-width-1x) / 2);
37
37
  inset-inline-start: calc(var(--sbb-step-label-prefix-size) / 2);
38
38
  line-height: 1;
39
39
  z-index: 1;
@@ -48,11 +48,11 @@ const style = css`:host {
48
48
  }
49
49
 
50
50
  :host([data-selected]) {
51
- --sbb-text-font-size: var(--sbb-font-size-text-xxs);
51
+ --sbb-text-font-size: var(--sbb-text-font-size-xxs);
52
52
  font-family: var(--sbb-typo-font-family);
53
53
  font-weight: normal;
54
- line-height: var(--sbb-typo-line-height-body-text);
55
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
54
+ line-height: var(--sbb-typo-line-height-text);
55
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
56
56
  font-size: var(--sbb-text-font-size);
57
57
  font-weight: bold;
58
58
  --sbb-step-label-color: var(--sbb-color-3);
@@ -68,7 +68,7 @@ const style = css`:host {
68
68
  --sbb-step-label-prefix-size: var(--sbb-size-element-xxxs);
69
69
  }
70
70
  :host([data-size=s])::before {
71
- inset-block-start: calc(var(--sbb-font-size-text-m) * var(--sbb-typo-line-height-body-text) / 2 + var(--sbb-border-width-1x) / 2);
71
+ inset-block-start: calc(var(--sbb-text-font-size-m) * var(--sbb-typo-line-height-text) / 2 + var(--sbb-border-width-1x) / 2);
72
72
  }
73
73
 
74
74
  :host(:disabled) {
@@ -110,11 +110,11 @@ const style = css`:host {
110
110
  }
111
111
 
112
112
  .sbb-step-label {
113
- --sbb-text-font-size: var(--sbb-font-size-text-l);
113
+ --sbb-text-font-size: var(--sbb-text-font-size-l);
114
114
  font-family: var(--sbb-typo-font-family);
115
115
  font-weight: normal;
116
- line-height: var(--sbb-typo-line-height-body-text);
117
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
116
+ line-height: var(--sbb-typo-line-height-text);
117
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
118
118
  font-size: var(--sbb-text-font-size);
119
119
  font-weight: bold;
120
120
  cursor: var(--sbb-step-label-cursor);
@@ -124,11 +124,11 @@ const style = css`:host {
124
124
  color: var(--sbb-step-label-color);
125
125
  }
126
126
  :host([data-size=s]) .sbb-step-label {
127
- --sbb-text-font-size: var(--sbb-font-size-text-m);
127
+ --sbb-text-font-size: var(--sbb-text-font-size-m);
128
128
  font-family: var(--sbb-typo-font-family);
129
129
  font-weight: normal;
130
- line-height: var(--sbb-typo-line-height-body-text);
131
- letter-spacing: var(--sbb-typo-letter-spacing-body-text);
130
+ line-height: var(--sbb-typo-line-height-text);
131
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
132
132
  font-size: var(--sbb-text-font-size);
133
133
  font-weight: bold;
134
134
  }
@@ -141,7 +141,7 @@ const style = css`:host {
141
141
  justify-content: center;
142
142
  width: var(--sbb-step-label-prefix-size);
143
143
  height: var(--sbb-step-label-prefix-size);
144
- inset-block-start: calc(1em * var(--sbb-typo-line-height-body-text) / 2 + var(--sbb-border-width-1x) / 2 - var(--sbb-step-label-prefix-size) / 2);
144
+ inset-block-start: calc(1em * var(--sbb-typo-line-height-text) / 2 + var(--sbb-border-width-1x) / 2 - var(--sbb-step-label-prefix-size) / 2);
145
145
  }
146
146
  .sbb-step-label__prefix::before {
147
147
  content: "";