@ardium-ui/ui 4.1.1 → 4.1.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 (313) hide show
  1. package/README.md +25 -25
  2. package/esm2022/lib/_internal/boolean-component.mjs +1 -1
  3. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +3 -3
  4. package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +1 -1
  5. package/esm2022/lib/_internal/disablable-component.mjs +1 -1
  6. package/esm2022/lib/_internal/focusable-component.mjs +1 -1
  7. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +1 -1
  8. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +1 -1
  9. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +1 -1
  10. package/esm2022/lib/_internal/models/pagination.model.mjs +1 -1
  11. package/esm2022/lib/_internal/models/queue.mjs +1 -1
  12. package/esm2022/lib/_internal/public-api.mjs +1 -1
  13. package/esm2022/lib/_internal/selectable-list-component.mjs +1 -1
  14. package/esm2022/lib/badge/badge.defaults.mjs +1 -1
  15. package/esm2022/lib/badge/badge.directive.mjs +1 -1
  16. package/esm2022/lib/badge/badge.module.mjs +1 -1
  17. package/esm2022/lib/badge/badge.types.mjs +1 -1
  18. package/esm2022/lib/badge/index.mjs +1 -1
  19. package/esm2022/lib/buttons/_button-base.defaults.mjs +1 -1
  20. package/esm2022/lib/buttons/button/button.component.mjs +3 -3
  21. package/esm2022/lib/buttons/button/button.defaults.mjs +1 -1
  22. package/esm2022/lib/buttons/button/button.module.mjs +1 -1
  23. package/esm2022/lib/buttons/button/index.mjs +1 -1
  24. package/esm2022/lib/buttons/fab/fab.component.mjs +3 -3
  25. package/esm2022/lib/buttons/fab/fab.defaults.mjs +1 -1
  26. package/esm2022/lib/buttons/fab/fab.module.mjs +1 -1
  27. package/esm2022/lib/buttons/fab/index.mjs +1 -1
  28. package/esm2022/lib/buttons/general-button.types.mjs +1 -1
  29. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +3 -3
  30. package/esm2022/lib/buttons/icon-button/icon-button.defaults.mjs +1 -1
  31. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +1 -1
  32. package/esm2022/lib/buttons/icon-button/index.mjs +1 -1
  33. package/esm2022/lib/calendar/calendar.component.mjs +1 -1
  34. package/esm2022/lib/calendar/calendar.defaults.mjs +1 -1
  35. package/esm2022/lib/calendar/calendar.types.mjs +1 -1
  36. package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +1 -1
  37. package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +1 -1
  38. package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +1 -1
  39. package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +1 -1
  40. package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +1 -1
  41. package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +1 -1
  42. package/esm2022/lib/card/card.children.mjs +3 -3
  43. package/esm2022/lib/card/card.component.mjs +1 -1
  44. package/esm2022/lib/card/card.defaults.mjs +1 -1
  45. package/esm2022/lib/card/card.module.mjs +1 -1
  46. package/esm2022/lib/card/card.types.mjs +1 -1
  47. package/esm2022/lib/card/index.mjs +1 -1
  48. package/esm2022/lib/checkbox/checkbox.defaults.mjs +1 -1
  49. package/esm2022/lib/checkbox/index.mjs +1 -1
  50. package/esm2022/lib/checkbox-list/checkbox-list.defaults.mjs +1 -1
  51. package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +1 -1
  52. package/esm2022/lib/checkbox-list/index.mjs +1 -1
  53. package/esm2022/lib/chip/chip.component.mjs +3 -3
  54. package/esm2022/lib/chip/chip.defaults.mjs +1 -1
  55. package/esm2022/lib/chip/chip.module.mjs +1 -1
  56. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +3 -3
  57. package/esm2022/lib/chip/deletable-chip/deletable-chip.defaults.mjs +1 -1
  58. package/esm2022/lib/chip/index.mjs +1 -1
  59. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +3 -3
  60. package/esm2022/lib/chip/selectable-chip/selectable-chip.defaults.mjs +1 -1
  61. package/esm2022/lib/color/color-display/color-display.component.mjs +3 -3
  62. package/esm2022/lib/color/color-display/color-display.defaults.mjs +1 -1
  63. package/esm2022/lib/color/color-display/color-display.module.mjs +1 -1
  64. package/esm2022/lib/color/color-display/color-display.types.mjs +1 -1
  65. package/esm2022/lib/color/color-display/index.mjs +1 -1
  66. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  67. package/esm2022/lib/dialog/dialog.defaults.mjs +1 -1
  68. package/esm2022/lib/dialog/dialog.directives.mjs +1 -1
  69. package/esm2022/lib/dialog/dialog.module.mjs +1 -1
  70. package/esm2022/lib/dialog/index.mjs +1 -1
  71. package/esm2022/lib/divider/divider.component.mjs +1 -1
  72. package/esm2022/lib/divider/divider.defaults.mjs +1 -1
  73. package/esm2022/lib/divider/divider.module.mjs +1 -1
  74. package/esm2022/lib/divider/index.mjs +1 -1
  75. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +3 -3
  76. package/esm2022/lib/dropdown-panel/dropdown-panel.defaults.mjs +1 -1
  77. package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +1 -1
  78. package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +1 -1
  79. package/esm2022/lib/dropdown-panel/index.mjs +1 -1
  80. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +14 -23
  81. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.defaults.mjs +1 -1
  82. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +1 -1
  83. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +1 -1
  84. package/esm2022/lib/file-inputs/file-drop-area/index.mjs +1 -1
  85. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +30 -36
  86. package/esm2022/lib/file-inputs/file-input/file-input.defaults.mjs +1 -1
  87. package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +14 -1
  88. package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +40 -7
  89. package/esm2022/lib/file-inputs/file-input/index.mjs +1 -1
  90. package/esm2022/lib/file-inputs/file-input-base.defaults.mjs +1 -1
  91. package/esm2022/lib/file-inputs/file-input-base.mjs +21 -5
  92. package/esm2022/lib/file-inputs/file-input-types.mjs +1 -1
  93. package/esm2022/lib/form-field/error/error.component.mjs +1 -1
  94. package/esm2022/lib/form-field/error/error.directive.mjs +1 -1
  95. package/esm2022/lib/form-field/form-field.module.mjs +1 -1
  96. package/esm2022/lib/form-field/hint/hint.component.mjs +1 -1
  97. package/esm2022/lib/form-field/hint/hint.directive.mjs +1 -1
  98. package/esm2022/lib/form-field/horizontal-form-field.component.mjs +1 -1
  99. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +3 -3
  100. package/esm2022/lib/form-field-frame/form-field-frame.defaults.mjs +1 -1
  101. package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +1 -1
  102. package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +1 -1
  103. package/esm2022/lib/form-field-frame/index.mjs +1 -1
  104. package/esm2022/lib/icon/icon.component.mjs +3 -3
  105. package/esm2022/lib/icon/icon.defaults.mjs +1 -1
  106. package/esm2022/lib/icon/icon.module.mjs +1 -1
  107. package/esm2022/lib/icon/icon.pipe.mjs +1 -1
  108. package/esm2022/lib/icon/index.mjs +1 -1
  109. package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +1 -1
  110. package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +1 -1
  111. package/esm2022/lib/inputs/digit-input/digit-input.defaults.mjs +1 -1
  112. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +1 -1
  113. package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +1 -1
  114. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
  115. package/esm2022/lib/inputs/digit-input/index.mjs +1 -1
  116. package/esm2022/lib/inputs/hex-input/hex-input.defaults.mjs +1 -1
  117. package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +1 -1
  118. package/esm2022/lib/inputs/hex-input/hex-input.model.mjs +1 -1
  119. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +1 -1
  120. package/esm2022/lib/inputs/hex-input/index.mjs +1 -1
  121. package/esm2022/lib/inputs/input/index.mjs +1 -1
  122. package/esm2022/lib/inputs/input/input.component.mjs +3 -3
  123. package/esm2022/lib/inputs/input/input.defaults.mjs +1 -1
  124. package/esm2022/lib/inputs/input/input.directives.mjs +1 -1
  125. package/esm2022/lib/inputs/input-transformers.mjs +1 -1
  126. package/esm2022/lib/inputs/input-types.mjs +1 -1
  127. package/esm2022/lib/inputs/input-utils.mjs +1 -1
  128. package/esm2022/lib/inputs/number-input/index.mjs +1 -1
  129. package/esm2022/lib/inputs/number-input/number-input.defaults.mjs +1 -1
  130. package/esm2022/lib/inputs/number-input/number-input.directives.mjs +1 -1
  131. package/esm2022/lib/inputs/number-input/number-input.module.mjs +1 -1
  132. package/esm2022/lib/inputs/password-input/index.mjs +1 -1
  133. package/esm2022/lib/inputs/password-input/password-input.component.mjs +3 -3
  134. package/esm2022/lib/inputs/password-input/password-input.defaults.mjs +1 -1
  135. package/esm2022/lib/inputs/password-input/password-input.directives.mjs +1 -1
  136. package/esm2022/lib/inputs/password-input/password-input.module.mjs +1 -1
  137. package/esm2022/lib/inputs/password-input/password-input.types.mjs +1 -1
  138. package/esm2022/lib/inputs/simple-input/index.mjs +1 -1
  139. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +3 -3
  140. package/esm2022/lib/inputs/simple-input/simple-input.defaults.mjs +1 -1
  141. package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +1 -1
  142. package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +1 -1
  143. package/esm2022/lib/kbd/index.mjs +1 -1
  144. package/esm2022/lib/kbd/kbd.component.mjs +3 -3
  145. package/esm2022/lib/kbd/kbd.defaults.mjs +1 -1
  146. package/esm2022/lib/kbd/kbd.directive.mjs +1 -1
  147. package/esm2022/lib/kbd/kbd.module.mjs +1 -1
  148. package/esm2022/lib/kbd/kbd.pipe.mjs +1 -1
  149. package/esm2022/lib/kbd-shortcut/index.mjs +1 -1
  150. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +3 -3
  151. package/esm2022/lib/kbd-shortcut/kbd-shortcut.defaults.mjs +1 -1
  152. package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +1 -1
  153. package/esm2022/lib/modal/modal.component.mjs +1 -1
  154. package/esm2022/lib/modal/modal.directives.mjs +1 -1
  155. package/esm2022/lib/modal/modal.module.mjs +1 -1
  156. package/esm2022/lib/option/index.mjs +1 -1
  157. package/esm2022/lib/option/option.component.mjs +1 -1
  158. package/esm2022/lib/option/option.module.mjs +1 -1
  159. package/esm2022/lib/progress-bar/index.mjs +1 -1
  160. package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
  161. package/esm2022/lib/progress-bar/progress-bar.defaults.mjs +1 -1
  162. package/esm2022/lib/progress-bar/progress-bar.directive.mjs +1 -1
  163. package/esm2022/lib/progress-bar/progress-bar.module.mjs +1 -1
  164. package/esm2022/lib/progress-bar/progress-bar.types.mjs +1 -1
  165. package/esm2022/lib/progress-circle/index.mjs +1 -1
  166. package/esm2022/lib/progress-circle/progress-circle.component.mjs +3 -3
  167. package/esm2022/lib/progress-circle/progress-circle.defaults.mjs +1 -1
  168. package/esm2022/lib/progress-circle/progress-circle.directive.mjs +1 -1
  169. package/esm2022/lib/progress-circle/progress-circle.module.mjs +1 -1
  170. package/esm2022/lib/progress-circle/progress-circle.types.mjs +1 -1
  171. package/esm2022/lib/radio/index.mjs +1 -1
  172. package/esm2022/lib/radio/radio/radio.component.mjs +3 -3
  173. package/esm2022/lib/radio/radio/radio.defaults.mjs +1 -1
  174. package/esm2022/lib/radio/radio-group.component.mjs +1 -1
  175. package/esm2022/lib/radio/radio.module.mjs +1 -1
  176. package/esm2022/lib/search-functions.mjs +1 -1
  177. package/esm2022/lib/segment/index.mjs +1 -1
  178. package/esm2022/lib/segment/segment.component.mjs +3 -3
  179. package/esm2022/lib/segment/segment.defaults.mjs +1 -1
  180. package/esm2022/lib/segment/segment.directives.mjs +1 -1
  181. package/esm2022/lib/segment/segment.module.mjs +1 -1
  182. package/esm2022/lib/segment/segment.types.mjs +1 -1
  183. package/esm2022/lib/select/index.mjs +1 -1
  184. package/esm2022/lib/select/select.defaults.mjs +1 -1
  185. package/esm2022/lib/select/select.directive.mjs +1 -1
  186. package/esm2022/lib/select/select.module.mjs +1 -1
  187. package/esm2022/lib/select/select.types.mjs +1 -1
  188. package/esm2022/lib/slide-toggle/index.mjs +1 -1
  189. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +3 -3
  190. package/esm2022/lib/slide-toggle/slide-toggle.defaults.mjs +1 -1
  191. package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +1 -1
  192. package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +1 -1
  193. package/esm2022/lib/slider/abstract-slider.mjs +1 -1
  194. package/esm2022/lib/slider/index.mjs +1 -1
  195. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +3 -3
  196. package/esm2022/lib/slider/range-slider/range-slider.module.mjs +1 -1
  197. package/esm2022/lib/slider/slider.component.mjs +1 -1
  198. package/esm2022/lib/slider/slider.defaults.mjs +1 -1
  199. package/esm2022/lib/slider/slider.directive.mjs +1 -1
  200. package/esm2022/lib/slider/slider.module.mjs +1 -1
  201. package/esm2022/lib/slider/slider.types.mjs +1 -1
  202. package/esm2022/lib/snackbar/index.mjs +1 -1
  203. package/esm2022/lib/snackbar/snackbar-ref.mjs +1 -1
  204. package/esm2022/lib/snackbar/snackbar.component.mjs +3 -3
  205. package/esm2022/lib/snackbar/snackbar.service.mjs +1 -1
  206. package/esm2022/lib/snackbar/snackbar.token.mjs +1 -1
  207. package/esm2022/lib/snackbar/snackbar.types.mjs +1 -1
  208. package/esm2022/lib/spinner/index.mjs +1 -1
  209. package/esm2022/lib/spinner/spinner.component.mjs +3 -3
  210. package/esm2022/lib/spinner/spinner.defaults.mjs +1 -1
  211. package/esm2022/lib/spinner/spinner.module.mjs +1 -1
  212. package/esm2022/lib/star/rating-display/rating-display.component.mjs +1 -1
  213. package/esm2022/lib/star/rating-display/rating-display.defaults.mjs +1 -1
  214. package/esm2022/lib/star/rating-display/rating-display.directives.mjs +1 -1
  215. package/esm2022/lib/star/rating-display/rating-display.types.mjs +1 -1
  216. package/esm2022/lib/star/rating-input/rating-input.component.mjs +1 -1
  217. package/esm2022/lib/star/rating-input/rating-input.defaults.mjs +1 -1
  218. package/esm2022/lib/star/rating-input/rating-input.module.mjs +1 -1
  219. package/esm2022/lib/star/star-button/star-button.component.mjs +3 -3
  220. package/esm2022/lib/star/star-button/star-button.defaults.mjs +1 -1
  221. package/esm2022/lib/star/star-button/star-button.module.mjs +1 -1
  222. package/esm2022/lib/star/star.component.mjs +3 -3
  223. package/esm2022/lib/star/star.defaults.mjs +1 -1
  224. package/esm2022/lib/star/star.types.mjs +1 -1
  225. package/esm2022/lib/statebox/index.mjs +1 -1
  226. package/esm2022/lib/statebox/statebox.component.mjs +3 -3
  227. package/esm2022/lib/statebox/statebox.defaults.mjs +1 -1
  228. package/esm2022/lib/statebox/statebox.module.mjs +1 -1
  229. package/esm2022/lib/statebox/statebox.types.mjs +1 -1
  230. package/esm2022/lib/tabber/index.mjs +1 -1
  231. package/esm2022/lib/tabber/tab/tab.component.mjs +3 -3
  232. package/esm2022/lib/tabber/tab/tab.defaults.mjs +1 -1
  233. package/esm2022/lib/tabber/tabber.component.mjs +3 -3
  234. package/esm2022/lib/tabber/tabber.defaults.mjs +1 -1
  235. package/esm2022/lib/tabber/tabber.module.mjs +1 -1
  236. package/esm2022/lib/table/index.mjs +1 -1
  237. package/esm2022/lib/table/table-item-storage.mjs +1 -1
  238. package/esm2022/lib/table/table.component.mjs +3 -3
  239. package/esm2022/lib/table/table.defaults.mjs +1 -1
  240. package/esm2022/lib/table/table.directives.mjs +1 -1
  241. package/esm2022/lib/table/table.module.mjs +1 -1
  242. package/esm2022/lib/table/table.types.mjs +1 -1
  243. package/esm2022/lib/table/utils.mjs +1 -1
  244. package/esm2022/lib/table-from-csv/index.mjs +1 -1
  245. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +3 -3
  246. package/esm2022/lib/table-from-csv/table-from-csv.defaults.mjs +1 -1
  247. package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +1 -1
  248. package/esm2022/lib/table-pagination/index.mjs +1 -1
  249. package/esm2022/lib/table-pagination/table-pagination.component.mjs +3 -3
  250. package/esm2022/lib/table-pagination/table-pagination.defaults.mjs +1 -1
  251. package/esm2022/lib/table-pagination/table-pagination.module.mjs +1 -1
  252. package/esm2022/lib/table-pagination/table-pagination.types.mjs +1 -1
  253. package/esm2022/lib/text-list/text-list.module.mjs +1 -1
  254. package/esm2022/lib/text-list/text-list.pipe.mjs +1 -1
  255. package/esm2022/lib/types/alignment.types.mjs +1 -1
  256. package/esm2022/lib/types/button.types.mjs +1 -1
  257. package/esm2022/lib/types/colors.types.mjs +1 -1
  258. package/esm2022/lib/types/item-storage.types.mjs +1 -1
  259. package/esm2022/lib/types/theming.types.mjs +1 -1
  260. package/esm2022/lib/types/utility.types.mjs +1 -1
  261. package/fesm2022/ardium-ui-ui.mjs +175 -130
  262. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  263. package/lib/file-inputs/file-drop-area/file-drop-area.component.d.ts +4 -4
  264. package/lib/file-inputs/file-input/file-input.component.d.ts +9 -8
  265. package/lib/file-inputs/file-input/file-input.directives.d.ts +6 -0
  266. package/lib/file-inputs/file-input/file-input.module.d.ts +6 -5
  267. package/lib/file-inputs/file-input-base.d.ts +2 -2
  268. package/lib/file-inputs/file-input-types.d.ts +1 -1
  269. package/package.json +1 -1
  270. package/themes/_variables.scss +121 -121
  271. package/themes/default/_clear-button.scss +73 -73
  272. package/themes/default/_coloring.scss +137 -137
  273. package/themes/default/_dropdown-arrow.scss +12 -12
  274. package/themes/default/badge.scss +94 -94
  275. package/themes/default/buttons/button.scss +79 -79
  276. package/themes/default/buttons/fab.scss +81 -81
  277. package/themes/default/buttons/icon-button.scss +62 -62
  278. package/themes/default/calendar-OLD.scss +183 -183
  279. package/themes/default/card.scss +135 -135
  280. package/themes/default/checkbox-list.scss +83 -83
  281. package/themes/default/checkbox.scss +109 -109
  282. package/themes/default/chips.scss +200 -200
  283. package/themes/default/color-display.scss +41 -41
  284. package/themes/default/color-picker.scss +111 -111
  285. package/themes/default/core.scss +102 -102
  286. package/themes/default/dialog.scss +16 -16
  287. package/themes/default/divider.scss +13 -13
  288. package/themes/default/dropdown-panel.scss +45 -45
  289. package/themes/default/file-drop-area.scss +162 -162
  290. package/themes/default/inputs/_shared.scss +50 -50
  291. package/themes/default/inputs/color-input.scss +46 -46
  292. package/themes/default/inputs/file-input.scss +79 -79
  293. package/themes/default/inputs/hex-input.scss +27 -27
  294. package/themes/default/inputs/number-input.scss +131 -131
  295. package/themes/default/inputs/password-input.scss +43 -43
  296. package/themes/default/inputs/search-bar.scss +19 -19
  297. package/themes/default/kbd-shortcut.scss +13 -13
  298. package/themes/default/kbd.scss +21 -21
  299. package/themes/default/modal.scss +94 -94
  300. package/themes/default/progress-bar.scss +166 -166
  301. package/themes/default/progress-circle.scss +56 -56
  302. package/themes/default/radio.scss +112 -112
  303. package/themes/default/segment.scss +355 -355
  304. package/themes/default/select.scss +259 -259
  305. package/themes/default/slide-toggle.scss +151 -151
  306. package/themes/default/slider.scss +224 -224
  307. package/themes/default/snackbar.scss +58 -58
  308. package/themes/default/spinner.scss +21 -21
  309. package/themes/default/stars.scss +85 -85
  310. package/themes/default/statebox.scss +109 -109
  311. package/themes/default/tabber.scss +89 -89
  312. package/themes/default/table-pagination.scss +56 -56
  313. package/themes/default/table.scss +423 -423
@@ -561,4 +561,4 @@ export class TableItemStorage {
561
561
  this._sortedItems.set([...this.items()].sort((a, b) => sortFn(a.data()[sortColumnIndex], b.data()[sortColumnIndex])));
562
562
  }
563
563
  }
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFtQix1QkFBdUIsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3RSxNQUFNLE9BQU8sV0FBVztJQXdCdEIsWUFDRSxRQUFhLEVBQ2IsS0FBYSxFQUNiLElBQVcsRUFDWCxXQUE4QixFQUM5QixRQUFpQixFQUNqQixJQUFhLEVBQ2IsT0FBTyxHQUFHLEtBQUs7UUE5QkEsY0FBUyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QixVQUFLLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDakMsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAncmVzb2x2ZS1vYmplY3QtcGF0aCc7XG5pbXBvcnQgeyBldmFsdWF0ZSwgaXNEZWZpbmVkLCBpc051bGwgfSBmcm9tICdzaW1wbGUtYm9vbCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJy4uL3R5cGVzL3V0aWxpdHkudHlwZXMnO1xuaW1wb3J0IHsgU29ydFR5cGUsIFRhYmxlRGF0YUNvbHVtbiwgVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3ksIFRhYmxlU3ViaGVhZGVyIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBhcmVBbGxEYXRhQ29sdW1ucywgaXNUYWJsZVN1YmhlYWRlciwgbWVyZ2UyZEFycmF5cyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQXJkVGFibGVSb3cge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtRGF0YSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGl0ZW1EYXRhID0gdGhpcy5faXRlbURhdGEuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICByZWFkb25seSBpbmRleCA9IHRoaXMuX2luZGV4LmFzUmVhZG9ubHkoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0VtcHR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNFbXB0eSA9IHRoaXMuX2lzRW1wdHkuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgcmVhZG9ubHkgZGF0YSA9IHRoaXMuX2RhdGEuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFDb2x1bW5zID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbltdPihbXSk7XG4gIHJlYWRvbmx5IGRhdGFDb2x1bW5zID0gdGhpcy5fZGF0YUNvbHVtbnMuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSBjbGFzcyA9IHRoaXMuX2NsYXNzLmFzUmVhZG9ubHkoKTtcblxuICByZWFkb25seSBkaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGJvbGQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzZWxlY3RlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpdGVtRGF0YTogYW55LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF0YTogYW55W10sXG4gICAgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdLFxuICAgIGRpc2FibGVkOiBib29sZWFuLFxuICAgIGJvbGQ6IGJvb2xlYW4sXG4gICAgaXNFbXB0eSA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuX2l0ZW1EYXRhLnNldChpdGVtRGF0YSk7XG4gICAgdGhpcy5faW5kZXguc2V0KGluZGV4KTtcbiAgICB0aGlzLl9kYXRhLnNldChkYXRhKTtcbiAgICB0aGlzLl9kYXRhQ29sdW1ucy5zZXQoZGF0YUNvbHVtbnMpO1xuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGRpc2FibGVkKTtcbiAgICB0aGlzLmJvbGQuc2V0KGJvbGQpO1xuICAgIHRoaXMuX2lzRW1wdHkuc2V0KGlzRW1wdHkpO1xuICB9XG4gIHN0YXRpYyBuZXdFbXB0eUNlbGwoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgQXJkVGFibGVSb3cobnVsbCwgaW5kZXgsIFtdLCBbXSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1TdG9yYWdlSG9zdCB7XG4gIHJlYWRvbmx5IHJvd0Rpc2FibGVkRnJvbTogU2lnbmFsPHN0cmluZz47XG4gIHJlYWRvbmx5IHJvd0JvbGRGcm9tOiBTaWduYWw8c3RyaW5nPjtcbiAgcmVhZG9ubHkgaW52ZXJ0Um93RGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaW52ZXJ0Um93Qm9sZDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8TnVsbGFibGU8YW55Pj5bXTtcbiAgcmVhZG9ubHkgbWF4U2VsZWN0ZWRJdGVtczogU2lnbmFsPE51bGxhYmxlPG51bWJlcj4+O1xuICByZWFkb25seSB0cmVhdERhdGFTb3VyY2VBc1N0cmluZzogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRlZDogU2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBwYWdpbmF0aW9uU3RyYXRlZ3k6IFNpZ25hbDxUYWJsZVBhZ2luYXRpb25TdHJhdGVneT47XG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZTogU2lnbmFsPG51bWJlcj47XG4gIHJlYWRvbmx5IHBhZ2U6IFNpZ25hbDxudW1iZXI+O1xufVxuZXhwb3J0IGNsYXNzIEhlYWRlckNlbGwge1xuICByZWFkb25seSBjZWxsID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyPih1bmRlZmluZWQgYXMgYW55KTtcbiAgcmVhZG9ubHkgY29sc3BhbiA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICByZWFkb25seSByb3dzcGFuID0gc2lnbmFsPG51bWJlcj4oMSk7XG5cbiAgY29uc3RydWN0b3IoY2VsbDogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIsIGNvbHNwYW4gPSAxLCByb3dzcGFuID0gMSkge1xuICAgIHRoaXMuY2VsbC5zZXQoY2VsbCk7XG4gICAgdGhpcy5jb2xzcGFuLnNldChjb2xzcGFuKTtcbiAgICB0aGlzLnJvd3NwYW4uc2V0KHJvd3NwYW4pO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGwoKTtcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihjZWxsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKGNlbGwud2lkdGgpO1xuICB9XG4gIGdldCBtaW5XaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5jZWxsKCk7XG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoY2VsbCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLl9nZXRXaWR0aChjZWxsLm1pbldpZHRoKTtcbiAgfVxuICAvKipcbiAgICogVGhyYW5zZm9ybXMgYSBudW1lcmljIHdpZHRoIGludG8gYSBDU1Mgc3RyaW5nIGlmIG5lZWRlZC4gUHVyZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCB0byBiZSBjb252ZXJ0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSB3aWR0aCBleHByZXNzZWQgYXMgYSBDU1MtY29tcGF0aWJsZSBzdHJpbmcgb3IgbnVsbC5cbiAgICovXG4gIHByaXZhdGUgX2dldFdpZHRoKHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXdpZHRoKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJykgcmV0dXJuIGAke3dpZHRofXB4YDtcbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlSXRlbVN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtcyA9IHNpZ25hbDxBcmRUYWJsZVJvd1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnRlZEl0ZW1zID0gc2lnbmFsPEFyZFRhYmxlUm93W10+KFtdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhQ29sdW1ucyA9IHNpZ25hbDxUYWJsZURhdGFDb2x1bW5bXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJDZWxscyA9IHNpZ25hbDxIZWFkZXJDZWxsW11bXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2FyZFBhcmVudENvbXA6IFRhYmxlSXRlbVN0b3JhZ2VIb3N0KSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zID0gdGhpcy5faXRlbXMuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBzb3J0ZWRJdGVtcyA9IHRoaXMuX3NvcnRlZEl0ZW1zLmFzUmVhZG9ubHkoKTtcbiAgLyoqXG4gICAqIEdldHMgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhZ2luYXRlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0ZWQoKSB8fCB0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRpb25TdHJhdGVneSgpID09PSBUYWJsZVBhZ2luYXRpb25TdHJhdGVneS5Ob29wKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcygpO1xuICAgIH1cbiAgICBjb25zdCBwYWdlID0gdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdlKCk7XG4gICAgY29uc3QgSVBQID0gdGhpcy5fYXJkUGFyZW50Q29tcC5pdGVtc1BlclBhZ2UoKTtcbiAgICBjb25zdCBpdGVtc1N0YXJ0ID0gKHBhZ2UgLSAxKSAqIElQUDtcbiAgICBjb25zdCBpdGVtc0VuZCA9IHBhZ2UgKiBJUFA7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMoKS5zbGljZShpdGVtc1N0YXJ0LCBpdGVtc0VuZCk7XG4gIH0pO1xuICAvKipcbiAgICogR2V0cyBhbGwgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKCkpKTtcbiAgLyoqXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkSXRlbXMgPSBjb21wdXRlZDxBcmRUYWJsZVJvd1tdPigoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5oaWdobGlnaHRlZCgpKSk7XG4gIC8qKlxuICAgKiBHZXRzIGFsbCBoaWdobGlnaHRhYmxlIGl0ZW1zLiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgaGlnaGxpZ2h0YWJsZSBpZiBpdCBpcyAqKm5vdCoqIGRpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGlnaGxpZ2h0YWJsZUl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKSk7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcygpKSk7XG4gIC8qKlxuICAgKiBNYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gdGhlaXIgdmFsdWVzLlxuICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRvIGNvbnZlcnQgdG8gdmFsdWUuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW0gdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXRlbXNUb1ZhbHVlKGl0ZW1zOiBBcmRUYWJsZVJvd1tdKTogYW55W10ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtLml0ZW1EYXRhKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgaXRlbSBpcyBoaWdobGlnaHRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBbnlJdGVtSGlnaGxpZ2h0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgdGFibGUgaXMgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFueSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBbnlJdGVtU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGFyZSBzZWxlY3RlZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFyZUFsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoID09PSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkpLmxlbmd0aCk7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgZGVmaW5lcyB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGFibGUgaXRlbXMgYW5kIHRoZSBhbW91bnQgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCBsaW1pdC4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqXG4gICAqICoqVExEUioqOiB0cnVlIGlmIGBtYXhTZWxlY3RlZEl0ZW1zYCBpcyBkZWZpbmVkIGFuZCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzSXRlbUxpbWl0UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXggPSB0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKTtcbiAgICBpZiAoIWlzRGVmaW5lZChtYXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXggPD0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoO1xuICB9KTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVhZGVyIGNlbGxzIG9mIHRoZSB0YWJsZS5cbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJDZWxscyA9IHRoaXMuX2hlYWRlckNlbGxzLmFzUmVhZG9ubHkoKTtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdGFibGUgaGFzIGRlZmluZWQgY29sdW1ucy5cbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXG4gICAqL1xuICByZWFkb25seSBoYXNEZWZpbmVkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2RhdGFDb2x1bW5zKCkubGVuZ3RoID4gMCk7XG5cbiAgLy8hIHNldHRpbmcgY29sdW1uc1xuICAvKipcbiAgICogU2V0cyB0aGUgY29sdW1ucyBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxuICAgKi9cbiAgc2V0Q29sdW1ucyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiB2b2lkIHtcbiAgICBjb25zdCBtYXhOZXN0aW5nTGV2ZWwgPSB0aGlzLl9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHMpO1xuICAgIGNvbnN0IGhlYWRlckNlbGxzID0gdGhpcy5fbWFwQ29sdW1uc1RvQXJyYXkoY29scywgbWF4TmVzdGluZ0xldmVsLCAwKTtcbiAgICB0aGlzLl9oZWFkZXJDZWxscy5zZXQodGhpcy5fZmlsdGVySGVhZGVyQ2VsbHMoaGVhZGVyQ2VsbHMpKTtcbiAgICB0aGlzLl9kYXRhQ29sdW1ucy5zZXQodGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbHMpKTtcbiAgfVxuICAvKipcbiAgICogRmlsdGVycyBvdXQgbnVsbCB2YWx1ZXMgZnJvbSB0aGUgaGVhZGVyIGNlbGxzIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gY2VsbHMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIHdpdGhvdXQgbnVsbCB2YWx1ZXMgYW5kIGVtcHR5IGFycmF5cy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckhlYWRlckNlbGxzKGNlbGxzOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSk6IEhlYWRlckNlbGxbXVtdIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbHMuZmlsdGVyKHJvdyA9PiByb3cubGVuZ3RoKSBhcyBIZWFkZXJDZWxsW11bXTtcbiAgfVxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGRhdGEgc291cmNlcyBmcm9tIHRoZSBjb2x1bW5zIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBfZXh0cmFjdERhdGFTb3VyY2VzKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IFRhYmxlRGF0YUNvbHVtbltdIHtcbiAgICBjb25zdCBkYXRhQ29sdW1uczogVGFibGVEYXRhQ29sdW1uW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmICghaXNUYWJsZVN1YmhlYWRlcihjb2wpKSB7XG4gICAgICAgIGRhdGFDb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkYXRhQ29sdW1ucy5wdXNoKC4uLnRoaXMuX2V4dHJhY3REYXRhU291cmNlcyhjb2wuY2hpbGRyZW4pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YUNvbHVtbnM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS4gUHVyZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXG4gICAqIEByZXR1cm5zIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgYXMgYSBudW1iZXIuXG4gICAqL1xuICBwcml2YXRlIF9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IG51bWJlciB7XG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSByZXR1cm4gMTtcbiAgICBsZXQgbWF4ID0gMTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzLmZpbHRlcih2ID0+IGlzVGFibGVTdWJoZWFkZXIodikpIGFzIFRhYmxlU3ViaGVhZGVyW10pIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IDEgKyB0aGlzLl9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbC5jaGlsZHJlbik7XG4gICAgICBpZiAoaGVpZ2h0ID4gbWF4KSBtYXggPSBoZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBtYXg7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHMgdGhlIGNvbHVtbnMgdHJlZSB0byBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy4gUHVyZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXG4gICAqIEBwYXJhbSBtYXhOZXN0aW5nIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXG4gICAqIEBwYXJhbSBjdXJyZW50TmVzdGluZyB0aGUgY3VycmVudCBuZXN0aW5nIGxldmVsIG9mIHRoZSBjb2x1bW5zIGFycmF5LlxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgX21hcENvbHVtbnNUb0FycmF5KFxuICAgIGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSxcbiAgICBtYXhOZXN0aW5nOiBudW1iZXIsXG4gICAgY3VycmVudE5lc3Rpbmc6IG51bWJlclxuICApOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSB7XG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSB7XG4gICAgICByZXR1cm4gW2NvbHMubWFwKGNvbCA9PiBuZXcgSGVhZGVyQ2VsbChjb2wsIDEsIG1heE5lc3RpbmcgLSBjdXJyZW50TmVzdGluZykpXTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyQ2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdID0gW1tdXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xuICAgICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW10sIC4uLnRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbC5jaGlsZHJlbiwgbWF4TmVzdGluZywgY3VycmVudE5lc3RpbmcgKyAxKV07XG4gICAgICBjb25zdCBoZWlnaHQgPSBjaGlsZENlbGxzLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCB3aWR0aCA9IGNoaWxkQ2VsbHNbMV0ubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICBoZWFkZXJDZWxscy5wdXNoKFtudWxsXSk7XG4gICAgICB9XG4gICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgd2lkdGgsIDEpKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGggLSAxOyBpKyspIHtcbiAgICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChudWxsKTtcbiAgICAgIH1cbiAgICAgIG1lcmdlMmRBcnJheXMoaGVhZGVyQ2VsbHMsIGNoaWxkQ2VsbHMpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyQ2VsbHM7XG4gIH1cblxuICAvLyEgc2V0dGluZyBpdGVtc1xuICAvKipcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgaXRlbXMuIFRha2VzIGludG8gYWNjb3VudCB0aGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgZm9yIGByb3dEaXNhYmxlZEZyb21gLCBgcm93Qm9sZEZyb21gLCBhbmQgYHJvd0hpZ2hsaWdodGVkRnJvbWAuXG4gICAqIEBwYXJhbSBpdGVtcyBBbiBhcnJheSBvZiBpdGVtcyB0byBiZSBzZXQgYXMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLlxuICAgKi9cbiAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0RlZmluZWRDb2x1bW5zKCkpIHJldHVybjtcblxuICAgIGNvbnN0IG1hcHBlZEl0ZW1zID0gaXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGkpKTtcbiAgICB0aGlzLl9pdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChtYXBwZWRJdGVtcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHMgcmF3IGl0ZW0gZGF0YSB0byBhbiB7QGxpbmsgQXJkVGFibGVSb3d9IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHJhd0l0ZW1EYXRhIC0gVGhlIHJhdyBkYXRhIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0uXG4gICAqIEByZXR1cm5zIHtBcmRUYWJsZVJvd30gUmV0dXJucyBhbiBBcmRUYWJsZVJvdyBvYmplY3Qgd2l0aCBtYXBwZWQgcHJvcGVydGllcy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEl0ZW1zTWFwRm4ocmF3SXRlbURhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHtcbiAgICAvL2dldCBkYXRhXG4gICAgY29uc3QgW2RhdGEsIGRhdGFDb2x1bW5zXSA9IHRoaXMuX2dldFJvd0RhdGEocmF3SXRlbURhdGEsIGluZGV4KTtcblxuICAgIC8vZ2V0IGJvbGRcbiAgICBjb25zdCByb3dCb2xkRnJvbVBhdGggPSB0aGlzLl9hcmRQYXJlbnRDb21wLnJvd0JvbGRGcm9tKCk7XG4gICAgbGV0IGJvbGQgPSByZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgcm93Qm9sZEZyb21QYXRoKTtcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5pbnZlcnRSb3dCb2xkKCkpIHtcbiAgICAgIGJvbGQgPSAhYm9sZDtcbiAgICB9XG5cbiAgICAvL2dldCBkaXNhYmxlZFxuICAgIGNvbnN0IGRpc2FibGVkUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAucm93RGlzYWJsZWRGcm9tKCk7XG4gICAgbGV0IGRpc2FibGVkID0gZXZhbHVhdGUocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGRpc2FibGVkUGF0aCkpO1xuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydFJvd0Rpc2FibGVkKCkpIHtcbiAgICAgIGRpc2FibGVkID0gIWRpc2FibGVkO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJkVGFibGVSb3cocmF3SXRlbURhdGEsIGluZGV4LCBkYXRhLCBkYXRhQ29sdW1ucywgZGlzYWJsZWQsIGJvbGQpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgZGF0YSBmb3IgYSByb3cgYmFzZWQgb24gZGF0YSBjb2x1bW5zIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyB7YW55W119IFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcm93IGRhdGEuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBbYW55W10sIFRhYmxlRGF0YUNvbHVtbltdXSB7XG4gICAgY29uc3QgZGF0YTogYW55W10gPSBbXTtcbiAgICBjb25zdCBfY29scyA9IHRoaXMuX2RhdGFDb2x1bW5zKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGF0YUNvbHVtbiA9IF9jb2xzW2ldO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGRhdGFDb2x1bW4uZGF0YVNvdXJjZTtcblxuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC50cmVhdERhdGFTb3VyY2VBc1N0cmluZygpKSB7XG4gICAgICAgICAgZGF0YS5wdXNoKHJhd0l0ZW1EYXRhW3NvdXJjZVBhdGhdKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIHNvdXJjZVBhdGgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnYXV0b2NvdW50Jykge1xuICAgICAgICBkYXRhLnB1c2goaW5kZXggKyAxKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IF9hcmRDaGVja2JveDogdHJ1ZSwgaW5kZXggfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc291cmNlU3RyaW5nID0gdHlwZW9mIHNvdXJjZVBhdGggPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoc291cmNlUGF0aCkgOiBzb3VyY2VQYXRoO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUkQtRlQ1MDUyOiBVbmV4cGVjdGVkIGRhdGEgc291cmNlIFwiJHtzb3VyY2VTdHJpbmd9XCIgYXQgaW5kZXggJHtpfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIFtkYXRhLCB0aGlzLl9kYXRhQ29sdW1ucygpXTtcbiAgfVxuICAvKipcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBpdGVtIHN0b3JhZ2UuIFNlbGVjdHMgdGhlIGNvcnJlY3QgaXRlbXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhbHVlcywgd2FybmluZyB0aGUgdXNlciBpZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLlxuICAgKiBAcGFyYW0gaW5kZXhlcyBUaGUgdmFsdWUgb2YgdGhlIG5nTW9kZWwgdG8gc2V0LlxuICAgKi9cbiAgd3JpdGVWYWx1ZShpbmRleGVzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuX2ZvcmNlVW5zZWxlY3RBbGwoKTtcbiAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uaW5kZXhlcyk7XG4gIH1cblxuICAvLyEgc2VsZWN0aW5nIGl0ZW1zXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW4gaXRlbSB3aXRoIHRoZSBnaXZlbiBpbmRleCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IF90cnVlXyBpZiB0aGUgaXRlbSBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIF9mYWxzZV8uXG4gICAqL1xuICBpc0l0ZW1TZWxlY3RlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcygpLnNvbWUoaXRlbSA9PiBpdGVtLmluZGV4KCkgPT09IGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0cyBhbGwgaXRlbXMuXG4gICAqXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3RBbGwoKTogW2FueVtdLCBhbnlbXV0ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEl0ZW0oLi4udGhpcy5faXRlbXMoKS5tYXAodiA9PiB2LmluZGV4KCkpKTtcbiAgfVxuICAvKipcbiAgICogVW5zZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcy5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCBjb21wb25lbnQgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHZhbHVlIHRvIGJlIHNlbGVjdGVkIGF0IGFsbCB0aW1lcywgdGhlIGZpcnN0IHNlbGVjdGVkIGl0ZW1zIGlzIGxlZnQgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIGNsZWFyZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIHVuc2VsZWN0QWxsKCk6IGFueVtdIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzZWxlY3RlZCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoc2VsZWN0ZWQpO1xuICB9XG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgY29tcG9uZW50IHNldHRpbmdzIGFyZS5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgY2xlYXJlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9yY2VVbnNlbGVjdEFsbCgpOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0ZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKHNlbGVjdGVkKTtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0cyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleGVzIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogW2FueVtdLCBhbnlbXV0ge1xuICAgIGNvbnN0IGl0ZW1zVG9CZVNlbGVjdGVkID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpICYmIGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XG4gICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkpIHtcbiAgICAgIHJldHVybiBbW10sIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVTZWxlY3RlZCldO1xuICAgIH1cblxuICAgIGxldCBpdGVtc1NlbGVjdGVkQ291bnQgPSAwO1xuICAgIGNvbnN0IGl0ZW1zU2VsZWN0ZWQgPSBbXTtcbiAgICBsZXQgaXRlbXNMZWZ0VW50aWxMaW1pdCA9ICh0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKSA/PyBJbmZpbml0eSkgLSB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGg7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XG4gICAgICBpdGVtc1NlbGVjdGVkQ291bnQrKztcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKCkpIGNvbnRpbnVlO1xuICAgICAgaWYgKGl0ZW1zTGVmdFVudGlsTGltaXQgPD0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGl0ZW1zTGVmdFVudGlsTGltaXQtLTtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KHRydWUpO1xuICAgICAgaXRlbXNTZWxlY3RlZC5wdXNoKGl0ZW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zRmFpbGVkVG9TZWxlY3QgPSBpdGVtc1RvQmVTZWxlY3RlZC5zbGljZShpdGVtc1NlbGVjdGVkQ291bnQgLSAxKTtcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcbiAgfVxuICAvKipcbiAgICogVW5zZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgdW5zZWxlY3RlZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgdW5zZWxlY3RlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxuICAgKi9cbiAgdW5zZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogYW55W10ge1xuICAgIGNvbnN0IGl0ZW1zVG9CZVVuc2VsZWN0ZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+IGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVVuc2VsZWN0ZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zVG9CZVVuc2VsZWN0ZWQpO1xuICB9XG5cbiAgLy8hIGhpZ2hsaWdodGluZyBpdGVtc1xuICAvKipcbiAgICogVW5oaWdobGlnaHRzIGFsbCBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgaXRlbXMuXG4gICAqL1xuICB1bmhpZ2hsaWdodEFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZCA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBoaWdobGlnaHRlZCkge1xuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGlnaGxpZ2h0cyB0aGUgZ2l2ZW4gaXRlbSwgd2hpbGUgdW5oaWdobGlnaHRpbmcgYWxsIG90aGVyIGl0ZW1zLiBEb2VzIG5vdGhpbmcgd2hlbiB0aGUgaXRlbSBpcyBkaXNhYmxlZC5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cbiAgICovXG4gIGhpZ2hsaWdodFNpbmdsZUl0ZW0oaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgaGlnaGxpZ2h0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBsYXN0IGhpZ2hsaWdodGVkIGl0ZW0uXG4gICAqL1xuICBoaWdobGlnaHRJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogQXJkVGFibGVSb3cge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcy5sYXN0KCk7XG4gIH1cbiAgLyoqXG4gICAqIFVuaGlnaGxpZ2h0cyBhbGwgZ2l2ZW4gaXRlbXMuXG4gICAqIEBwYXJhbSBpdGVtcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIHVuaGlnaGxpZ2h0ZWQuXG4gICAqL1xuICB1bmhpZ2hsaWdodEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5oaWdobGlnaHRlZCgpKSByZXR1cm47XG5cbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgdGhlIGZpcnN0IGl0ZW0gb3V0IG9mIGFsbCBpdGVtcy5cbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXG4gICAqL1xuICBoaWdobGlnaHRGaXJzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcbiAgICB0aGlzLnVuaGlnaGxpZ2h0QWxsKCk7XG5cbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLmZpcnN0KCkuaW5kZXgoKTtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgdGhlIGxhc3QgaXRlbSBvdXQgb2YgYWxsIGl0ZW1zLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cbiAgICovXG4gIGhpZ2hsaWdodExhc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHRhYmxlSXRlbXMoKS5sYXN0KCkuaW5kZXgoKTtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgYWxsIG5vbi1kaXNhYmxlZCBpdGVtcy5cbiAgICovXG4gIGhpZ2hsaWdodEFsbEl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLm1hcCh2ID0+IHYuaW5kZXgoKSk7XG4gICAgdGhpcy5oaWdobGlnaHRJdGVtKC4uLml0ZW1zVG9IaWdobGlnaHQpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRoZSBuZXh0IG5vbi1kaXNhYmxlZCBpdGVtIGRlZmluZWQgYnkgdGhlIG9mZnNldCBhbW91bnQuXG4gICAqXG4gICAqIElmIGBoYXNTaGlmdGAgaXMgc2V0IHRvIHRydWUsIGFsbCBvcmlnaW5hbGx5IGhpZ2hsaWdodGVkIGl0ZW1zIGFyZSBrZXB0LiBPdGhlcndpc2UsIGFsbCBvcmlnaW5hbCBpdGVtcyBhcmUgdW5zZWxlY3RlZC5cbiAgICogQHBhcmFtIG9mZnNldCBUaGUgYW1vdW50IG9mIGl0ZW1zIHRvIG9mZnNldCB0aGUgaGlnaGxpZ2h0IGJ5LlxuICAgKiBAcGFyYW0gaGFzU2hpZnQgV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIHNoaWZ0IGtleSBwcmVzc2VkLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBoaWdobGlnaHRlZC5cbiAgICovXG4gIGhpZ2hsaWdodE5leHRJdGVtKG9mZnNldDogbnVtYmVyLCBoYXNTaGlmdD86IGJvb2xlYW4pOiBBcmRUYWJsZVJvdyB8IG51bGwge1xuICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKS5sYXN0KCk7XG4gICAgY29uc3QgaXRlbXNXaXRob3V0RGlzYWJsZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSAmJiAoIXRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkgfHwgaXRlbS5zZWxlY3RlZCgpKVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudEluZGV4SW5JdGVtcyA9IGl0ZW1zV2l0aG91dERpc2FibGVkLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaW5kZXgoKSA9PT0gY3VycmVudEl0ZW0uaW5kZXgoKSk7XG5cbiAgICBsZXQgbmV4dEl0ZW1JbmRleCA9IGN1cnJlbnRJbmRleEluSXRlbXMgKyBvZmZzZXQ7XG4gICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoKSB7XG4gICAgICBuZXh0SXRlbUluZGV4IC09IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG5leHRJdGVtSW5kZXggPCAwKSB7XG4gICAgICBuZXh0SXRlbUluZGV4ICs9IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gaXRlbXNXaXRob3V0RGlzYWJsZWRbbmV4dEl0ZW1JbmRleF07XG5cbiAgICBpZiAoaGFzU2hpZnQpIHtcbiAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQoKSkge1xuICAgICAgICB0aGlzLnVuaGlnaGxpZ2h0SXRlbShuZXh0SXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0obmV4dEl0ZW1JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFNpbmdsZUl0ZW0obmV4dEl0ZW1JbmRleCk7XG4gIH1cblxuICAvLyEgc29ydGluZ1xuICBwcml2YXRlIF9jdXJyZW50U29ydENvbHVtbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2N1cnJlbnRTb3J0VHlwZTogU29ydFR5cGUgfCBudWxsID0gbnVsbDtcblxuICB0b2dnbGVDdXJyZW50U29ydENvbHVtbihjb2x1bW46IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuRGVzY2VuZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkFzY2VuZGluZztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cyh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuQXNjZW5kaW5nO1xuICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cygpO1xuICB9XG4gIHJlc2V0U29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gbnVsbDtcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXMoKV0pO1xuICB9XG4gIGdldENvbHVtblNvcnRUeXBlKGNvbHVtbjogbnVtYmVyKTogU29ydFR5cGUgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTb3J0VHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfZ2VuZXJhdGVTb3J0ZWRSb3dzKGp1c3RSZXZlcnNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChqdXN0UmV2ZXJzZSkge1xuICAgICAgdGhpcy5fc29ydGVkSXRlbXMudXBkYXRlKHYgPT4gWy4uLnYucmV2ZXJzZSgpXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNvcnRDb2x1bW5JbmRleCA9IHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uO1xuICAgIGlmIChpc051bGwoc29ydENvbHVtbkluZGV4KSB8fCAhdGhpcy5fY3VycmVudFNvcnRUeXBlKSB7XG4gICAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQodGhpcy5pdGVtcygpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc29ydENvbHVtbiA9IHRoaXMuX2RhdGFDb2x1bW5zKClbc29ydENvbHVtbkluZGV4XTtcbiAgICBpZiAoIXNvcnRDb2x1bW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFSRC1JUzUwNTk6IEVuY291bnRlcmVkIGFuIGlzc3VlIGluIDxhcmQtdGFibGU+OiBjb3VsZCBub3QgZmluZCB0aGUgY29sdW1uIHdpdGggaW5kZXggJHtzb3J0Q29sdW1uSW5kZXh9LiBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIEFyZGl1bSBVSSBidWcsIHBsZWFzZSByZXBvcnQgaXQgdG8gdGhlIGNyZWF0b3JzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcgPyAxIDogLTE7XG4gICAgY29uc3Qgc29ydEZuID1cbiAgICAgIHNvcnRDb2x1bW4uc29ydEZuID8/XG4gICAgICAoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gZGlyZWN0aW9uO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChbLi4udGhpcy5pdGVtcygpXS5zb3J0KChhLCBiKSA9PiBzb3J0Rm4oYS5kYXRhKClbc29ydENvbHVtbkluZGV4XSwgYi5kYXRhKClbc29ydENvbHVtbkluZGV4XSkpKTtcbiAgfVxufVxuIl19
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFtQix1QkFBdUIsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3RSxNQUFNLE9BQU8sV0FBVztJQXdCdEIsWUFDRSxRQUFhLEVBQ2IsS0FBYSxFQUNiLElBQVcsRUFDWCxXQUE4QixFQUM5QixRQUFpQixFQUNqQixJQUFhLEVBQ2IsT0FBTyxHQUFHLEtBQUs7UUE5QkEsY0FBUyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QixVQUFLLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDakMsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcmVzb2x2ZVBhdGggfSBmcm9tICdyZXNvbHZlLW9iamVjdC1wYXRoJztcclxuaW1wb3J0IHsgZXZhbHVhdGUsIGlzRGVmaW5lZCwgaXNOdWxsIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJy4uL3R5cGVzL3V0aWxpdHkudHlwZXMnO1xyXG5pbXBvcnQgeyBTb3J0VHlwZSwgVGFibGVEYXRhQ29sdW1uLCBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSwgVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcclxuaW1wb3J0IHsgYXJlQWxsRGF0YUNvbHVtbnMsIGlzVGFibGVTdWJoZWFkZXIsIG1lcmdlMmRBcnJheXMgfSBmcm9tICcuL3V0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcmRUYWJsZVJvdyB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbURhdGEgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IGl0ZW1EYXRhID0gdGhpcy5faXRlbURhdGEuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcclxuICByZWFkb25seSBpbmRleCA9IHRoaXMuX2luZGV4LmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNFbXB0eSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgaXNFbXB0eSA9IHRoaXMuX2lzRW1wdHkuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhID0gc2lnbmFsPGFueVtdPihbXSk7XHJcbiAgcmVhZG9ubHkgZGF0YSA9IHRoaXMuX2RhdGEuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhQ29sdW1ucyA9IHNpZ25hbDxUYWJsZURhdGFDb2x1bW5bXT4oW10pO1xyXG4gIHJlYWRvbmx5IGRhdGFDb2x1bW5zID0gdGhpcy5fZGF0YUNvbHVtbnMuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9jbGFzcyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICByZWFkb25seSBjbGFzcyA9IHRoaXMuX2NsYXNzLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGJvbGQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaXRlbURhdGE6IGFueSxcclxuICAgIGluZGV4OiBudW1iZXIsXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIGRhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSxcclxuICAgIGRpc2FibGVkOiBib29sZWFuLFxyXG4gICAgYm9sZDogYm9vbGVhbixcclxuICAgIGlzRW1wdHkgPSBmYWxzZVxyXG4gICkge1xyXG4gICAgdGhpcy5faXRlbURhdGEuc2V0KGl0ZW1EYXRhKTtcclxuICAgIHRoaXMuX2luZGV4LnNldChpbmRleCk7XHJcbiAgICB0aGlzLl9kYXRhLnNldChkYXRhKTtcclxuICAgIHRoaXMuX2RhdGFDb2x1bW5zLnNldChkYXRhQ29sdW1ucyk7XHJcbiAgICB0aGlzLmRpc2FibGVkLnNldChkaXNhYmxlZCk7XHJcbiAgICB0aGlzLmJvbGQuc2V0KGJvbGQpO1xyXG4gICAgdGhpcy5faXNFbXB0eS5zZXQoaXNFbXB0eSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBuZXdFbXB0eUNlbGwoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIG5ldyBBcmRUYWJsZVJvdyhudWxsLCBpbmRleCwgW10sIFtdLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlSXRlbVN0b3JhZ2VIb3N0IHtcclxuICByZWFkb25seSByb3dEaXNhYmxlZEZyb206IFNpZ25hbDxzdHJpbmc+O1xyXG4gIHJlYWRvbmx5IHJvd0JvbGRGcm9tOiBTaWduYWw8c3RyaW5nPjtcclxuICByZWFkb25seSBpbnZlcnRSb3dEaXNhYmxlZDogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIHJlYWRvbmx5IGludmVydFJvd0JvbGQ6IFNpZ25hbDxib29sZWFuPjtcclxuICByZWFkb25seSBkYXRhOiBTaWduYWw8TnVsbGFibGU8YW55Pj5bXTtcclxuICByZWFkb25seSBtYXhTZWxlY3RlZEl0ZW1zOiBTaWduYWw8TnVsbGFibGU8bnVtYmVyPj47XHJcbiAgcmVhZG9ubHkgdHJlYXREYXRhU291cmNlQXNTdHJpbmc6IFNpZ25hbDxib29sZWFuPjtcclxuXHJcbiAgcmVhZG9ubHkgcGFnaW5hdGVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgcmVhZG9ubHkgcGFnaW5hdGlvblN0cmF0ZWd5OiBTaWduYWw8VGFibGVQYWdpbmF0aW9uU3RyYXRlZ3k+O1xyXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZTogU2lnbmFsPG51bWJlcj47XHJcbiAgcmVhZG9ubHkgcGFnZTogU2lnbmFsPG51bWJlcj47XHJcbn1cclxuZXhwb3J0IGNsYXNzIEhlYWRlckNlbGwge1xyXG4gIHJlYWRvbmx5IGNlbGwgPSBzaWduYWw8VGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXI+KHVuZGVmaW5lZCBhcyBhbnkpO1xyXG4gIHJlYWRvbmx5IGNvbHNwYW4gPSBzaWduYWw8bnVtYmVyPigxKTtcclxuICByZWFkb25seSByb3dzcGFuID0gc2lnbmFsPG51bWJlcj4oMSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBjb2xzcGFuID0gMSwgcm93c3BhbiA9IDEpIHtcclxuICAgIHRoaXMuY2VsbC5zZXQoY2VsbCk7XHJcbiAgICB0aGlzLmNvbHNwYW4uc2V0KGNvbHNwYW4pO1xyXG4gICAgdGhpcy5yb3dzcGFuLnNldChyb3dzcGFuKTtcclxuICB9XHJcblxyXG4gIGdldCB3aWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGwoKTtcclxuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLl9nZXRXaWR0aChjZWxsLndpZHRoKTtcclxuICB9XHJcbiAgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbCgpO1xyXG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoY2VsbCkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKGNlbGwubWluV2lkdGgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUaHJhbnNmb3JtcyBhIG51bWVyaWMgd2lkdGggaW50byBhIENTUyBzdHJpbmcgaWYgbmVlZGVkLiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSB3aWR0aCB0aGUgd2lkdGggdG8gYmUgY29udmVydGVkLlxyXG4gICAqIEByZXR1cm5zIFRoZSB3aWR0aCBleHByZXNzZWQgYXMgYSBDU1MtY29tcGF0aWJsZSBzdHJpbmcgb3IgbnVsbC5cclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRXaWR0aCh3aWR0aDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXdpZHRoKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInKSByZXR1cm4gYCR7d2lkdGh9cHhgO1xyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlSXRlbVN0b3JhZ2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zID0gc2lnbmFsPEFyZFRhYmxlUm93W10+KFtdKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zb3J0ZWRJdGVtcyA9IHNpZ25hbDxBcmRUYWJsZVJvd1tdPihbXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFDb2x1bW5zID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbltdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyQ2VsbHMgPSBzaWduYWw8SGVhZGVyQ2VsbFtdW10+KFtdKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfYXJkUGFyZW50Q29tcDogVGFibGVJdGVtU3RvcmFnZUhvc3QpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGl0ZW1zID0gdGhpcy5faXRlbXMuYXNSZWFkb25seSgpO1xyXG4gIHJlYWRvbmx5IHNvcnRlZEl0ZW1zID0gdGhpcy5fc29ydGVkSXRlbXMuYXNSZWFkb25seSgpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBzdGF0ZS5cclxuICAgKi9cclxuICByZWFkb25seSBwYWdpbmF0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0ZWQoKSB8fCB0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRpb25TdHJhdGVneSgpID09PSBUYWJsZVBhZ2luYXRpb25TdHJhdGVneS5Ob29wKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdlKCk7XHJcbiAgICBjb25zdCBJUFAgPSB0aGlzLl9hcmRQYXJlbnRDb21wLml0ZW1zUGVyUGFnZSgpO1xyXG4gICAgY29uc3QgaXRlbXNTdGFydCA9IChwYWdlIC0gMSkgKiBJUFA7XHJcbiAgICBjb25zdCBpdGVtc0VuZCA9IHBhZ2UgKiBJUFA7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcygpLnNsaWNlKGl0ZW1zU3RhcnQsIGl0ZW1zRW5kKTtcclxuICB9KTtcclxuICAvKipcclxuICAgKiBHZXRzIGFsbCBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKCkpKTtcclxuICAvKipcclxuICAgKiBHZXRzIGFsbCBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmhpZ2hsaWdodGVkKCkpKTtcclxuICAvKipcclxuICAgKiBHZXRzIGFsbCBoaWdobGlnaHRhYmxlIGl0ZW1zLiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgaGlnaGxpZ2h0YWJsZSBpZiBpdCBpcyAqKm5vdCoqIGRpc2FibGVkLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGFibGVJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSkpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcygpKSk7XHJcbiAgLyoqXHJcbiAgICogTWFwcyBhbiBhcnJheSBvZiBpdGVtcyBpbnRvIHRoZWlyIHZhbHVlcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRvIGNvbnZlcnQgdG8gdmFsdWUuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbSB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaXRlbXNUb1ZhbHVlKGl0ZW1zOiBBcmRUYWJsZVJvd1tdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaXRlbURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgaGlnaGxpZ2h0ZWQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKi9cclxuICByZWFkb25seSBpc0FueUl0ZW1IaWdobGlnaHRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpLmxlbmd0aCA+IDApO1xyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgdGFibGUgaXMgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYW55IGl0ZW0gaXMgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXNBbnlJdGVtU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYWxsIGl0ZW1zIGluIHRoZSB0YWJsZSBhcmUgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIGl0ZW1zIGFyZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICByZWFkb25seSBhcmVBbGxTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aCA9PT0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKS5sZW5ndGgpO1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyZW50IGNvbXBvbmVudCBkZWZpbmVzIHRoZSBsaW1pdCBvZiBjb25jdXJyZW50bHkgc2VsZWN0YWJsZSBpdGVtcyBhbmQgdGhlIGFtb3VudCBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgbWF0Y2hlcyB0aGF0IGxpbWl0LiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cclxuICAgKlxyXG4gICAqICoqVExEUioqOiB0cnVlIGlmIGBtYXhTZWxlY3RlZEl0ZW1zYCBpcyBkZWZpbmVkIGFuZCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCB2YWx1ZS5cclxuICAgKi9cclxuICByZWFkb25seSBpc0l0ZW1MaW1pdFJlYWNoZWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKTtcclxuICAgIGlmICghaXNEZWZpbmVkKG1heCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heCA8PSB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGg7XHJcbiAgfSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGhlYWRlciBjZWxscyBvZiB0aGUgdGFibGUuXHJcbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZGVyQ2VsbHMgPSB0aGlzLl9oZWFkZXJDZWxscy5hc1JlYWRvbmx5KCk7XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHRoZSB0YWJsZSBoYXMgZGVmaW5lZCBjb2x1bW5zLlxyXG4gICAqIEByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB0YWJsZSBoYXMgZGVmaW5lZCBjb2x1bW5zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhhc0RlZmluZWRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZGF0YUNvbHVtbnMoKS5sZW5ndGggPiAwKTtcclxuXHJcbiAgLy8hIHNldHRpbmcgY29sdW1uc1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbHVtbnMgb2YgdGhlIHRhYmxlLlxyXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxyXG4gICAqL1xyXG4gIHNldENvbHVtbnMoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXhOZXN0aW5nTGV2ZWwgPSB0aGlzLl9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHMpO1xyXG4gICAgY29uc3QgaGVhZGVyQ2VsbHMgPSB0aGlzLl9tYXBDb2x1bW5zVG9BcnJheShjb2xzLCBtYXhOZXN0aW5nTGV2ZWwsIDApO1xyXG4gICAgdGhpcy5faGVhZGVyQ2VsbHMuc2V0KHRoaXMuX2ZpbHRlckhlYWRlckNlbGxzKGhlYWRlckNlbGxzKSk7XHJcbiAgICB0aGlzLl9kYXRhQ29sdW1ucy5zZXQodGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbHMpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmlsdGVycyBvdXQgbnVsbCB2YWx1ZXMgZnJvbSB0aGUgaGVhZGVyIGNlbGxzIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSBjZWxscyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyB3aXRob3V0IG51bGwgdmFsdWVzIGFuZCBlbXB0eSBhcnJheXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZmlsdGVySGVhZGVyQ2VsbHMoY2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdKTogSGVhZGVyQ2VsbFtdW10ge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbGxzLmZpbHRlcihyb3cgPT4gcm93Lmxlbmd0aCkgYXMgSGVhZGVyQ2VsbFtdW107XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3RzIHRoZSBkYXRhIHNvdXJjZXMgZnJvbSB0aGUgY29sdW1ucyBhcnJheS4gUHVyZSBmdW5jdGlvbi5cclxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cclxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdERhdGFTb3VyY2VzKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IFRhYmxlRGF0YUNvbHVtbltdIHtcclxuICAgIGNvbnN0IGRhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcclxuICAgICAgaWYgKCFpc1RhYmxlU3ViaGVhZGVyKGNvbCkpIHtcclxuICAgICAgICBkYXRhQ29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YUNvbHVtbnMucHVzaCguLi50aGlzLl9leHRyYWN0RGF0YVNvdXJjZXMoY29sLmNoaWxkcmVuKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGFDb2x1bW5zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICogQHJldHVybnMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBhcyBhIG51bWJlci5cclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IG51bWJlciB7XHJcbiAgICBpZiAoYXJlQWxsRGF0YUNvbHVtbnMoY29scykpIHJldHVybiAxO1xyXG4gICAgbGV0IG1heCA9IDE7XHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzLmZpbHRlcih2ID0+IGlzVGFibGVTdWJoZWFkZXIodikpIGFzIFRhYmxlU3ViaGVhZGVyW10pIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gMSArIHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29sLmNoaWxkcmVuKTtcclxuICAgICAgaWYgKGhlaWdodCA+IG1heCkgbWF4ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWFwcyB0aGUgY29sdW1ucyB0cmVlIHRvIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxyXG4gICAqIEBwYXJhbSBtYXhOZXN0aW5nIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXHJcbiAgICogQHBhcmFtIGN1cnJlbnROZXN0aW5nIHRoZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXHJcbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbWFwQ29sdW1uc1RvQXJyYXkoXHJcbiAgICBjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10sXHJcbiAgICBtYXhOZXN0aW5nOiBudW1iZXIsXHJcbiAgICBjdXJyZW50TmVzdGluZzogbnVtYmVyXHJcbiAgKTogKEhlYWRlckNlbGwgfCBudWxsKVtdW10ge1xyXG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSB7XHJcbiAgICAgIHJldHVybiBbY29scy5tYXAoY29sID0+IG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSldO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGVhZGVyQ2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdID0gW1tdXTtcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcclxuICAgICAgaWYgKCFpc1RhYmxlU3ViaGVhZGVyKGNvbCkpIHtcclxuICAgICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2hpbGRDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW10sIC4uLnRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbC5jaGlsZHJlbiwgbWF4TmVzdGluZywgY3VycmVudE5lc3RpbmcgKyAxKV07XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNoaWxkQ2VsbHMubGVuZ3RoIC0gMTtcclxuICAgICAgY29uc3Qgd2lkdGggPSBjaGlsZENlbGxzWzFdLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xyXG4gICAgICAgIGhlYWRlckNlbGxzLnB1c2goW251bGxdKTtcclxuICAgICAgfVxyXG4gICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgd2lkdGgsIDEpKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aCAtIDE7IGkrKykge1xyXG4gICAgICAgIGhlYWRlckNlbGxzWzBdLnB1c2gobnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgbWVyZ2UyZEFycmF5cyhoZWFkZXJDZWxscywgY2hpbGRDZWxscyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGVhZGVyQ2VsbHM7XHJcbiAgfVxyXG5cclxuICAvLyEgc2V0dGluZyBpdGVtc1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLiBUYWtlcyBpbnRvIGFjY291bnQgdGhlIHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50IGZvciBgcm93RGlzYWJsZWRGcm9tYCwgYHJvd0JvbGRGcm9tYCwgYW5kIGByb3dIaWdobGlnaHRlZEZyb21gLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBBbiBhcnJheSBvZiBpdGVtcyB0byBiZSBzZXQgYXMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHNldEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc0RlZmluZWRDb2x1bW5zKCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBtYXBwZWRJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5fc2V0SXRlbXNNYXBGbihpdGVtLCBpKSk7XHJcbiAgICB0aGlzLl9pdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KG1hcHBlZEl0ZW1zKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWFwcyByYXcgaXRlbSBkYXRhIHRvIGFuIHtAbGluayBBcmRUYWJsZVJvd30gb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IHJhd0l0ZW1EYXRhIC0gVGhlIHJhdyBkYXRhIG9mIHRoZSBpdGVtLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbS5cclxuICAgKiBAcmV0dXJucyB7QXJkVGFibGVSb3d9IFJldHVybnMgYW4gQXJkVGFibGVSb3cgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXMuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZXRJdGVtc01hcEZuKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBBcmRUYWJsZVJvdyB7XHJcbiAgICAvL2dldCBkYXRhXHJcbiAgICBjb25zdCBbZGF0YSwgZGF0YUNvbHVtbnNdID0gdGhpcy5fZ2V0Um93RGF0YShyYXdJdGVtRGF0YSwgaW5kZXgpO1xyXG5cclxuICAgIC8vZ2V0IGJvbGRcclxuICAgIGNvbnN0IHJvd0JvbGRGcm9tUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAucm93Qm9sZEZyb20oKTtcclxuICAgIGxldCBib2xkID0gcmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIHJvd0JvbGRGcm9tUGF0aCk7XHJcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5pbnZlcnRSb3dCb2xkKCkpIHtcclxuICAgICAgYm9sZCA9ICFib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vZ2V0IGRpc2FibGVkXHJcbiAgICBjb25zdCBkaXNhYmxlZFBhdGggPSB0aGlzLl9hcmRQYXJlbnRDb21wLnJvd0Rpc2FibGVkRnJvbSgpO1xyXG4gICAgbGV0IGRpc2FibGVkID0gZXZhbHVhdGUocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGRpc2FibGVkUGF0aCkpO1xyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaW52ZXJ0Um93RGlzYWJsZWQoKSkge1xyXG4gICAgICBkaXNhYmxlZCA9ICFkaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IEFyZFRhYmxlUm93KHJhd0l0ZW1EYXRhLCBpbmRleCwgZGF0YSwgZGF0YUNvbHVtbnMsIGRpc2FibGVkLCBib2xkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGRhdGEgZm9yIGEgcm93IGJhc2VkIG9uIGRhdGEgY29sdW1ucyBjb25maWd1cmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IHJhd0l0ZW1EYXRhIC0gVGhlIHJhdyBkYXRhIG9mIHRoZSBpdGVtLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbS5cclxuICAgKiBAcmV0dXJucyB7YW55W119IFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcm93IGRhdGEuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBbYW55W10sIFRhYmxlRGF0YUNvbHVtbltdXSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgX2NvbHMgPSB0aGlzLl9kYXRhQ29sdW1ucygpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfY29scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBkYXRhQ29sdW1uID0gX2NvbHNbaV07XHJcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBkYXRhQ29sdW1uLmRhdGFTb3VyY2U7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAudHJlYXREYXRhU291cmNlQXNTdHJpbmcoKSkge1xyXG4gICAgICAgICAgZGF0YS5wdXNoKHJhd0l0ZW1EYXRhW3NvdXJjZVBhdGhdKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRhLnB1c2gocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIHNvdXJjZVBhdGgpKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnYXV0b2NvdW50Jykge1xyXG4gICAgICAgIGRhdGEucHVzaChpbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzb3VyY2VQYXRoLnR5cGUgPT09ICdjaGVja2JveCcpIHtcclxuICAgICAgICBkYXRhLnB1c2goeyBfYXJkQ2hlY2tib3g6IHRydWUsIGluZGV4IH0pO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZVN0cmluZyA9IHR5cGVvZiBzb3VyY2VQYXRoID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHNvdXJjZVBhdGgpIDogc291cmNlUGF0aDtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUkQtRlQ1MDUyOiBVbmV4cGVjdGVkIGRhdGEgc291cmNlIFwiJHtzb3VyY2VTdHJpbmd9XCIgYXQgaW5kZXggJHtpfS5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBbZGF0YSwgdGhpcy5fZGF0YUNvbHVtbnMoKV07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgaXRlbSBzdG9yYWdlLiBTZWxlY3RzIHRoZSBjb3JyZWN0IGl0ZW1zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB2YWx1ZXMsIHdhcm5pbmcgdGhlIHVzZXIgaWYgdGhlIHZhbHVlIGlzIG5vdCBmb3VuZC5cclxuICAgKiBAcGFyYW0gaW5kZXhlcyBUaGUgdmFsdWUgb2YgdGhlIG5nTW9kZWwgdG8gc2V0LlxyXG4gICAqL1xyXG4gIHdyaXRlVmFsdWUoaW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZvcmNlVW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2VsZWN0SXRlbSguLi5pbmRleGVzKTtcclxuICB9XHJcblxyXG4gIC8vISBzZWxlY3RpbmcgaXRlbXNcclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYW4gaXRlbSB3aXRoIHRoZSBnaXZlbiBpbmRleCBpcyBzZWxlY3RlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gY2hlY2suXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IF90cnVlXyBpZiB0aGUgaXRlbSBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIF9mYWxzZV8uXHJcbiAgICovXHJcbiAgaXNJdGVtU2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcygpLnNvbWUoaXRlbSA9PiBpdGVtLmluZGV4KCkgPT09IGluZGV4KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhbGwgaXRlbXMuXHJcbiAgICpcclxuICAgKiBBY2NvdW50cyBmb3IgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxyXG4gICAqICogQW4gYXJyYXkgb2YgaXRlbXMgc2VsZWN0ZWQuXHJcbiAgICogKiBBbiBhcnJheSBvZiBpdGVtcyBmYWlsZWQgdG8gc2VsZWN0LlxyXG4gICAqL1xyXG4gIHNlbGVjdEFsbCgpOiBbYW55W10sIGFueVtdXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RJdGVtKC4uLnRoaXMuX2l0ZW1zKCkubWFwKHYgPT4gdi5pbmRleCgpKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVuc2VsZWN0cyBhbGwgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgcGFyZW50IGNvbXBvbmVudCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgdmFsdWUgdG8gYmUgc2VsZWN0ZWQgYXQgYWxsIHRpbWVzLCB0aGUgZmlyc3Qgc2VsZWN0ZWQgaXRlbXMgaXMgbGVmdCBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtcyBjbGVhcmVkLCBtYXBwZWQgdG8gb25seSB0aGVpciB2YWx1ZXMuXHJcbiAgICovXHJcbiAgdW5zZWxlY3RBbGwoKTogYW55W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzZWxlY3RlZCkge1xyXG4gICAgICBpdGVtLnNlbGVjdGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZShzZWxlY3RlZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVuc2VsZWN0cyBhbGwgc2VsZWN0ZWQgaXRlbXMsIG5vIG1hdHRlciB3aGF0IHRoZSBjb21wb25lbnQgc2V0dGluZ3MgYXJlLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIGNsZWFyZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9mb3JjZVVuc2VsZWN0QWxsKCk6IGFueVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0ZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoc2VsZWN0ZWQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cclxuICAgKlxyXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaW5kZXhlcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIHNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxyXG4gICAqIC0gQW4gYXJyYXkgb2YgaXRlbXMgc2VsZWN0ZWQuXHJcbiAgICogLSBBbiBhcnJheSBvZiBpdGVtcyBmYWlsZWQgdG8gc2VsZWN0LlxyXG4gICAqL1xyXG4gIHNlbGVjdEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBbYW55W10sIGFueVtdXSB7XHJcbiAgICBjb25zdCBpdGVtc1RvQmVTZWxlY3RlZCA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSAmJiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xyXG4gICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkpIHtcclxuICAgICAgcmV0dXJuIFtbXSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zVG9CZVNlbGVjdGVkKV07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGl0ZW1zU2VsZWN0ZWRDb3VudCA9IDA7XHJcbiAgICBjb25zdCBpdGVtc1NlbGVjdGVkID0gW107XHJcbiAgICBsZXQgaXRlbXNMZWZ0VW50aWxMaW1pdCA9ICh0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKSA/PyBJbmZpbml0eSkgLSB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGg7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXNUb0JlU2VsZWN0ZWQpIHtcclxuICAgICAgaXRlbXNTZWxlY3RlZENvdW50Kys7XHJcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKCkpIGNvbnRpbnVlO1xyXG4gICAgICBpZiAoaXRlbXNMZWZ0VW50aWxMaW1pdCA8PSAwKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaXRlbXNMZWZ0VW50aWxMaW1pdC0tO1xyXG4gICAgICBpdGVtLnNlbGVjdGVkLnNldCh0cnVlKTtcclxuICAgICAgaXRlbXNTZWxlY3RlZC5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1zRmFpbGVkVG9TZWxlY3QgPSBpdGVtc1RvQmVTZWxlY3RlZC5zbGljZShpdGVtc1NlbGVjdGVkQ291bnQgLSAxKTtcclxuICAgIHJldHVybiBbdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zU2VsZWN0ZWQpLCB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNGYWlsZWRUb1NlbGVjdCldO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbnNlbGVjdHMgb25lIG9yIG11bHRpcGxlIGl0ZW1zLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIHVuc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgdW5zZWxlY3RlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxyXG4gICAqL1xyXG4gIHVuc2VsZWN0SXRlbSguLi5pbmRleGVzOiBudW1iZXJbXSk6IGFueVtdIHtcclxuICAgIGNvbnN0IGl0ZW1zVG9CZVVuc2VsZWN0ZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+IGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXNUb0JlVW5zZWxlY3RlZCkge1xyXG4gICAgICBpdGVtLnNlbGVjdGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVVbnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8vISBoaWdobGlnaHRpbmcgaXRlbXNcclxuICAvKipcclxuICAgKiBVbmhpZ2hsaWdodHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cclxuICAgKi9cclxuICB1bmhpZ2hsaWdodEFsbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGhpZ2hsaWdodGVkID0gdGhpcy5oaWdobGlnaHRlZEl0ZW1zKCk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBnaXZlbiBpdGVtLCB3aGlsZSB1bmhpZ2hsaWdodGluZyBhbGwgb3RoZXIgaXRlbXMuIERvZXMgbm90aGluZyB3aGVuIHRoZSBpdGVtIGlzIGRpc2FibGVkLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBiZSBoaWdobGlnaHRlZC5cclxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cclxuICAgKi9cclxuICBoaWdobGlnaHRTaW5nbGVJdGVtKGluZGV4OiBudW1iZXIpOiBBcmRUYWJsZVJvdyB8IG51bGwge1xyXG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SXRlbShpbmRleCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgYWxsIGdpdmVuIGl0ZW1zLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIGhpZ2hsaWdodGVkLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsYXN0IGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0SXRlbSguLi5pbmRleGVzOiBudW1iZXJbXSk6IEFyZFRhYmxlUm93IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zLmxhc3QoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5oaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSB1bmhpZ2hsaWdodGVkLlxyXG4gICAqL1xyXG4gIHVuaGlnaGxpZ2h0SXRlbSguLi5pbmRleGVzOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+IGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmhpZ2hsaWdodGVkKCkpIHJldHVybjtcclxuXHJcbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgZmlyc3QgaXRlbSBvdXQgb2YgYWxsIGl0ZW1zLlxyXG4gICAqIEByZXR1cm5zIFRoZSBoaWdobGlnaHRlZCBpdGVtLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodEZpcnN0SXRlbSgpOiBBcmRUYWJsZVJvdyB8IG51bGwge1xyXG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xyXG5cclxuICAgIGNvbnN0IGl0ZW1Ub0hpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0YWJsZUl0ZW1zKCkuZmlyc3QoKS5pbmRleCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SXRlbShpdGVtVG9IaWdobGlnaHQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBsYXN0IGl0ZW0gb3V0IG9mIGFsbCBpdGVtcy5cclxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cclxuICAgKi9cclxuICBoaWdobGlnaHRMYXN0SXRlbSgpOiBBcmRUYWJsZVJvdyB8IG51bGwge1xyXG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xyXG5cclxuICAgIGNvbnN0IGl0ZW1Ub0hpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0YWJsZUl0ZW1zKCkubGFzdCgpLmluZGV4KCk7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgYWxsIG5vbi1kaXNhYmxlZCBpdGVtcy5cclxuICAgKi9cclxuICBoaWdobGlnaHRBbGxJdGVtcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGl0ZW1zVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLm1hcCh2ID0+IHYuaW5kZXgoKSk7XHJcbiAgICB0aGlzLmhpZ2hsaWdodEl0ZW0oLi4uaXRlbXNUb0hpZ2hsaWdodCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgdGhlIG5leHQgbm9uLWRpc2FibGVkIGl0ZW0gZGVmaW5lZCBieSB0aGUgb2Zmc2V0IGFtb3VudC5cclxuICAgKlxyXG4gICAqIElmIGBoYXNTaGlmdGAgaXMgc2V0IHRvIHRydWUsIGFsbCBvcmlnaW5hbGx5IGhpZ2hsaWdodGVkIGl0ZW1zIGFyZSBrZXB0LiBPdGhlcndpc2UsIGFsbCBvcmlnaW5hbCBpdGVtcyBhcmUgdW5zZWxlY3RlZC5cclxuICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBhbW91bnQgb2YgaXRlbXMgdG8gb2Zmc2V0IHRoZSBoaWdobGlnaHQgYnkuXHJcbiAgICogQHBhcmFtIGhhc1NoaWZ0IFdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBzaGlmdCBrZXkgcHJlc3NlZC5cclxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBoaWdobGlnaHRlZC5cclxuICAgKi9cclxuICBoaWdobGlnaHROZXh0SXRlbShvZmZzZXQ6IG51bWJlciwgaGFzU2hpZnQ/OiBib29sZWFuKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKS5sYXN0KCk7XHJcbiAgICBjb25zdCBpdGVtc1dpdGhvdXREaXNhYmxlZCA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKFxyXG4gICAgICBpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkgJiYgKCF0aGlzLmlzSXRlbUxpbWl0UmVhY2hlZCgpIHx8IGl0ZW0uc2VsZWN0ZWQoKSlcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXhJbkl0ZW1zID0gaXRlbXNXaXRob3V0RGlzYWJsZWQuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pbmRleCgpID09PSBjdXJyZW50SXRlbS5pbmRleCgpKTtcclxuXHJcbiAgICBsZXQgbmV4dEl0ZW1JbmRleCA9IGN1cnJlbnRJbmRleEluSXRlbXMgKyBvZmZzZXQ7XHJcbiAgICBpZiAobmV4dEl0ZW1JbmRleCA+PSBpdGVtc1dpdGhvdXREaXNhYmxlZC5sZW5ndGgpIHtcclxuICAgICAgbmV4dEl0ZW1JbmRleCAtPSBpdGVtc1dpdGhvdXREaXNhYmxlZC5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBpZiAobmV4dEl0ZW1JbmRleCA8IDApIHtcclxuICAgICAgbmV4dEl0ZW1JbmRleCArPSBpdGVtc1dpdGhvdXREaXNhYmxlZC5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSBpdGVtc1dpdGhvdXREaXNhYmxlZFtuZXh0SXRlbUluZGV4XTtcclxuXHJcbiAgICBpZiAoaGFzU2hpZnQpIHtcclxuICAgICAgaWYgKGl0ZW1Ub0hpZ2hsaWdodC5oaWdobGlnaHRlZCgpKSB7XHJcbiAgICAgICAgdGhpcy51bmhpZ2hsaWdodEl0ZW0obmV4dEl0ZW1JbmRleCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SXRlbShuZXh0SXRlbUluZGV4KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFNpbmdsZUl0ZW0obmV4dEl0ZW1JbmRleCk7XHJcbiAgfVxyXG5cclxuICAvLyEgc29ydGluZ1xyXG4gIHByaXZhdGUgX2N1cnJlbnRTb3J0Q29sdW1uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jdXJyZW50U29ydFR5cGU6IFNvcnRUeXBlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHRvZ2dsZUN1cnJlbnRTb3J0Q29sdW1uKGNvbHVtbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICBpZiAodGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcpIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5EZXNjZW5kaW5nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkFzY2VuZGluZztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9nZW5lcmF0ZVNvcnRlZFJvd3ModHJ1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID0gY29sdW1uO1xyXG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuQXNjZW5kaW5nO1xyXG4gICAgdGhpcy5fZ2VuZXJhdGVTb3J0ZWRSb3dzKCk7XHJcbiAgfVxyXG4gIHJlc2V0U29ydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID0gbnVsbDtcclxuICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IG51bGw7XHJcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXMoKV0pO1xyXG4gIH1cclxuICBnZXRDb2x1bW5Tb3J0VHlwZShjb2x1bW46IG51bWJlcik6IFNvcnRUeXBlIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNvcnRUeXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2dlbmVyYXRlU29ydGVkUm93cyhqdXN0UmV2ZXJzZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChqdXN0UmV2ZXJzZSkge1xyXG4gICAgICB0aGlzLl9zb3J0ZWRJdGVtcy51cGRhdGUodiA9PiBbLi4udi5yZXZlcnNlKCldKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydENvbHVtbkluZGV4ID0gdGhpcy5fY3VycmVudFNvcnRDb2x1bW47XHJcbiAgICBpZiAoaXNOdWxsKHNvcnRDb2x1bW5JbmRleCkgfHwgIXRoaXMuX2N1cnJlbnRTb3J0VHlwZSkge1xyXG4gICAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQodGhpcy5pdGVtcygpKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydENvbHVtbiA9IHRoaXMuX2RhdGFDb2x1bW5zKClbc29ydENvbHVtbkluZGV4XTtcclxuICAgIGlmICghc29ydENvbHVtbikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEFSRC1JUzUwNTk6IEVuY291bnRlcmVkIGFuIGlzc3VlIGluIDxhcmQtdGFibGU+OiBjb3VsZCBub3QgZmluZCB0aGUgY29sdW1uIHdpdGggaW5kZXggJHtzb3J0Q29sdW1uSW5kZXh9LiBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIEFyZGl1bSBVSSBidWcsIHBsZWFzZSByZXBvcnQgaXQgdG8gdGhlIGNyZWF0b3JzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLl9jdXJyZW50U29ydFR5cGUgPT09IFNvcnRUeXBlLkFzY2VuZGluZyA/IDEgOiAtMTtcclxuICAgIGNvbnN0IHNvcnRGbiA9XHJcbiAgICAgIHNvcnRDb2x1bW4uc29ydEZuID8/XHJcbiAgICAgICgoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIGRpcmVjdGlvbjtcclxuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zKCldLnNvcnQoKGEsIGIpID0+IHNvcnRGbihhLmRhdGEoKVtzb3J0Q29sdW1uSW5kZXhdLCBiLmRhdGEoKVtzb3J0Q29sdW1uSW5kZXhdKSkpO1xyXG4gIH1cclxufVxyXG4iXX0=