@coreui/angular-pro 4.5.28 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/README.md +2 -2
  2. package/esm2022/lib/accordion/accordion/accordion.component.mjs +5 -5
  3. package/esm2022/lib/accordion/accordion-button/accordion-button.directive.mjs +4 -4
  4. package/esm2022/lib/accordion/accordion-item/accordion-item.component.mjs +5 -5
  5. package/esm2022/lib/accordion/accordion.module.mjs +5 -5
  6. package/esm2022/lib/accordion/accordion.service.mjs +5 -5
  7. package/esm2022/lib/alert/alert-heading.directive.mjs +5 -5
  8. package/esm2022/lib/alert/alert-link.directive.mjs +5 -5
  9. package/esm2022/lib/alert/alert.component.mjs +4 -4
  10. package/esm2022/lib/alert/alert.module.mjs +5 -5
  11. package/esm2022/lib/avatar/avatar.component.mjs +5 -5
  12. package/esm2022/lib/avatar/avatar.module.mjs +5 -5
  13. package/esm2022/lib/backdrop/backdrop.service.mjs +6 -6
  14. package/esm2022/lib/badge/badge.component.mjs +5 -5
  15. package/esm2022/lib/badge/badge.module.mjs +5 -5
  16. package/esm2022/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +5 -5
  17. package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +4 -4
  18. package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +5 -5
  19. package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +5 -5
  20. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +5 -5
  21. package/esm2022/lib/button/button-close.directive.mjs +4 -4
  22. package/esm2022/lib/button/button.directive.mjs +4 -4
  23. package/esm2022/lib/button/button.module.mjs +5 -5
  24. package/esm2022/lib/button-group/button-group/button-group.component.mjs +5 -5
  25. package/esm2022/lib/button-group/button-group.module.mjs +5 -5
  26. package/esm2022/lib/button-group/button-toolbar/button-toolbar.component.mjs +5 -5
  27. package/esm2022/lib/calendar/calendar/calendar-class-view.pipe.mjs +4 -4
  28. package/esm2022/lib/calendar/calendar/calendar.component.mjs +5 -5
  29. package/esm2022/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +4 -4
  30. package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +4 -4
  31. package/esm2022/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +4 -4
  32. package/esm2022/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +4 -4
  33. package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +5 -5
  34. package/esm2022/lib/calendar/calendar-month/calendar-day.pipe.mjs +4 -4
  35. package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +5 -5
  36. package/esm2022/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +4 -4
  37. package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +5 -5
  38. package/esm2022/lib/calendar/calendar.module.mjs +5 -5
  39. package/esm2022/lib/calendar/calendar.service.mjs +5 -5
  40. package/esm2022/lib/callout/callout.component.mjs +5 -5
  41. package/esm2022/lib/callout/callout.module.mjs +5 -5
  42. package/esm2022/lib/card/card-body.component.mjs +4 -4
  43. package/esm2022/lib/card/card-footer.component.mjs +4 -4
  44. package/esm2022/lib/card/card-group.component.mjs +4 -4
  45. package/esm2022/lib/card/card-header-actions.component.mjs +4 -4
  46. package/esm2022/lib/card/card-header.component.mjs +4 -4
  47. package/esm2022/lib/card/card-img-overlay/card-img-overlay.component.mjs +4 -4
  48. package/esm2022/lib/card/card-img.directive.mjs +4 -4
  49. package/esm2022/lib/card/card-link.directive.mjs +4 -4
  50. package/esm2022/lib/card/card-subtitle.directive.mjs +4 -4
  51. package/esm2022/lib/card/card-text.directive.mjs +4 -4
  52. package/esm2022/lib/card/card-title.directive.mjs +4 -4
  53. package/esm2022/lib/card/card.component.mjs +5 -5
  54. package/esm2022/lib/card/card.module.mjs +5 -5
  55. package/esm2022/lib/carousel/carousel/carousel.component.mjs +6 -6
  56. package/esm2022/lib/carousel/carousel-caption/carousel-caption.component.mjs +5 -5
  57. package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +5 -5
  58. package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +5 -5
  59. package/esm2022/lib/carousel/carousel-inner/carousel-inner.component.mjs +5 -5
  60. package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +5 -5
  61. package/esm2022/lib/carousel/carousel-state.mjs +5 -5
  62. package/esm2022/lib/carousel/carousel.config.mjs +4 -4
  63. package/esm2022/lib/carousel/carousel.module.mjs +5 -5
  64. package/esm2022/lib/carousel/carousel.service.mjs +5 -5
  65. package/esm2022/lib/collapse/collapse.directive.mjs +5 -5
  66. package/esm2022/lib/collapse/collapse.module.mjs +5 -5
  67. package/esm2022/lib/date-picker/date-picker.component.mjs +5 -5
  68. package/esm2022/lib/date-picker/date-picker.module.mjs +5 -5
  69. package/esm2022/lib/date-range-picker/date-range-picker/custom-range-key.pipe.mjs +4 -4
  70. package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +5 -5
  71. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
  72. package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +11 -11
  73. package/esm2022/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +6 -6
  74. package/esm2022/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +4 -4
  75. package/esm2022/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +4 -4
  76. package/esm2022/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +4 -4
  77. package/esm2022/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +6 -6
  78. package/esm2022/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +5 -5
  79. package/esm2022/lib/dropdown/dropdown.module.mjs +5 -5
  80. package/esm2022/lib/dropdown/dropdown.service.mjs +5 -5
  81. package/esm2022/lib/element-cover/element-cover.component.mjs +5 -5
  82. package/esm2022/lib/element-cover/element-cover.module.mjs +5 -5
  83. package/esm2022/lib/footer/footer.component.mjs +4 -4
  84. package/esm2022/lib/footer/footer.module.mjs +5 -5
  85. package/esm2022/lib/form/form/form.directive.mjs +4 -4
  86. package/esm2022/lib/form/form-check/form-check-input.directive.mjs +5 -5
  87. package/esm2022/lib/form/form-check/form-check-label.directive.mjs +4 -4
  88. package/esm2022/lib/form/form-check/form-check.component.mjs +4 -4
  89. package/esm2022/lib/form/form-control/form-control.directive.mjs +5 -5
  90. package/esm2022/lib/form/form-feedback/form-feedback.component.mjs +4 -4
  91. package/esm2022/lib/form/form-floating/form-floating.directive.mjs +4 -4
  92. package/esm2022/lib/form/form-label/form-label.directive.mjs +5 -5
  93. package/esm2022/lib/form/form-select/form-select.directive.mjs +5 -5
  94. package/esm2022/lib/form/form-text/form-text.directive.mjs +4 -4
  95. package/esm2022/lib/form/form.module.mjs +5 -5
  96. package/esm2022/lib/form/input-group/input-group.component.mjs +5 -5
  97. package/esm2022/lib/form/input-group-text/input-group-text.directive.mjs +5 -5
  98. package/esm2022/lib/grid/col.component.mjs +4 -4
  99. package/esm2022/lib/grid/col.directive.mjs +4 -4
  100. package/esm2022/lib/grid/container.component.mjs +4 -4
  101. package/esm2022/lib/grid/grid.module.mjs +5 -5
  102. package/esm2022/lib/grid/gutter.directive.mjs +5 -5
  103. package/esm2022/lib/grid/row.component.mjs +4 -4
  104. package/esm2022/lib/grid/row.directive.mjs +4 -4
  105. package/esm2022/lib/header/header/header.component.mjs +4 -4
  106. package/esm2022/lib/header/header-brand/header-brand.component.mjs +4 -4
  107. package/esm2022/lib/header/header-divider/header-divider.component.mjs +4 -4
  108. package/esm2022/lib/header/header-nav/header-nav.component.mjs +4 -4
  109. package/esm2022/lib/header/header-text/header-text.component.mjs +4 -4
  110. package/esm2022/lib/header/header-toggler/header-toggler.directive.mjs +5 -5
  111. package/esm2022/lib/header/header.module.mjs +5 -5
  112. package/esm2022/lib/image/img.directive.mjs +4 -4
  113. package/esm2022/lib/image/img.module.mjs +5 -5
  114. package/esm2022/lib/list-group/list-group-item.directive.mjs +5 -5
  115. package/esm2022/lib/list-group/list-group.directive.mjs +4 -4
  116. package/esm2022/lib/list-group/list-group.module.mjs +5 -5
  117. package/esm2022/lib/loading-button/loading-button.component.mjs +5 -5
  118. package/esm2022/lib/loading-button/loading-button.module.mjs +5 -5
  119. package/esm2022/lib/modal/modal/modal.component.mjs +6 -6
  120. package/esm2022/lib/modal/modal-body/modal-body.component.mjs +4 -4
  121. package/esm2022/lib/modal/modal-content/modal-content.component.mjs +4 -4
  122. package/esm2022/lib/modal/modal-dialog/modal-dialog.component.mjs +4 -4
  123. package/esm2022/lib/modal/modal-dismiss/modal-toggle.directive.mjs +5 -5
  124. package/esm2022/lib/modal/modal-footer/modal-footer.component.mjs +4 -4
  125. package/esm2022/lib/modal/modal-header/modal-header.component.mjs +4 -4
  126. package/esm2022/lib/modal/modal-title/modal-title.directive.mjs +4 -4
  127. package/esm2022/lib/modal/modal.module.mjs +5 -5
  128. package/esm2022/lib/modal/modal.service.mjs +5 -5
  129. package/esm2022/lib/multi-select/multi-select/multi-select-search.directive.mjs +5 -5
  130. package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +5 -5
  131. package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +5 -5
  132. package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +5 -5
  133. package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +5 -5
  134. package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +5 -5
  135. package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +5 -5
  136. package/esm2022/lib/multi-select/multi-select.module.mjs +5 -5
  137. package/esm2022/lib/multi-select/multi-select.service.mjs +4 -4
  138. package/esm2022/lib/nav/nav-item.component.mjs +4 -4
  139. package/esm2022/lib/nav/nav-link.directive.mjs +4 -4
  140. package/esm2022/lib/nav/nav.component.mjs +4 -4
  141. package/esm2022/lib/nav/nav.module.mjs +5 -5
  142. package/esm2022/lib/navbar/navbar-brand/navbar-brand.directive.mjs +4 -4
  143. package/esm2022/lib/navbar/navbar-nav/navbar-nav.component.mjs +4 -4
  144. package/esm2022/lib/navbar/navbar-text/navbar-text.component.mjs +4 -4
  145. package/esm2022/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +5 -5
  146. package/esm2022/lib/navbar/navbar.component.mjs +5 -5
  147. package/esm2022/lib/navbar/navbar.module.mjs +5 -5
  148. package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +6 -6
  149. package/esm2022/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +4 -4
  150. package/esm2022/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +4 -4
  151. package/esm2022/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +4 -4
  152. package/esm2022/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +5 -5
  153. package/esm2022/lib/offcanvas/offcanvas.module.mjs +5 -5
  154. package/esm2022/lib/offcanvas/offcanvas.service.mjs +5 -5
  155. package/esm2022/lib/pagination/page-item/page-item.component.mjs +4 -4
  156. package/esm2022/lib/pagination/page-item/page-item.directive.mjs +5 -5
  157. package/esm2022/lib/pagination/page-link/page-link.directive.mjs +4 -4
  158. package/esm2022/lib/pagination/pagination/pagination.component.mjs +4 -4
  159. package/esm2022/lib/pagination/pagination.module.mjs +5 -5
  160. package/esm2022/lib/placeholder/placeholder-animation.directive.mjs +5 -8
  161. package/esm2022/lib/placeholder/placeholder.directive.mjs +5 -5
  162. package/esm2022/lib/placeholder/placeholder.module.mjs +5 -5
  163. package/esm2022/lib/popover/popover/popover.component.mjs +5 -5
  164. package/esm2022/lib/popover/popover.directive.mjs +6 -6
  165. package/esm2022/lib/popover/popover.module.mjs +5 -5
  166. package/esm2022/lib/progress/progress-bar.component.mjs +5 -5
  167. package/esm2022/lib/progress/progress.component.mjs +4 -4
  168. package/esm2022/lib/progress/progress.module.mjs +5 -5
  169. package/esm2022/lib/services/class-toggle.service.mjs +6 -6
  170. package/esm2022/lib/services/intersection.service.mjs +5 -5
  171. package/esm2022/lib/services/listeners.service.mjs +5 -5
  172. package/esm2022/lib/shared/html-attr.directive.mjs +5 -5
  173. package/esm2022/lib/shared/shared.module.mjs +5 -5
  174. package/esm2022/lib/shared/template-id.directive.mjs +5 -5
  175. package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +6 -6
  176. package/esm2022/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +6 -6
  177. package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
  178. package/esm2022/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +5 -5
  179. package/esm2022/lib/sidebar/sidebar-header/sidebar-header.component.mjs +4 -4
  180. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +4 -4
  181. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +4 -4
  182. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +5 -5
  183. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +4 -4
  184. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +5 -5
  185. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +5 -5
  186. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +9 -9
  187. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +4 -4
  188. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +5 -5
  189. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +10 -10
  190. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +7 -7
  191. package/esm2022/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +5 -5
  192. package/esm2022/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +4 -4
  193. package/esm2022/lib/sidebar/sidebar.module.mjs +5 -5
  194. package/esm2022/lib/sidebar/sidebar.service.mjs +5 -5
  195. package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +5 -5
  196. package/esm2022/lib/smart-pagination/smart-pagination.module.mjs +5 -5
  197. package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +5 -5
  198. package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +5 -5
  199. package/esm2022/lib/smart-table/smart-table-filter/filter-input.directive.mjs +5 -5
  200. package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +5 -5
  201. package/esm2022/lib/smart-table/smart-table-head/smart-table-column-label.pipe.mjs +4 -4
  202. package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +5 -5
  203. package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +5 -5
  204. package/esm2022/lib/smart-table/smart-table.module.mjs +5 -5
  205. package/esm2022/lib/spinner/spinner.component.mjs +4 -4
  206. package/esm2022/lib/spinner/spinner.module.mjs +5 -5
  207. package/esm2022/lib/table/table-active.directive.mjs +4 -4
  208. package/esm2022/lib/table/table-color.directive.mjs +4 -4
  209. package/esm2022/lib/table/table.directive.mjs +5 -5
  210. package/esm2022/lib/table/table.module.mjs +5 -5
  211. package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +5 -5
  212. package/esm2022/lib/tabs/tab-content-ref.directive.mjs +5 -5
  213. package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +5 -5
  214. package/esm2022/lib/tabs/tab.service.mjs +5 -5
  215. package/esm2022/lib/tabs/tabs.module.mjs +5 -5
  216. package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +9 -9
  217. package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +9 -9
  218. package/esm2022/lib/time-picker/time-picker.component.mjs +5 -5
  219. package/esm2022/lib/time-picker/time-picker.module.mjs +5 -5
  220. package/esm2022/lib/toast/toast/toast.component.mjs +5 -5
  221. package/esm2022/lib/toast/toast-body/toast-body.component.mjs +6 -6
  222. package/esm2022/lib/toast/toast-close.directive.mjs +5 -5
  223. package/esm2022/lib/toast/toast-header/toast-header.component.mjs +6 -6
  224. package/esm2022/lib/toast/toast.module.mjs +5 -5
  225. package/esm2022/lib/toast/toaster/toaster-host.directive.mjs +5 -5
  226. package/esm2022/lib/toast/toaster/toaster.component.mjs +5 -5
  227. package/esm2022/lib/toast/toaster/toaster.service.mjs +5 -5
  228. package/esm2022/lib/tooltip/tooltip/tooltip.component.mjs +5 -5
  229. package/esm2022/lib/tooltip/tooltip.directive.mjs +6 -6
  230. package/esm2022/lib/tooltip/tooltip.module.mjs +5 -5
  231. package/esm2022/lib/utilities/align.directive.mjs +4 -4
  232. package/esm2022/lib/utilities/bg-color.directive.mjs +5 -5
  233. package/esm2022/lib/utilities/border.directive.mjs +4 -4
  234. package/esm2022/lib/utilities/rounded.directive.mjs +4 -4
  235. package/esm2022/lib/utilities/text-color.directive.mjs +5 -5
  236. package/esm2022/lib/utilities/utilities.module.mjs +5 -5
  237. package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +4 -4
  238. package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +5 -5
  239. package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +5 -5
  240. package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +5 -5
  241. package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +5 -5
  242. package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +4 -4
  243. package/esm2022/lib/widget/widget.module.mjs +5 -5
  244. package/fesm2022/coreui-angular-pro.mjs +927 -930
  245. package/fesm2022/coreui-angular-pro.mjs.map +1 -1
  246. package/lib/smart-table/smart-table/smart-table.component.d.ts +1 -1
  247. package/package.json +9 -9
@@ -1045,15 +1045,15 @@ export class MultiSelectComponent {
1045
1045
  }
1046
1046
  this.activeOption = this.focusKeyManager?.activeItem ?? null;
1047
1047
  }
1048
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i1.FocusMonitor }, { token: i2.MultiSelectService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component }); }
1049
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiSelectComponent, isStandalone: true, selector: "c-multi-select", inputs: { allowCreateOptions: "allowCreateOptions", cleaner: "cleaner", clearSearchOnSelect: "clearSearchOnSelect", disabled: "disabled", loading: "loading", multiple: "multiple", nativeFormId: "nativeFormId", nativeId: "nativeId", nativeName: "nativeName", options: "options", optionsMaxHeight: "optionsMaxHeight", optionsStyle: "optionsStyle", placeholder: "placeholder", search: "search", searchNoResultsLabel: "searchNoResultsLabel", searchValue: "searchValue", selectAll: "selectAll", selectAllLabel: "selectAllLabel", selectionType: "selectionType", selectionTypeCounterText: "selectionTypeCounterText", selectionTypeCounterTextPluralMap: "selectionTypeCounterTextPluralMap", size: "size", value: "value", valid: "valid", virtualScroller: "virtualScroller", visibleItems: "visibleItems", itemSize: "itemSize", itemMinWidth: "itemMinWidth", visible: "visible", popperjsOptions: ["popperOptions", "popperjsOptions"] }, outputs: { searchValueChange: "searchValueChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { listeners: { "keyup": "onKeyUp($event)", "keydown": "onKeyDown($event)", "click": "onClick($event)" }, properties: { "class": "this.hostClasses", "attr.aria-multiselectable": "this.ariaMultiSelectable", "attr.aria-expanded": "this.ariaExpanded", "attr.tabindex": "this.tabIndex" } }, providers: [
1048
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i1.FocusMonitor }, { token: i2.MultiSelectService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component }); }
1049
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: MultiSelectComponent, isStandalone: true, selector: "c-multi-select", inputs: { allowCreateOptions: "allowCreateOptions", cleaner: "cleaner", clearSearchOnSelect: "clearSearchOnSelect", disabled: "disabled", loading: "loading", multiple: "multiple", nativeFormId: "nativeFormId", nativeId: "nativeId", nativeName: "nativeName", options: "options", optionsMaxHeight: "optionsMaxHeight", optionsStyle: "optionsStyle", placeholder: "placeholder", search: "search", searchNoResultsLabel: "searchNoResultsLabel", searchValue: "searchValue", selectAll: "selectAll", selectAllLabel: "selectAllLabel", selectionType: "selectionType", selectionTypeCounterText: "selectionTypeCounterText", selectionTypeCounterTextPluralMap: "selectionTypeCounterTextPluralMap", size: "size", value: "value", valid: "valid", virtualScroller: "virtualScroller", visibleItems: "visibleItems", itemSize: "itemSize", itemMinWidth: "itemMinWidth", visible: "visible", popperjsOptions: ["popperOptions", "popperjsOptions"] }, outputs: { searchValueChange: "searchValueChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { listeners: { "keyup": "onKeyUp($event)", "keydown": "onKeyDown($event)", "click": "onClick($event)" }, properties: { "class": "this.hostClasses", "attr.aria-multiselectable": "this.ariaMultiSelectable", "attr.aria-expanded": "this.ariaExpanded", "attr.tabindex": "this.tabIndex" } }, providers: [
1050
1050
  MultiSelectService,
1051
1051
  {
1052
1052
  provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MultiSelectComponent), multi: true
1053
1053
  }
1054
1054
  ], queries: [{ propertyName: "multiSelectOptionsContent", predicate: MultiSelectOptionComponent, descendants: true }, { propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "optionsElementRef", first: true, predicate: ["options"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }, { propertyName: "dropdownMenu", first: true, predicate: ["dropdownMenu"], descendants: true }, { propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }, { propertyName: "dropdownToggle", first: true, predicate: DropdownToggleDirective, descendants: true, read: ElementRef }, { propertyName: "multiSelectOptionsView", predicate: MultiSelectOptionComponent, descendants: true }, { propertyName: "scrollViewportView", predicate: ["scrollViewport"], descendants: true }], exportAs: ["cMultiSelect"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [ngClass]=\"multiselectClasses\"\n [popperOptions]=\"popperjsOptions\"\n class=\"picker\">\n <div #dropdownToggle=\"cDropdownToggle\" [caret]=\"false\" [disabled]=\"disabled\" cDropdownToggle>\n <div class=\"form-multi-select-selection\">\n <ng-template [ngIf]=\"selectionType === 'tags'\">\n <ng-container *ngIf=\"(optionsSelected$ | async) as optionTags\">\n <c-multi-select-tag\n (remove)=\"handleTagRemove($event)\"\n *ngFor=\"let option of optionTags; index as i\"\n [disabled]=\"option.disabled ?? false\"\n [label]=\"option.label ?? option.value\"\n [option]=\"option\"\n [value]=\"option.value\"\n class=\"form-multi-select-tag\"\n tabindex=\"-1\">\n </c-multi-select-tag>\n </ng-container>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'text' && !!selectedOptionsText\">\n <span class=\"form-multi-select-search\">{{ selectedOptionsText }}</span>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'counter'\">\n <span *ngIf=\"counterTextType === 'string'; else pluralMap\">{{ counterText }}</span>\n <ng-template #pluralMap>\n <span>{{selectedOptions.length}} {{ selectedOptions.length | i18nPlural: (selectionTypeCounterTextPluralMap ?? { other: selectionTypeCounterText ?? '+' }) }}</span>\n </ng-template>\n </ng-template>\n <!-- <ng-template [ngIf]=\"!search && selectedOptions.length === 0 && selectionType !== 'counter'\">-->\n <!-- <span class=\"form-multi-select-search\">{{ placeholder }}</span>-->\n <!-- </ng-template>-->\n </div>\n\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n (valueChange)=\"handleSearchValueChange($event)\"\n [attr.placeholder]=\"optionsSelected.size === 0 && selectionType !== 'counter' ? placeholder : null\"\n [disabled]=\"disabled || !search\"\n [ngClass]=\"{ 'form-multi-select-search': true, disabled: (disabled || !search) }\"\n [ngModel]=\"searchValue\"\n [value]=\"searchValue\"\n autocomplete=\"off\"\n cMultiSelectSearch\n size=\"3\"\n tabindex=\"{{ disabled ? -1 : 0 }}\"\n type=\"text\"\n >\n\n <button\n (click)=\"clearAllOptions($event)\"\n *ngIf=\"cleaner && optionsSelected.size > 0 && !disabled\"\n [disabled]=\"disabled || !isDropdownVisible\"\n aria-label=\"Clear all\"\n class=\"form-multi-select-selection-cleaner\"\n type=\"button\"\n ></button>\n </div>\n <div #dropdownMenu=\"cDropdownMenu\" *ngIf=\"!disabled\" [visible]=\"dropdown.visible\" cDropdownMenu>\n <ng-template [ngIf]=\"(visibleOptions() && options.length > 0)\">\n <button\n (click)=\"selectAllOptions()\"\n *ngIf=\"selectAll && multiple && !virtualScroller\"\n class=\"form-multi-select-all\"\n type=\"button\"\n tabindex=\"0\"\n >\n {{ selectAllLabel }}\n </button>\n </ng-template>\n <ng-template [ngIfElse]=\"optionsEmpty\" [ngIf]=\"(visibleOptions() && options.length > 0) || isLoading()\">\n <ng-container *ngTemplateOutlet=\"virtualScroller ? multiselectVirtualScroller : multiselectOptionsDiv\" />\n </ng-template>\n <ng-template #optionsEmpty>\n <div class=\"form-multi-select-options-empty\">{{ searchNoResultsLabel }}</div>\n </ng-template>\n <ng-template [ngIf]=\"isLoading()\">\n <c-element-cover [ngStyle]=\"{'border-radius': '6px', 'z-index': 2}\" />\n </ng-template>\n </div>\n</c-dropdown>\n\n<ng-template #multiselectVirtualScroller>\n <cdk-virtual-scroll-viewport\n #scrollViewport\n (scrolledIndexChange)=\"handleScrolledIndexChange($event, scrollViewport)\"\n *ngIf=\"(optionsArray$ | async) as optionsArray\"\n [itemSize]=\"itemSize\"\n [ngStyle]=\"optionsMaxHeight !== 'auto' ? { 'height.px': optionsMaxHeight, 'maxHeight.px': optionsMaxHeight, 'minWidth.px': itemMinWidth ?? 196, overflowX: 'hidden' } : { 'minWidth.px': itemMinWidth ?? 196, overflowX: 'hidden'}\"\n maxBufferPx=\"{{itemSize * visibleItems}}\"\n minBufferPx=\"{{itemSize * visibleItems}}\"\n class=\"form-multi-select-options\"\n tabindex=\"-1\"\n >\n <ng-container\n #cdkVirtualFor\n *cdkVirtualFor=\"let option of optionsArray; trackBy: trackByFn; templateCacheSize: 0; even as even; odd as odd; index as index; count as count; first as first; last as last;\"\n [ngTemplateOutletContext]=\"{$implicit: option, even, odd, index, count, first, last}\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n />\n </cdk-virtual-scroll-viewport>\n\n</ng-template>\n\n<ng-template #multiselectOptionsDiv>\n <div\n [ngStyle]=\"optionsMaxHeight !== 'auto' ? { 'maxHeight.px': optionsMaxHeight, overflowY: 'scroll' } : {}\"\n [class]=\"{'form-multi-select-options': visibleOptions()}\"\n >\n <ng-content />\n <ng-container [ngTemplateOutlet]=\"userOptionsTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #defaultMultiSelectOptionTemplate let-option>\n <c-multi-select-option\n [disabled]=\"option.disabled\"\n [label]=\"option.label\"\n [text]=\"option.text\"\n [value]=\"option.value\"\n [visible]=\"option.visible\"\n >\n {{option.text}}\n </c-multi-select-option>\n</ng-template>\n\n<ng-template #userOptionsTemplate>\n <ng-container\n *ngFor=\"let option of userOptionsArray$ | async; even as even; odd as odd; index as index; count as count; first as first; last as last;\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: option, even, odd, index, count, first, last}\"\n />\n</ng-template>\n", styles: [":host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{color:var(--cui-form-multi-select-focus-color, rgba(44, 56, 74, .95));background-color:var(--cui-form-multi-select-focus-bg, #fff);border-color:var(--cui-form-multi-select-focus-border-color, #6557e4);box-shadow:0 0 0 .25rem #321fdb40}:host:not(.cdk-focused) .form-multi-select:not(.show) input.form-multi-select-search:not([placeholder]){width:.1rem;margin-inline-start:0}:host .form-multi-select-search[size]{display:inline-block}:host .form-multi-select-selection-tags .form-multi-select-search{height:1.5rem}:host ::ng-deep .cdk-virtual-scroll-content-wrapper{padding:var(--cui-form-multi-select-options-padding-y) var(--cui-form-multi-select-options-padding-x);font-size:1rem;color:var(--cui-form-multi-select-options-color)}:host .cdk-virtual-scroll-viewport{width:var(--cui-dropdown-min-width)}:host .dropdown-menu{--cui-dropdown-padding-y: 0}:host-context(.dark-theme)::ng-deep .form-multi-select-optgroup-label{color:var(--cui-form-multi-select-disabled-color)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPluralPipe, name: "i18nPlural" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MultiSelectTagComponent, selector: "c-multi-select-tag", inputs: ["option", "disabled", "label", "value"], outputs: ["remove"] }, { kind: "component", type: MultiSelectOptionComponent, selector: "c-multi-select-option", inputs: ["optionsStyle", "label", "text", "visible", "disabled", "selected", "value", "active", "role"], outputs: ["selectedChange", "focusChange"], exportAs: ["cMultiSelectOption"] }, { kind: "directive", type: MultiSelectSearchDirective, selector: "[cMultiSelectSearch]", inputs: ["delay", "value"], outputs: ["valueChange"], exportAs: ["cMultiSelectSearch"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "dark", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible", "dark"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }] }); }
1055
1055
  }
1056
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
1056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: MultiSelectComponent, decorators: [{
1057
1057
  type: Component,
1058
1058
  args: [{ selector: 'c-multi-select', exportAs: 'cMultiSelect', providers: [
1059
1059
  MultiSelectService,
@@ -1081,7 +1081,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1081
1081
  DropdownToggleDirective,
1082
1082
  ElementCoverComponent
1083
1083
  ], template: "<c-dropdown #dropdown=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [ngClass]=\"multiselectClasses\"\n [popperOptions]=\"popperjsOptions\"\n class=\"picker\">\n <div #dropdownToggle=\"cDropdownToggle\" [caret]=\"false\" [disabled]=\"disabled\" cDropdownToggle>\n <div class=\"form-multi-select-selection\">\n <ng-template [ngIf]=\"selectionType === 'tags'\">\n <ng-container *ngIf=\"(optionsSelected$ | async) as optionTags\">\n <c-multi-select-tag\n (remove)=\"handleTagRemove($event)\"\n *ngFor=\"let option of optionTags; index as i\"\n [disabled]=\"option.disabled ?? false\"\n [label]=\"option.label ?? option.value\"\n [option]=\"option\"\n [value]=\"option.value\"\n class=\"form-multi-select-tag\"\n tabindex=\"-1\">\n </c-multi-select-tag>\n </ng-container>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'text' && !!selectedOptionsText\">\n <span class=\"form-multi-select-search\">{{ selectedOptionsText }}</span>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'counter'\">\n <span *ngIf=\"counterTextType === 'string'; else pluralMap\">{{ counterText }}</span>\n <ng-template #pluralMap>\n <span>{{selectedOptions.length}} {{ selectedOptions.length | i18nPlural: (selectionTypeCounterTextPluralMap ?? { other: selectionTypeCounterText ?? '+' }) }}</span>\n </ng-template>\n </ng-template>\n <!-- <ng-template [ngIf]=\"!search && selectedOptions.length === 0 && selectionType !== 'counter'\">-->\n <!-- <span class=\"form-multi-select-search\">{{ placeholder }}</span>-->\n <!-- </ng-template>-->\n </div>\n\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n (valueChange)=\"handleSearchValueChange($event)\"\n [attr.placeholder]=\"optionsSelected.size === 0 && selectionType !== 'counter' ? placeholder : null\"\n [disabled]=\"disabled || !search\"\n [ngClass]=\"{ 'form-multi-select-search': true, disabled: (disabled || !search) }\"\n [ngModel]=\"searchValue\"\n [value]=\"searchValue\"\n autocomplete=\"off\"\n cMultiSelectSearch\n size=\"3\"\n tabindex=\"{{ disabled ? -1 : 0 }}\"\n type=\"text\"\n >\n\n <button\n (click)=\"clearAllOptions($event)\"\n *ngIf=\"cleaner && optionsSelected.size > 0 && !disabled\"\n [disabled]=\"disabled || !isDropdownVisible\"\n aria-label=\"Clear all\"\n class=\"form-multi-select-selection-cleaner\"\n type=\"button\"\n ></button>\n </div>\n <div #dropdownMenu=\"cDropdownMenu\" *ngIf=\"!disabled\" [visible]=\"dropdown.visible\" cDropdownMenu>\n <ng-template [ngIf]=\"(visibleOptions() && options.length > 0)\">\n <button\n (click)=\"selectAllOptions()\"\n *ngIf=\"selectAll && multiple && !virtualScroller\"\n class=\"form-multi-select-all\"\n type=\"button\"\n tabindex=\"0\"\n >\n {{ selectAllLabel }}\n </button>\n </ng-template>\n <ng-template [ngIfElse]=\"optionsEmpty\" [ngIf]=\"(visibleOptions() && options.length > 0) || isLoading()\">\n <ng-container *ngTemplateOutlet=\"virtualScroller ? multiselectVirtualScroller : multiselectOptionsDiv\" />\n </ng-template>\n <ng-template #optionsEmpty>\n <div class=\"form-multi-select-options-empty\">{{ searchNoResultsLabel }}</div>\n </ng-template>\n <ng-template [ngIf]=\"isLoading()\">\n <c-element-cover [ngStyle]=\"{'border-radius': '6px', 'z-index': 2}\" />\n </ng-template>\n </div>\n</c-dropdown>\n\n<ng-template #multiselectVirtualScroller>\n <cdk-virtual-scroll-viewport\n #scrollViewport\n (scrolledIndexChange)=\"handleScrolledIndexChange($event, scrollViewport)\"\n *ngIf=\"(optionsArray$ | async) as optionsArray\"\n [itemSize]=\"itemSize\"\n [ngStyle]=\"optionsMaxHeight !== 'auto' ? { 'height.px': optionsMaxHeight, 'maxHeight.px': optionsMaxHeight, 'minWidth.px': itemMinWidth ?? 196, overflowX: 'hidden' } : { 'minWidth.px': itemMinWidth ?? 196, overflowX: 'hidden'}\"\n maxBufferPx=\"{{itemSize * visibleItems}}\"\n minBufferPx=\"{{itemSize * visibleItems}}\"\n class=\"form-multi-select-options\"\n tabindex=\"-1\"\n >\n <ng-container\n #cdkVirtualFor\n *cdkVirtualFor=\"let option of optionsArray; trackBy: trackByFn; templateCacheSize: 0; even as even; odd as odd; index as index; count as count; first as first; last as last;\"\n [ngTemplateOutletContext]=\"{$implicit: option, even, odd, index, count, first, last}\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n />\n </cdk-virtual-scroll-viewport>\n\n</ng-template>\n\n<ng-template #multiselectOptionsDiv>\n <div\n [ngStyle]=\"optionsMaxHeight !== 'auto' ? { 'maxHeight.px': optionsMaxHeight, overflowY: 'scroll' } : {}\"\n [class]=\"{'form-multi-select-options': visibleOptions()}\"\n >\n <ng-content />\n <ng-container [ngTemplateOutlet]=\"userOptionsTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #defaultMultiSelectOptionTemplate let-option>\n <c-multi-select-option\n [disabled]=\"option.disabled\"\n [label]=\"option.label\"\n [text]=\"option.text\"\n [value]=\"option.value\"\n [visible]=\"option.visible\"\n >\n {{option.text}}\n </c-multi-select-option>\n</ng-template>\n\n<ng-template #userOptionsTemplate>\n <ng-container\n *ngFor=\"let option of userOptionsArray$ | async; even as even; odd as odd; index as index; count as count; first as first; last as last;\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: option, even, odd, index, count, first, last}\"\n />\n</ng-template>\n", styles: [":host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{color:var(--cui-form-multi-select-focus-color, rgba(44, 56, 74, .95));background-color:var(--cui-form-multi-select-focus-bg, #fff);border-color:var(--cui-form-multi-select-focus-border-color, #6557e4);box-shadow:0 0 0 .25rem #321fdb40}:host:not(.cdk-focused) .form-multi-select:not(.show) input.form-multi-select-search:not([placeholder]){width:.1rem;margin-inline-start:0}:host .form-multi-select-search[size]{display:inline-block}:host .form-multi-select-selection-tags .form-multi-select-search{height:1.5rem}:host ::ng-deep .cdk-virtual-scroll-content-wrapper{padding:var(--cui-form-multi-select-options-padding-y) var(--cui-form-multi-select-options-padding-x);font-size:1rem;color:var(--cui-form-multi-select-options-color)}:host .cdk-virtual-scroll-viewport{width:var(--cui-dropdown-min-width)}:host .dropdown-menu{--cui-dropdown-padding-y: 0}:host-context(.dark-theme)::ng-deep .form-multi-select-optgroup-label{color:var(--cui-form-multi-select-disabled-color)}\n"] }]
1084
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i1.FocusMonitor }, { type: i2.MultiSelectService }, { type: i0.IterableDiffers }]; }, propDecorators: { allowCreateOptions: [{
1084
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i1.FocusMonitor }, { type: i2.MultiSelectService }, { type: i0.IterableDiffers }], propDecorators: { allowCreateOptions: [{
1085
1085
  type: Input
1086
1086
  }], cleaner: [{
1087
1087
  type: Input
@@ -1197,4 +1197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1197
1197
  type: HostListener,
1198
1198
  args: ['click', ['$event']]
1199
1199
  }] } });
1200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQU9MLE1BQU0sRUFHTixNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBbUIsZUFBZSxFQUE2QixNQUFNLG1CQUFtQixDQUFDO0FBQ2hHLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGVBQWUsRUFBYyxJQUFJLEVBQUUsT0FBTyxFQUFn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UyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDbkMsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIHNpZ25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBJMThuUGx1cmFsUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uLCBGb2N1c0tleU1hbmFnZXIsIEZvY3VzTW9uaXRvciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mLCBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgc2tpcCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0V2l0aCwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2RpZmllciwgTW9kaWZpZXJBcmd1bWVudHMsIE9wdGlvbnMgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbmltcG9ydCB7XG4gIERyb3Bkb3duQ29tcG9uZW50LFxuICBEcm9wZG93bkRpdmlkZXJEaXJlY3RpdmUsXG4gIERyb3Bkb3duTWVudURpcmVjdGl2ZSxcbiAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmVcbn0gZnJvbSAnLi4vLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgRWxlbWVudENvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudC1jb3Zlcic7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IElNdWx0aVNlbGVjdCwgSU9wdGlvbiwgT3B0aW9uc01hcCwgU2VhcmNoRm4gfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QudHlwZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlcnZpY2UgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL211bHRpLXNlbGVjdC1vcHRpb24vbXVsdGktc2VsZWN0LW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3ROYXRpdmVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QtbmF0aXZlLXNlbGVjdC9tdWx0aS1zZWxlY3QtbmF0aXZlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RUYWdDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QtdGFnL211bHRpLXNlbGVjdC10YWcuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aS1zZWxlY3Qtc2VhcmNoLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBJUGx1cmFsTWFwIHtcbiAgW2s6IHN0cmluZ106IHN0cmluZztcbn1cblxuLy8gQHRzLWlnbm9yZVxuZXhwb3J0IGNvbnN0IG9ic2VydmVSZWZlcmVuY2VNb2RpZmllcjogTW9kaWZpZXI8c3RyaW5nLCBhbnk+ID0ge1xuICBuYW1lOiAnb2JzZXJ2ZVJlZmVyZW5jZU1vZGlmaWVyJywgZW5hYmxlZDogdHJ1ZSwgcGhhc2U6ICdtYWluJywgZm4oeyBzdGF0ZSB9KSB7fSxcblxuICBlZmZlY3Q6ICh7IHN0YXRlLCBpbnN0YW5jZSB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikgPT4ge1xuICAgIGNvbnN0IFJPX1BST1AgPSAnX19wb3BwZXJqc1JPX18nO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBzdGF0ZS5lbGVtZW50cztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZWZlcmVuY2VbUk9fUFJPUF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlZmVyZW5jZVtST19QUk9QXS5vYnNlcnZlKHJlZmVyZW5jZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJlZmVyZW5jZVtST19QUk9QXS5kaXNjb25uZWN0KCk7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgcmVmZXJlbmNlW1JPX1BST1BdO1xuICAgIH07XG4gIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NNdWx0aVNlbGVjdCcsXG4gIHByb3ZpZGVyczogW1xuICAgIE11bHRpU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlTZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBJMThuUGx1cmFsUGlwZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgQ2RrVmlydHVhbEZvck9mLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE11bHRpU2VsZWN0VGFnQ29tcG9uZW50LFxuICAgIE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgIE11bHRpU2VsZWN0U2VhcmNoRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgIERyb3Bkb3duRGl2aWRlckRpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRWxlbWVudENvdmVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBJTXVsdGlTZWxlY3QsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBtdWx0aVNlbGVjdFNlcnZpY2U6IE11bHRpU2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLiN2YWx1ZSkuY3JlYXRlKCk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5vcHRpb25zQXJyYXkkID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuZ2V0T3B0aW9uc0FycmF5KCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaWZmZXIhOiBJdGVyYWJsZURpZmZlcjxhbnk+O1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hbGxvd0NyZWF0ZU9wdGlvbnM6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NsZWFyU2VhcmNoT25TZWxlY3Q6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9tdWx0aXBsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbFNjcm9sbGVyOiBCb29sZWFuSW5wdXQ7XG5cbiAgcmVhZG9ubHkgI2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgI29wdGlvbnNSZWFkeSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBvcHRpb25zQXJyYXkkITogT2JzZXJ2YWJsZTxJT3B0aW9uW10+O1xuICByZWFkb25seSB1c2VyT3B0aW9uc0FycmF5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5ICNvcHRpb25zOiBPcHRpb25zTWFwPHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IG9wdGlvbnNTZWxlY3RlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElPcHRpb25bXT4oW10pO1xuICByZWFkb25seSBvcHRpb25zU2VsZWN0ZWQ6IE1hcDxhbnksIElPcHRpb24+ID0gbmV3IE1hcCgpO1xuICByZWFkb25seSB2YWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gICNvcHRpb25zQ29udGVudDogYW55W10gPSBbXTtcblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogKHN0cmluZyB8IHN0cmluZ1tdKSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFt2YWx1ZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBBcnJheSgwKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXJzIHRvIGNyZWF0ZSBvcHRpb25zIGlmIHRoZXkgYXJlIG5vdCBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzaW5jZSA0LjUuMTFcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBhbGxvd0NyZWF0ZU9wdGlvbnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNhbGxvd0NyZWF0ZU9wdGlvbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGFsbG93Q3JlYXRlT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jYWxsb3dDcmVhdGVPcHRpb25zO1xuICB9XG5cbiAgI2FsbG93Q3JlYXRlT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdGlvbiBjbGVhbmVyIGVsZW1lbnRcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBjbGVhbmVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ2xlYXIgY3VycmVudCBzZWFyY2ggb24gc2VsZWN0aW5nIGFuIGl0ZW1cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjExXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgY2xlYXJTZWFyY2hPblNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI2NsZWFyU2VhcmNoT25TZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNsZWFyU2VhcmNoT25TZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2NsZWFyU2VhcmNoT25TZWxlY3Q7XG4gIH1cblxuICAjY2xlYXJTZWFyY2hPblNlbGVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBtdWx0aS1zZWxlY3QgY29tcG9uZW50XG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZCBsb2FkaW5nIHNwaW5uZXIgYW5kIHJlZHVjZWQgb3BhY2l0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSkpO1xuICB9XG5cbiAgaXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoYXQgbXVsdGlwbGUgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgYXQgb25jZVxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5fbXVsdGlwbGUpO1xuICB9XG5cbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBuYXRpdmUgc2VsZWN0IGZvcm1cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVGb3JtSWQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbmF0aXZlIHNlbGVjdCBpZFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIG5hdGl2ZUlkOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgbmFtZVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIG5hdGl2ZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wdGlvbiBlbGVtZW50c1xuICAgKiBAdHlwZSBJT3B0aW9uW11cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IElPcHRpb25bXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmNsZWFyKCk7XG4gICAgICB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy4jb3B0aW9ucy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBtYXhIZWlnaHQgb2Ygb3B0aW9ucyBsaXN0IGluIHB4XG4gICAqIEB0eXBlIHN0cmluZyB8IG51bWJlclxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnNNYXhIZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9ICdhdXRvJztcblxuICAvKipcbiAgICogU2V0cyBvcHRpb24gc3R5bGVcbiAgICogQHR5cGUgJ2NoZWNrYm94JyB8ICd0ZXh0J1xuICAgKiBAZGVmYXVsdCAnY2hlY2tib3gnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9uc1N0eWxlKHZhbHVlOiAnY2hlY2tib3gnIHwgJ3RleHQnKSB7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uub3B0aW9uc1N0eWxlID0gdmFsdWUgPz8gJ2NoZWNrYm94JztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBzaG9ydCBoaW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0Li4uJ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QuLi4nO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlYXJjaCBpbnB1dCBlbGVtZW50XG4gICAqIEB0eXBlIGJvb2xlYW4gfCBTZWFyY2hGbiB8ICdleHRlcm5hbCdcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VhcmNoOiAoYm9vbGVhbiB8ICdleHRlcm5hbCcgfCBTZWFyY2hGbikgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsYWJlbCBmb3Igbm8gcmVzdWx0cyB3aGVuIGZpbHRlcmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ25vIGl0ZW1zJ1xuICAgKi9cbiAgQElucHV0KCkgc2VhcmNoTm9SZXN1bHRzTGFiZWw6IHN0cmluZyA9ICdubyBpdGVtcyc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW5pdGlhbCBzZWFyY2ggc3RyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX3NlYXJjaFZhbHVlICE9PSB2YWx1ZS50cmltU3RhcnQoKSkge1xuICAgICAgdGhpcy5fc2VhcmNoVmFsdWUgPSB2YWx1ZS50cmltU3RhcnQoKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLnN1YnRyZWVGb2N1c2VkID8gdHJ1ZSA6IHRoaXMudmlzaWJsZTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKTtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3NlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWFyY2hWYWx1ZSBzdHJpbmcgZm9yIGV4dGVybmFsIGZpbHRlcmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRW5hYmxlcyBzZWxlY3QgYWxsIGJ1dHRvblxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdCBhbGwgYnV0dG9uIGxhYmVsXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0IGFsbCBvcHRpb25zJ1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsTGFiZWw6IHN0cmluZyA9ICdTZWxlY3QgYWxsIG9wdGlvbnMnO1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gdHlwZVxuICAgKiBAdHlwZSAnY291bnRlcicgfCAndGFncycgfCAndGV4dCdcbiAgICogQGRlZmF1bHQgJ3RhZ3MnXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiAnY291bnRlcicgfCAndGFncycgfCAndGV4dCcgPSAndGFncyc7XG5cbiAgLyoqXG4gICAqIENvdW50ZXIgc2VsZWN0aW9uIGxhYmVsIHZhbHVlXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnaXRlbShzKSBzZWxlY3RlZCdcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dDogc3RyaW5nID0gJ2l0ZW0ocykgc2VsZWN0ZWQnO1xuXG4gIC8qKlxuICAgKiBDb3VudGVyIHNlbGVjdGlvbiBsYWJlbCBwbHVyYWwgbWFwIGZvciBJMThuUGx1cmFsUGlwZVxuICAgKiBAdHlwZSBJUGx1cmFsTWFwXG4gICAqIEBkZWZhdWx0IHsgJz0xJzogJ2l0ZW0gc2VsZWN0ZWQnLCAnb3RoZXInOiAnaXRlbXMgc2VsZWN0ZWQnIH1cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcD86IElQbHVyYWxNYXAgPSB7ICc9MSc6ICdpdGVtIHNlbGVjdGVkJywgJ290aGVyJzogJ2l0ZW1zIHNlbGVjdGVkJyB9O1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gICAqIEB0eXBlIHN0cmluZyB8IHN0cmluZ1tdXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbdmFsdWUgPz8gdW5kZWZpbmVkXTtcbiAgICBpZiAodGhpcy5kaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgdGhpcy52YWx1ZSQubmV4dChbLi4ubmV3VmFsdWVdKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgLy8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZCA/PyBbLi4udGhpcy4jdmFsdWVdO1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gWy4uLnZhbHVlXSA6IHZhbHVlPy50b1N0cmluZygpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gICN2YWx1ZTogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogRW1pdHMgdmFsdWVDaGFuZ2VcbiAgICogQHR5cGUgc3RyaW5nIHwgc3RyaW5nW11cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgc3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXN1YWwgdmFsaWRhdGlvbiBmZWVkYmFjay5cbiAgICogQHR5cGUgYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsZXIgZm9yIG9wdGlvbnMgbGlzdC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZpcnR1YWxTY3JvbGxlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmlydHVhbFNjcm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl92aXJ0dWFsU2Nyb2xsZXI7XG4gIH1cblxuICBwcml2YXRlIF92aXJ0dWFsU2Nyb2xsZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQW1vdW50IG9mIHZpc2libGUgb3B0aW9ucywgaWYgc2V0IC0gb3ZlcndyaXRlcyBvcHRpb25zTWF4SGVpZ2h0XG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCA4XG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmlzaWJsZUl0ZW1zKHZhbHVlKSB7XG4gICAgdGhpcy5fdmlzaWJsZUl0ZW1zID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUgfHwgOCk7XG4gICAgdGhpcy5vcHRpb25zTWF4SGVpZ2h0ID0gKCh0aGlzLml0ZW1TaXplICogdGhpcy5fdmlzaWJsZUl0ZW1zKSArIDE2KS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZUl0ZW1zID0gODtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBpdGVtIGluIHRoZSBsaXN0IChpbiBwaXhlbHMpLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1TaXplOiBudW1iZXIgPSA0MDtcblxuICAvKipcbiAgICogTWluIHdpZHRoIG9mIHRoZSBvcHRpb25zIGxpc3QgKGluIHBpeGVscykuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxOTZcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1NaW5XaWR0aDogbnVtYmVyID0gMTk2O1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGRyb3Bkb3duIHNlbGVjdCBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHZpc2libGUgIT09IHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnRvZ2dsZVZpc2libGUodmlzaWJsZSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAvLyB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gIH1cblxuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHZpc2libGVDaGFuZ2VcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgcG9wcGVyIE9wdGlvbnMgb2JqZWN0XG4gICAqIEB0eXBlIFBhcnRpYWw8T3B0aW9ucz5cbiAgICovXG4gIEBJbnB1dCgncG9wcGVyT3B0aW9ucycpIHBvcHBlcmpzT3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBzdHJhdGVneTogJ2ZpeGVkJywgbW9kaWZpZXJzOiBbb2JzZXJ2ZVJlZmVyZW5jZU1vZGlmaWVyLCB7XG4gICAgICBuYW1lOiAnb2Zmc2V0Jywgb3B0aW9uczoge1xuICAgICAgICBvZmZzZXQ6ICgpID0+IHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ3RhZ3MnICYmIHRoaXMub3B0aW9uc1NlbGVjdGVkLnNpemUgPyBbLTIsIDhdIDogWy0xMiwgMTJdXG4gICAgICB9XG4gICAgfV1cbiAgfTtcblxuICBpc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm9wdGlvbnNTZWxlY3RlZC52YWx1ZXMoKV07XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24ubGFiZWwpLmpvaW4oJywgJyk7XG4gIH1cblxuICBnZXQgY291bnRlclRleHQoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0gJHt0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dH1gO1xuICB9XG5cbiAgZ2V0IGNvdW50ZXJUZXh0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXAgPz8gdHlwZW9mIHRoaXMuc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0O1xuICB9O1xuXG4gIHByaXZhdGUgZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgbXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCE6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGRyZW4oTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIG11bHRpU2VsZWN0T3B0aW9uc1ZpZXchOiBRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKCdzY3JvbGxWaWV3cG9ydCcpIHNjcm9sbFZpZXdwb3J0VmlldyE6IFF1ZXJ5TGlzdDxDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ+O1xuICBAVmlld0NoaWxkKCdvcHRpb25zJykgb3B0aW9uc0VsZW1lbnRSZWYhOiBFbGVtZW50UmVmO1xuXG4gIHByb3RlY3RlZCBzY3JvbGxWaWV3cG9ydCE6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBwcm90ZWN0ZWQgdGVtcGxhdGVzOiB7IFtpZDogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9ID0ge307XG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb250ZW50VGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xuXG4gIHByaXZhdGUgZm9jdXNLZXlNYW5hZ2VyITogRm9jdXNLZXlNYW5hZ2VyPE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKSBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bk1lbnUnKSBkcm9wZG93bk1lbnUhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd24hOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25Ub2dnbGUhOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtdWx0aXNlbGVjdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdmb3JtLW11bHRpLXNlbGVjdCc6IHRydWUsXG4gICAgICAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLXRhZ3MnOiB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICd0YWdzJyAmJiB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zaXplID4gMCxcbiAgICAgIFtgZm9ybS1tdWx0aS1zZWxlY3QtJHt0aGlzLnNpemV9YF06ICEhdGhpcy5zaXplLFxuICAgICAgJ2Zvcm0tbXVsdGktc2VsZWN0LXdpdGgtY2xlYW5lcic6IHRoaXMuY2xlYW5lcixcbiAgICAgIHNob3c6IHRoaXMudmlzaWJsZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgJ2lzLXZhbGlkJzogdGhpcy52YWxpZCA9PT0gdHJ1ZSxcbiAgICAgICdpcy1pbnZhbGlkJzogdGhpcy52YWxpZCA9PT0gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlJylcbiAgcHJpdmF0ZSBnZXQgYXJpYU11bHRpU2VsZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgcHJpdmF0ZSBnZXQgYXJpYUV4cGFuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBwcml2YXRlIGdldCB0YWJJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHNldCB0YWJJbmRleCh2YWx1ZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdGFiSW5kZXggPSB0aGlzLmRpc2FibGVkIHx8IHRoaXMuc2VhcmNoID8gLTEgOiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAwO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFiSW5kZXg6IG51bWJlciB8IG51bGwgPSAtMTtcblxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pIG9uS2V5VXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICBjb25zdCB0YXJnZXRUYWdOYW1lID0gKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU7XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFsnRW50ZXInLCAnU3BhY2UnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmNvZGUpICYmIFt0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRdLmluY2x1ZGVzKCRldmVudC50YXJnZXQpKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnVGFiJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcblxuICAgICAgaWYgKCRldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5zdWJ0cmVlRm9jdXNlZCkge1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcblxuICAgICAgICAgIGlmICh0aGlzLnRhYlRhcmdldCA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8udmFsdWUgPT09IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLnNsaWNlKDApWzBdLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgICAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghJGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/LnZhbHVlID09PSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKS5zbGljZSgtMSlbMF0udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygna2V5Ym9hcmQnLCAnb25LZXlVcCcpO1xuICAgICAgICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbSB8fCB0aGlzLnRhYlRhcmdldCAhPT0gdGFyZ2V0VGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZTtcbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiB0YXJnZXRUYWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyAmJiB0YXJnZXRUYWdOYW1lICE9PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleURvd24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYXZvaWQgc2V0dGluZyBmb2N1cyB0byBvcHRpb24gd2hpbGUgb24gaW5wdXQgZWxlbWVudFxuICAgIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoW3RoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5zZXRGb2N1cygnbW91c2UnLCAnb25DbGljaycpO1xuICB9XG5cbiAgcHVibGljIHZpc2libGVPcHRpb25zID0gc2lnbmFsKGZhbHNlKTtcblxuICBnZXQgc3VidHJlZUZvY3VzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnRyZWVGb2N1c2VkO1xuICB9XG5cbiAgc2V0IHN1YnRyZWVGb2N1c2VkKGZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdWJ0cmVlRm9jdXNlZCA9IHRoaXMuZGlzYWJsZWQgPyBmYWxzZSA6IGZvY3VzZWQ7XG4gICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZvY3VzZWQgPT09IGZhbHNlID8gZmFsc2UgOiB0aGlzLnZpc2libGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG51bGwpO1xuXG4gIHByaXZhdGUgbmF0aXZlU2VsZWN0UmVmITogYW55O1xuXG4gIGZvY3VzT3JpZ2luKG9yaWdpbjogRm9jdXNPcmlnaW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISFvcmlnaW47XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubXVsdGlwbGUpLFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBmb3Igc2luZ2xlIHNlbGVjdCAoIW11bHRpcGxlKVxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdzZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkIChzaW5nbGUpJyk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jb3B0aW9uc1JlYWR5JC5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnZpcnR1YWxTY3JvbGxlciksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgIGRlbGF5KDApLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c0tleU1hbmFnZXIoWy4uLnRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCwgLi4udGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3XSk7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCB9ID0geyAuLi5jaGFuZ2UgfTtcbiAgICAgICAgICBpZiAoYWRkZWQubGVuZ3RoID4gMCAmJiB0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIGRlbGF5KDApLFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLiNvcHRpb25zUmVhZHkkKSxcbiAgICAgICAgdGFwKChbY2hhbmdlLCByZWFkeV0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IHJlbW92ZWQgfSA9IHsgLi4uY2hhbmdlIH07XG4gICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNvcHRpb25zLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkJC5uZXh0KEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQudmFsdWVzKCkpKTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcblxuICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgICAgICAgIHRoaXMudXBkYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuI3ZhbHVlKTtcblxuICAgIHRoaXMudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm9wdGlvbnNBcnJheSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnVzZXJPcHRpb25zQXJyYXkkKSxcbiAgICAgICAgdGFwKChbb3B0aW9ucywgdXNlck9wdGlvbnNdKSA9PiB7XG5cbiAgICAgICAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldChvcHRpb25zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkgfHwgdXNlck9wdGlvbnMuc29tZSgoaXRlbSkgPT4gaXRlbS52aXNpYmxlKSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zZXRSZW5kZXJlZFJhbmdlKHsgc3RhcnQ6IDAsIGVuZDogdGhpcy52aXNpYmxlSXRlbXMgfSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBvcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICBvcHRpb24udmlzaWJsZSA9IGZvdW5kPy52aXNpYmxlID8/IGZhbHNlO1xuICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgICAgICAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuI2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSBjaGFuZ2VzWyd2YWx1ZSddO1xuICAgICAgaWYgKHZhbHVlQ2hhbmdlcy5jdXJyZW50VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcbiAgICB9XG4gIH1cblxuICBtYWtlT3B0aW9ucyhvcHRpb25zOiBJT3B0aW9uW10pIHtcblxuICAgIGlmICh0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyAmJiB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy4jb3B0aW9ucy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIHZhbHVlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLmxhYmVsLFxuICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsID8/IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZSxcbiAgICAgICAgdmlzaWJsZTogdGhpcy5zZWFyY2ggPT09ICdleHRlcm5hbCcgPyB0cnVlIDogb3B0aW9uLmN1c3RvbSAmJiBvcHRpb24uc2VsZWN0ZWQgPyBvcHRpb24udmlzaWJsZSA6IG9wdGlvbi52aXNpYmxlICE9PSBmYWxzZSxcbiAgICAgICAgdGV4dDogb3B0aW9uLnRleHQgPz8gb3B0aW9uLmxhYmVsID8/IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgc2VsZWN0ZWQ6IG9wdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgY3VzdG9tOiBvcHRpb24uY3VzdG9tXG4gICAgICAgIC8vIHNlbGVjdGVkOiB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG9wdGlvbi52YWx1ZSksXG4gICAgICAgIC8vIGlkOiBvcHRpb24uaWRcbiAgICAgIH07XG4gICAgICB0aGlzLiNvcHRpb25zLnNldChrZXksIHsgLi4udmFsdWUgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlck9wdGlvbnModGhpcy5zZWFyY2hWYWx1ZSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zVmlldz8ubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgdGhpcy4jb3B0aW9uc1JlYWR5JC5uZXh0KCk7XG4gIH1cblxuICB1c2VyT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmdldFVzZXJPcHRpb25zKCk7XG5cbiAgLy8gI2VmZmVjdFVzZXJPcHRpb25zID0gZWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAodGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpIHtcbiAgLy8gICAgIHRoaXMudXNlck9wdGlvbnNBcnJheSQubmV4dChBcnJheS5mcm9tKHRoaXMudXNlck9wdGlvbnMoKS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlKSkpO1xuICAvLyAgIH1cbiAgLy8gfSk7XG5cbiAgYWRkVXNlck9wdGlvbigpIHtcbiAgICBpZiAodGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJPcHRpb25zKCkuc29tZShvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5nZXQodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNlck9wdGlvbjogSU9wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB0ZXh0OiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICB9O1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICh0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QgfHwgdGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpID8gJycgOiB0aGlzLnNlYXJjaFZhbHVlO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuYWRkVXNlck9wdGlvbih1c2VyT3B0aW9uKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdCh1c2VyT3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLnNldCh1c2VyT3B0aW9uLnZhbHVlLCB1c2VyT3B0aW9uKTtcbiAgICAgIHRoaXMubWFrZU9wdGlvbnMoWy4uLnRoaXMub3B0aW9ucywgLi4udGhpcy51c2VyT3B0aW9ucygpXSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQWxsVXNlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UucmVtb3ZlQWxsVXNlck9wdGlvbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuc2V0VmlydHVhbFNjcm9sbGVyKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzOiBRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+LCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHByZXZpb3VzLnRvQXJyYXkoKS5tYXAob3B0aW9uID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgY29uc3QgY3VyciA9IGN1cnJlbnQudG9BcnJheSgpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLiNvcHRpb25zQ29udGVudCkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKGNoYW5nZXMgPT4ge1xuICAgICAgICAgIHRoaXMuI29wdGlvbnNDb250ZW50ID0gY2hhbmdlcy50b0FycmF5KCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMuc2V0KHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSkpO1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICAgICAgdGhpcy5tYWtlT3B0aW9ucyh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lmxlbmd0aCA+IDAgfHwgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5sZW5ndGggPiAwKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXRoaXMuZGlzYWJsZWQpO1xuXG4gICAgdGhpcy5zZXRMaXN0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdEZvY3VzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChvcHRpb246IE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uICYmIHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlICE9PSBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRhYlRhcmdldCE6IHN0cmluZztcblxuICBwcml2YXRlIG11bHRpc2VsZWN0U3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpIHtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm11bHRpU2VsZWN0VmlzaWJsZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZpc2libGUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93blZpc2libGUgIT09IHZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2aXNpYmxlKTtcbiAgICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQ/LnNldFJlbmRlcmVkUmFuZ2UoeyBzdGFydDogMCwgZW5kOiB0aGlzLnZpc2libGVJdGVtcyB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgIH0pO1xuXG4gIH1cblxuICBjbGVhckFsbE9wdGlvbnMoJGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpKS5maWx0ZXIob3B0aW9uID0+ICFvcHRpb24uZGlzYWJsZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KC4uLmVuYWJsZWRPcHRpb25zKTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsVXNlck9wdGlvbnMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ2NsZWFyQWxsT3B0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbE9wdGlvbnMoKSB7XG4gICAgY29uc3QgZW5hYmxlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuI29wdGlvbnMudmFsdWVzKCkpLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdCguLi5lbmFibGVkT3B0aW9ucyk7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gIH1cblxuICBoYW5kbGVUYWdSZW1vdmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KHZhbHVlKTtcbiAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ2hhbmRsZVRhZ1JlbW92ZScpO1xuICB9XG5cbiAgc2V0Rm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJywgbWV0aG9kTmFtZT86IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+KHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPz8gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IHByZXZlbnRTY3JvbGwgPSBvcmlnaW4gPT09ICdwcm9ncmFtJztcbiAgICB0aGlzLmZvY3VzTW9uaXRvcj8uZm9jdXNWaWEoZWxlbWVudCwgb3JpZ2luLCB7IHByZXZlbnRTY3JvbGw6IHByZXZlbnRTY3JvbGwgfSk7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldEZvY3VzJywgb3JpZ2luLCBtZXRob2ROYW1lLCAncHJldmVudFNjcm9sbDonLCBwcmV2ZW50U2Nyb2xsLCBlbGVtZW50LnRhZ05hbWUsIHRoaXMudmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyT3B0aW9ucyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdmFsdWUudG9Mb3dlckNhc2UoKSA/PyAnJztcbiAgICB0aGlzLiNvcHRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoc2VhcmNoU3RyaW5nID09PSAnJykge1xuICAgICAgICBpdGVtLnZpc2libGUgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2VhcmNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRoaXMuc2VhcmNoKGl0ZW0sIHNlYXJjaFN0cmluZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgodGhpcy5zZWFyY2ggPT09ICdleHRlcm5hbCcgJiYgIWl0ZW0uY3VzdG9tKSB8fCAhc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgIC8vIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udmlzaWJsZSA9IGl0ZW0ubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSA/PyB0cnVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UudXBkYXRlT3B0aW9uc0FycmF5KEFycmF5LmZyb20odGhpcy4jb3B0aW9ucy52YWx1ZXMoKSkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnZpc2libGUpKTtcbiAgICB0aGlzLnVzZXJPcHRpb25zQXJyYXkkLm5leHQoQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY3VzdG9tKSk7XG4gIH1cblxuICBjcmVhdGVOYXRpdmVTZWxlY3QoKSB7XG4gICAgaWYgKCF0aGlzLm5hdGl2ZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChNdWx0aVNlbGVjdE5hdGl2ZVNlbGVjdENvbXBvbmVudCk7XG4gICAgdGhpcy51cGRhdGVOYXRpdmVTZWxlY3QoKTtcbiAgfVxuXG4gIHVwZGF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMubmF0aXZlU2VsZWN0UmVmIHx8ICF0aGlzLm5hdGl2ZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCB7IHNlbGVjdGVkLCB2YWx1ZSwgbGFiZWwgfSA9IGl0ZW1bMV07XG4gICAgICByZXR1cm4geyBzZWxlY3RlZCwgdmFsdWUsIGxhYmVsIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuZm9ybSA9IHRoaXMubmF0aXZlRm9ybUlkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmlkID0gdGhpcy5uYXRpdmVJZDtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5uYW1lID0gdGhpcy5uYXRpdmVOYW1lO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaW5wdXRFbGVtZW50U2l6ZSgpIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCh0aGlzLm9wdGlvbnNTZWxlY3RlZC5zaXplID4gMCB8fCB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdjb3VudGVyJykgJiYgIXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoICsgMikudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2l6ZScpO1xuICAgICAgfVxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2VhcmNoS2V5RG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblxuICAgIGlmIChbJ0VudGVyJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkgJiYgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggJiYgdGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5hZGRVc2VyT3B0aW9uKCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCB8fCB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnQmFja3NwYWNlJywgJ0RlbGV0ZSddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiAhb3B0aW9uLmRpc2FibGVkKS5wb3AoKTtcbiAgICAgIGlmIChsYXN0KSB7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGxhc3QudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNNb25pdG9yKG1vbml0b3I6IGJvb2xlYW4pIHtcbiAgICBpZiAobW9uaXRvciAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24gPSB0aGlzLmZvY3VzTW9uaXRvcj8ubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYsIHRydWUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIHRvIGF2b2lkIGZvY3VzIGxvc3Qgb24gc3BlZWQgc2Nyb2xsaW5nIHdpdGggdmlydHVhbFNjcm9sbFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yPy5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlT3B0aW9uOiAoRm9jdXNhYmxlT3B0aW9uICYgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZShzY3JvbGxlZEluZGV4OiBudW1iZXIsIHNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcblxuICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydCA9IHNjcm9sbFZpZXdwb3J0O1xuICAgIH1cblxuICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlT3B0aW9uID0gYXZhaWxhYmxlT3B0aW9uc1tzY3JvbGxlZEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IGF2YWlsYWJsZU9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuYWN0aXZlT3B0aW9uPy52YWx1ZSk7XG4gICAgY29uc3Qgb3B0aW9uc0FycmF5ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LnRvQXJyYXkoKTtcblxuICAgIGlmIChzY3JvbGxlZEluZGV4ID4gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUl0ZW0gPSBvcHRpb25zQXJyYXkuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24/LnZhbHVlKTtcbiAgICAgIGlmIChmaXJzdFZpc2libGVJdGVtICYmIHNjcm9sbGVkSW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShmaXJzdFZpc2libGVJdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsZWRJbmRleCArIHRoaXMudmlzaWJsZUl0ZW1zIC0gMiA8PSBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgY29uc3QgbGFzdFZpc2libGVJdGVtID0gb3B0aW9uc0FycmF5LmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKGxhc3RWaXNpYmxlSXRlbSA+IC0xKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdFZpc2libGVJdGVtICsgdGhpcy52aXNpYmxlSXRlbXMgLSAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBvcHRpb246IElPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2Uoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZTtcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgaWYgKHRoaXMuc3VidHJlZUZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlydHVhbFNjcm9sbGVyKCkge1xuXG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgZm9yIHZpcnR1YWxTY3JvbGxlclxuICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG5cbiAgICAvLyBpZiBubyB0ZW1wbGF0ZSBmb3VuZCwgZ2V0IGRlZmF1bHRNdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlIGZyb20gdmlld1xuICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3O1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgZ2V0cyBvdXQgb2Ygb3JkZXIgb24gY2hhbmdlc1xuICAgIC8vIGRvIHNvcnQoKSBhbmQgcmVzZXQoKVxuICAgIGNvbnN0IGluZGV4T2ZPcHRpb24gPSAob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgcmV0dXJuIFsuLi5vcHRpb24uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW5dPy5pbmRleE9mKG9wdGlvbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zQ2hhbmdlJDogT2JzZXJ2YWJsZTxRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+PiA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5jaGFuZ2VzO1xuXG4gICAgY29uc3Qgc29ydGVkT3B0aW9ucyQgPSBvcHRpb25zQ2hhbmdlJC5waXBlKFxuICAgICAgbWFwKG9wdGlvbnMgPT4gb3B0aW9ucy50b0FycmF5KCkpLFxuICAgICAgZmlsdGVyKG9wdGlvbnMgPT4gb3B0aW9ucy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMuc29ydCgoYSwgYikgPT4gaW5kZXhPZk9wdGlvbihhKSAtIGluZGV4T2ZPcHRpb24oYikpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgKTtcblxuICAgIHNvcnRlZE9wdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoc29ydGVkT3B0aW9ucyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQucmVzZXQoc29ydGVkT3B0aW9ucyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2Nyb2xsVmlld3BvcnRWaWV3LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoY2hhbmdlcyA9PiBjaGFuZ2VzLnRvQXJyYXkoKVswXSksXG4gICAgICAgIHRhcCgoc2Nyb2xsVmlld3BvcnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0ID0gc2Nyb2xsVmlld3BvcnQ7XG5cbiAgICAgICAgICAgICAgY29uc3QgY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyID0gdGhpcy5zY3JvbGxWaWV3cG9ydC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudD8uZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgIGlmIChjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBwYXJzZUludChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKSA/PyAnMTJweCcpICogMztcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uUmVjb3JkcykgPT4ge1xuICAgICAgICAgICAgICAgICAgbXV0YXRpb25SZWNvcmRzLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdDLU1VTFRJLVNFTEVDVC1PUFRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IHRoaXMuaXRlbU1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbU1pbldpZHRoID0gd2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuI2Rlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldExpc3RLZXlNYW5hZ2VyKCkge1xuXG4gICAgLy8gcnVuIG9uY2Ugb24gbXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCBmaXJzdCBzZXRcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoY2hhbmdlcykgPT4gdGhpcy52aXJ0dWFsU2Nyb2xsZXIpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzS2V5TWFuYWdlcih0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2V0Rm9jdXNLZXlNYW5hZ2VyKGZvY3VzYWJsZU9wdGlvbnM6IChRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+IHwgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnRbXSkpIHtcblxuICAgIC8vIHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZvY3VzS2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIoZm9jdXNhYmxlT3B0aW9ucylcbiAgICAgIC53aXRoSG9tZUFuZEVuZCgpXG4gICAgICAud2l0aFBhZ2VVcERvd24oKVxuICAgICAgLnNraXBQcmVkaWNhdGUoKG9wdGlvbikgPT4gKG9wdGlvbi5kaXNhYmxlZCB8fCAhb3B0aW9uLnZpc2libGUpKTtcblxuICAgIGlmICghdGhpcy5fdmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKDMwMCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0tleU1hbmFnZXIudGFiT3V0XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIHRhcCgoKSA9PiB7fSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2UgPCAwKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPyB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlT3B0aW9uKSA6IHRoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtO1xuICAgICAgICBjb25zdCBvcHRpb24gPSA8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+dGhpcy5hY3RpdmVPcHRpb247XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmZvY3VzQ2hhbmdlKG9wdGlvbik7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAvLyBpZiAoIXRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAvLyAgIHRoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgLy8gfVxuICB9XG5cbiAgZ2V0IGZpcnN0Rm9jdXNhYmxlSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5maW5kKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKSA/PyB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZpbmQob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaXJzdEl0ZW1BY3RpdmUoKSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgZmlyc3RGb2N1c2FibGVJdGVtID8gdGhpcy5mb2N1c0tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oZmlyc3RGb2N1c2FibGVJdGVtKSA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICB0aGlzLmFjdGl2ZU9wdGlvbiA9IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtID8/IG51bGw7XG4gIH1cblxuICB1cGRhdGVBY3RpdmVJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW08VCBleHRlbmRzIChNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCAmIEZvY3VzYWJsZU9wdGlvbik+KGl0ZW06IFQpOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbTogYW55KSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW0gPz8gaXRlbTtcbiAgICBmaXJzdEZvY3VzYWJsZUl0ZW0gPyB0aGlzLmZvY3VzS2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZUl0ZW0pIDogdGhpcy5mb2N1c0tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxufVxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCJcbiAgICAgICAgICAgIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJtdWx0aXNlbGVjdENsYXNzZXNcIlxuICAgICAgICAgICAgW3BvcHBlck9wdGlvbnNdPVwicG9wcGVyanNPcHRpb25zXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGlja2VyXCI+XG4gIDxkaXYgI2Ryb3Bkb3duVG9nZ2xlPVwiY0Ryb3Bkb3duVG9nZ2xlXCIgW2NhcmV0XT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY0Ryb3Bkb3duVG9nZ2xlPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb25cIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3Rpb25UeXBlID09PSAndGFncydcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihvcHRpb25zU2VsZWN0ZWQkIHwgYXN5bmMpIGFzIG9wdGlvblRhZ3NcIj5cbiAgICAgICAgICA8Yy1tdWx0aS1zZWxlY3QtdGFnXG4gICAgICAgICAgICAocmVtb3ZlKT1cImhhbmRsZVRhZ1JlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uVGFnczsgaW5kZXggYXMgaVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC10YWdcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDwvYy1tdWx0aS1zZWxlY3QtdGFnPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3RleHQnICYmICEhc2VsZWN0ZWRPcHRpb25zVGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXNlYXJjaFwiPnt7IHNlbGVjdGVkT3B0aW9uc1RleHQgfX08L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGlvblR5cGUgPT09ICdjb3VudGVyJ1wiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvdW50ZXJUZXh0VHlwZSA9PT0gJ3N0cmluZyc7IGVsc2UgcGx1cmFsTWFwXCI+e3sgY291bnRlclRleHQgfX08L3NwYW4+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1cmFsTWFwPlxuICAgICAgICAgIDxzcGFuPnt7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH19IHt7IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfCBpMThuUGx1cmFsOiAoc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0UGx1cmFsTWFwID8/IHsgb3RoZXI6IHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCA/PyAnKycgfSkgfX08L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPCEtLSAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2VhcmNoICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgc2VsZWN0aW9uVHlwZSAhPT0gJ2NvdW50ZXInXCI+LS0+XG4gICAgICA8IS0tICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXNlYXJjaFwiPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPi0tPlxuICAgICAgPCEtLSAgICAgIDwvbmctdGVtcGxhdGU+LS0+XG4gICAgPC9kaXY+XG5cbiAgICA8aW5wdXRcbiAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJvcHRpb25zU2VsZWN0ZWQuc2l6ZSA9PT0gMCAmJiBzZWxlY3Rpb25UeXBlICE9PSAnY291bnRlcicgPyBwbGFjZWhvbGRlciA6IG51bGxcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFzZWFyY2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoJzogdHJ1ZSwgZGlzYWJsZWQ6IChkaXNhYmxlZCB8fCAhc2VhcmNoKSB9XCJcbiAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgY011bHRpU2VsZWN0U2VhcmNoXG4gICAgICBzaXplPVwiM1wiXG4gICAgICB0YWJpbmRleD1cInt7IGRpc2FibGVkID8gLTEgOiAwIH19XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA+XG5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwiY2xlYXJBbGxPcHRpb25zKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJjbGVhbmVyICYmIG9wdGlvbnNTZWxlY3RlZC5zaXplID4gMCAmJiAhZGlzYWJsZWRcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFpc0Ryb3Bkb3duVmlzaWJsZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgYWxsXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLWNsZWFuZXJcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiAjZHJvcGRvd25NZW51PVwiY0Ryb3Bkb3duTWVudVwiICpuZ0lmPVwiIWRpc2FibGVkXCIgW3Zpc2libGVdPVwiZHJvcGRvd24udmlzaWJsZVwiIGNEcm9wZG93bk1lbnU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIih2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbE9wdGlvbnMoKVwiXG4gICAgICAgICpuZ0lmPVwic2VsZWN0QWxsICYmIG11bHRpcGxlICYmICF2aXJ0dWFsU2Nyb2xsZXJcIlxuICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWFsbFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgPlxuICAgICAgICB7eyBzZWxlY3RBbGxMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZFbHNlXT1cIm9wdGlvbnNFbXB0eVwiIFtuZ0lmXT1cIih2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgIHx8IGlzTG9hZGluZygpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmlydHVhbFNjcm9sbGVyID8gbXVsdGlzZWxlY3RWaXJ0dWFsU2Nyb2xsZXIgOiBtdWx0aXNlbGVjdE9wdGlvbnNEaXZcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNvcHRpb25zRW1wdHk+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucy1lbXB0eVwiPnt7IHNlYXJjaE5vUmVzdWx0c0xhYmVsIH19PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNMb2FkaW5nKClcIj5cbiAgICAgIDxjLWVsZW1lbnQtY292ZXIgW25nU3R5bGVdPVwieydib3JkZXItcmFkaXVzJzogJzZweCcsICd6LWluZGV4JzogMn1cIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9jLWRyb3Bkb3duPlxuXG48bmctdGVtcGxhdGUgI211bHRpc2VsZWN0VmlydHVhbFNjcm9sbGVyPlxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgI3Njcm9sbFZpZXdwb3J0XG4gICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwiaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZSgkZXZlbnQsIHNjcm9sbFZpZXdwb3J0KVwiXG4gICAgKm5nSWY9XCIob3B0aW9uc0FycmF5JCB8IGFzeW5jKSBhcyBvcHRpb25zQXJyYXlcIlxuICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnaGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgJ21heEhlaWdodC5weCc6IG9wdGlvbnNNYXhIZWlnaHQsICdtaW5XaWR0aC5weCc6IGl0ZW1NaW5XaWR0aCA/PyAxOTYsIG92ZXJmbG93WDogJ2hpZGRlbicgfSA6IHsgJ21pbldpZHRoLnB4JzogaXRlbU1pbldpZHRoID8/IDE5Niwgb3ZlcmZsb3dYOiAnaGlkZGVuJ31cIlxuICAgIG1heEJ1ZmZlclB4PVwie3tpdGVtU2l6ZSAqIHZpc2libGVJdGVtc319XCJcbiAgICBtaW5CdWZmZXJQeD1cInt7aXRlbVNpemUgKiB2aXNpYmxlSXRlbXN9fVwiXG4gICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1vcHRpb25zXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICNjZGtWaXJ0dWFsRm9yXG4gICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc0FycmF5OyB0cmFja0J5OiB0cmFja0J5Rm47IHRlbXBsYXRlQ2FjaGVTaXplOiAwOyBldmVuIGFzIGV2ZW47IG9kZCBhcyBvZGQ7IGluZGV4IGFzIGluZGV4OyBjb3VudCBhcyBjb3VudDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdDtcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSB8fCBkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgLz5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlzZWxlY3RPcHRpb25zRGl2PlxuICA8ZGl2XG4gICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnbWF4SGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgb3ZlcmZsb3dZOiAnc2Nyb2xsJyB9IDoge31cIlxuICAgIFtjbGFzc109XCJ7J2Zvcm0tbXVsdGktc2VsZWN0LW9wdGlvbnMnOiB2aXNpYmxlT3B0aW9ucygpfVwiXG4gID5cbiAgICA8bmctY29udGVudCAvPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlck9wdGlvbnNUZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICA8Yy1tdWx0aS1zZWxlY3Qtb3B0aW9uXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgW3RleHRdPVwib3B0aW9uLnRleHRcIlxuICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgIFt2aXNpYmxlXT1cIm9wdGlvbi52aXNpYmxlXCJcbiAgPlxuICAgIHt7b3B0aW9uLnRleHR9fVxuICA8L2MtbXVsdGktc2VsZWN0LW9wdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXNlck9wdGlvbnNUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdXNlck9wdGlvbnNBcnJheSQgfCBhc3luYzsgZXZlbiBhcyBldmVuOyBvZGQgYXMgb2RkOyBpbmRleCBhcyBpbmRleDsgY291bnQgYXMgY291bnQ7IGZpcnN0IGFzIGZpcnN0OyBsYXN0IGFzIGxhc3Q7XCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSB8fCBkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
1200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQU9MLE1BQU0sRUFHTixNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBbUIsZUFBZSxFQUE2QixNQUFNLG1CQUFtQixDQUFDO0FBQ2hHLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGVBQWUsRUFBYyxJQUFJLEVBQUUsT0FBTyxFQUFn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UyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDbkMsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIHNpZ25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBJMThuUGx1cmFsUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uLCBGb2N1c0tleU1hbmFnZXIsIEZvY3VzTW9uaXRvciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mLCBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgc2tpcCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0V2l0aCwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2RpZmllciwgTW9kaWZpZXJBcmd1bWVudHMsIE9wdGlvbnMgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbmltcG9ydCB7XG4gIERyb3Bkb3duQ29tcG9uZW50LFxuICBEcm9wZG93bkRpdmlkZXJEaXJlY3RpdmUsXG4gIERyb3Bkb3duTWVudURpcmVjdGl2ZSxcbiAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmVcbn0gZnJvbSAnLi4vLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgRWxlbWVudENvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudC1jb3Zlcic7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IElNdWx0aVNlbGVjdCwgSU9wdGlvbiwgT3B0aW9uc01hcCwgU2VhcmNoRm4gfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QudHlwZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlcnZpY2UgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL211bHRpLXNlbGVjdC1vcHRpb24vbXVsdGktc2VsZWN0LW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3ROYXRpdmVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QtbmF0aXZlLXNlbGVjdC9tdWx0aS1zZWxlY3QtbmF0aXZlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RUYWdDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QtdGFnL211bHRpLXNlbGVjdC10YWcuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aS1zZWxlY3Qtc2VhcmNoLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBJUGx1cmFsTWFwIHtcbiAgW2s6IHN0cmluZ106IHN0cmluZztcbn1cblxuLy8gQHRzLWlnbm9yZVxuZXhwb3J0IGNvbnN0IG9ic2VydmVSZWZlcmVuY2VNb2RpZmllcjogTW9kaWZpZXI8c3RyaW5nLCBhbnk+ID0ge1xuICBuYW1lOiAnb2JzZXJ2ZVJlZmVyZW5jZU1vZGlmaWVyJywgZW5hYmxlZDogdHJ1ZSwgcGhhc2U6ICdtYWluJywgZm4oeyBzdGF0ZSB9KSB7fSxcblxuICBlZmZlY3Q6ICh7IHN0YXRlLCBpbnN0YW5jZSB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikgPT4ge1xuICAgIGNvbnN0IFJPX1BST1AgPSAnX19wb3BwZXJqc1JPX18nO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBzdGF0ZS5lbGVtZW50cztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZWZlcmVuY2VbUk9fUFJPUF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlZmVyZW5jZVtST19QUk9QXS5vYnNlcnZlKHJlZmVyZW5jZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJlZmVyZW5jZVtST19QUk9QXS5kaXNjb25uZWN0KCk7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgcmVmZXJlbmNlW1JPX1BST1BdO1xuICAgIH07XG4gIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NNdWx0aVNlbGVjdCcsXG4gIHByb3ZpZGVyczogW1xuICAgIE11bHRpU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlTZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBJMThuUGx1cmFsUGlwZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgQ2RrVmlydHVhbEZvck9mLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE11bHRpU2VsZWN0VGFnQ29tcG9uZW50LFxuICAgIE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgIE11bHRpU2VsZWN0U2VhcmNoRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgIERyb3Bkb3duRGl2aWRlckRpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRWxlbWVudENvdmVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBJTXVsdGlTZWxlY3QsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBtdWx0aVNlbGVjdFNlcnZpY2U6IE11bHRpU2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLiN2YWx1ZSkuY3JlYXRlKCk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5vcHRpb25zQXJyYXkkID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuZ2V0T3B0aW9uc0FycmF5KCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaWZmZXIhOiBJdGVyYWJsZURpZmZlcjxhbnk+O1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hbGxvd0NyZWF0ZU9wdGlvbnM6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NsZWFyU2VhcmNoT25TZWxlY3Q6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9tdWx0aXBsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbFNjcm9sbGVyOiBCb29sZWFuSW5wdXQ7XG5cbiAgcmVhZG9ubHkgI2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgI29wdGlvbnNSZWFkeSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBvcHRpb25zQXJyYXkkITogT2JzZXJ2YWJsZTxJT3B0aW9uW10+O1xuICByZWFkb25seSB1c2VyT3B0aW9uc0FycmF5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5ICNvcHRpb25zOiBPcHRpb25zTWFwPHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IG9wdGlvbnNTZWxlY3RlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElPcHRpb25bXT4oW10pO1xuICByZWFkb25seSBvcHRpb25zU2VsZWN0ZWQ6IE1hcDxhbnksIElPcHRpb24+ID0gbmV3IE1hcCgpO1xuICByZWFkb25seSB2YWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gICNvcHRpb25zQ29udGVudDogYW55W10gPSBbXTtcblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogKHN0cmluZyB8IHN0cmluZ1tdKSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IFt2YWx1ZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBBcnJheSgwKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXJzIHRvIGNyZWF0ZSBvcHRpb25zIGlmIHRoZXkgYXJlIG5vdCBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzaW5jZSA0LjUuMTFcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBhbGxvd0NyZWF0ZU9wdGlvbnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNhbGxvd0NyZWF0ZU9wdGlvbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGFsbG93Q3JlYXRlT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jYWxsb3dDcmVhdGVPcHRpb25zO1xuICB9XG5cbiAgI2FsbG93Q3JlYXRlT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdGlvbiBjbGVhbmVyIGVsZW1lbnRcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBjbGVhbmVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ2xlYXIgY3VycmVudCBzZWFyY2ggb24gc2VsZWN0aW5nIGFuIGl0ZW1cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjExXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgY2xlYXJTZWFyY2hPblNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI2NsZWFyU2VhcmNoT25TZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNsZWFyU2VhcmNoT25TZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2NsZWFyU2VhcmNoT25TZWxlY3Q7XG4gIH1cblxuICAjY2xlYXJTZWFyY2hPblNlbGVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBtdWx0aS1zZWxlY3QgY29tcG9uZW50XG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZCBsb2FkaW5nIHNwaW5uZXIgYW5kIHJlZHVjZWQgb3BhY2l0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSkpO1xuICB9XG5cbiAgaXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoYXQgbXVsdGlwbGUgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgYXQgb25jZVxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5fbXVsdGlwbGUpO1xuICB9XG5cbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBuYXRpdmUgc2VsZWN0IGZvcm1cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVGb3JtSWQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbmF0aXZlIHNlbGVjdCBpZFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIG5hdGl2ZUlkOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgbmFtZVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIG5hdGl2ZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wdGlvbiBlbGVtZW50c1xuICAgKiBAdHlwZSBJT3B0aW9uW11cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IElPcHRpb25bXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmNsZWFyKCk7XG4gICAgICB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy4jb3B0aW9ucy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBtYXhIZWlnaHQgb2Ygb3B0aW9ucyBsaXN0IGluIHB4XG4gICAqIEB0eXBlIHN0cmluZyB8IG51bWJlclxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnNNYXhIZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9ICdhdXRvJztcblxuICAvKipcbiAgICogU2V0cyBvcHRpb24gc3R5bGVcbiAgICogQHR5cGUgJ2NoZWNrYm94JyB8ICd0ZXh0J1xuICAgKiBAZGVmYXVsdCAnY2hlY2tib3gnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9uc1N0eWxlKHZhbHVlOiAnY2hlY2tib3gnIHwgJ3RleHQnKSB7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uub3B0aW9uc1N0eWxlID0gdmFsdWUgPz8gJ2NoZWNrYm94JztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBzaG9ydCBoaW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0Li4uJ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QuLi4nO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlYXJjaCBpbnB1dCBlbGVtZW50XG4gICAqIEB0eXBlIGJvb2xlYW4gfCBTZWFyY2hGbiB8ICdleHRlcm5hbCdcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VhcmNoOiAoYm9vbGVhbiB8ICdleHRlcm5hbCcgfCBTZWFyY2hGbikgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsYWJlbCBmb3Igbm8gcmVzdWx0cyB3aGVuIGZpbHRlcmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ25vIGl0ZW1zJ1xuICAgKi9cbiAgQElucHV0KCkgc2VhcmNoTm9SZXN1bHRzTGFiZWw6IHN0cmluZyA9ICdubyBpdGVtcyc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW5pdGlhbCBzZWFyY2ggc3RyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX3NlYXJjaFZhbHVlICE9PSB2YWx1ZS50cmltU3RhcnQoKSkge1xuICAgICAgdGhpcy5fc2VhcmNoVmFsdWUgPSB2YWx1ZS50cmltU3RhcnQoKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLnN1YnRyZWVGb2N1c2VkID8gdHJ1ZSA6IHRoaXMudmlzaWJsZTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKTtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3NlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWFyY2hWYWx1ZSBzdHJpbmcgZm9yIGV4dGVybmFsIGZpbHRlcmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRW5hYmxlcyBzZWxlY3QgYWxsIGJ1dHRvblxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdCBhbGwgYnV0dG9uIGxhYmVsXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0IGFsbCBvcHRpb25zJ1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsTGFiZWw6IHN0cmluZyA9ICdTZWxlY3QgYWxsIG9wdGlvbnMnO1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gdHlwZVxuICAgKiBAdHlwZSAnY291bnRlcicgfCAndGFncycgfCAndGV4dCdcbiAgICogQGRlZmF1bHQgJ3RhZ3MnXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiAnY291bnRlcicgfCAndGFncycgfCAndGV4dCcgPSAndGFncyc7XG5cbiAgLyoqXG4gICAqIENvdW50ZXIgc2VsZWN0aW9uIGxhYmVsIHZhbHVlXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnaXRlbShzKSBzZWxlY3RlZCdcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dDogc3RyaW5nID0gJ2l0ZW0ocykgc2VsZWN0ZWQnO1xuXG4gIC8qKlxuICAgKiBDb3VudGVyIHNlbGVjdGlvbiBsYWJlbCBwbHVyYWwgbWFwIGZvciBJMThuUGx1cmFsUGlwZVxuICAgKiBAdHlwZSBJUGx1cmFsTWFwXG4gICAqIEBkZWZhdWx0IHsgJz0xJzogJ2l0ZW0gc2VsZWN0ZWQnLCAnb3RoZXInOiAnaXRlbXMgc2VsZWN0ZWQnIH1cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcD86IElQbHVyYWxNYXAgPSB7ICc9MSc6ICdpdGVtIHNlbGVjdGVkJywgJ290aGVyJzogJ2l0ZW1zIHNlbGVjdGVkJyB9O1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gICAqIEB0eXBlIHN0cmluZyB8IHN0cmluZ1tdXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbdmFsdWUgPz8gdW5kZWZpbmVkXTtcbiAgICBpZiAodGhpcy5kaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgdGhpcy52YWx1ZSQubmV4dChbLi4ubmV3VmFsdWVdKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgLy8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZCA/PyBbLi4udGhpcy4jdmFsdWVdO1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gWy4uLnZhbHVlXSA6IHZhbHVlPy50b1N0cmluZygpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gICN2YWx1ZTogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogRW1pdHMgdmFsdWVDaGFuZ2VcbiAgICogQHR5cGUgc3RyaW5nIHwgc3RyaW5nW11cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgc3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXN1YWwgdmFsaWRhdGlvbiBmZWVkYmFjay5cbiAgICogQHR5cGUgYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsZXIgZm9yIG9wdGlvbnMgbGlzdC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZpcnR1YWxTY3JvbGxlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmlydHVhbFNjcm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl92aXJ0dWFsU2Nyb2xsZXI7XG4gIH1cblxuICBwcml2YXRlIF92aXJ0dWFsU2Nyb2xsZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQW1vdW50IG9mIHZpc2libGUgb3B0aW9ucywgaWYgc2V0IC0gb3ZlcndyaXRlcyBvcHRpb25zTWF4SGVpZ2h0XG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCA4XG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmlzaWJsZUl0ZW1zKHZhbHVlKSB7XG4gICAgdGhpcy5fdmlzaWJsZUl0ZW1zID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUgfHwgOCk7XG4gICAgdGhpcy5vcHRpb25zTWF4SGVpZ2h0ID0gKCh0aGlzLml0ZW1TaXplICogdGhpcy5fdmlzaWJsZUl0ZW1zKSArIDE2KS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZUl0ZW1zID0gODtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBpdGVtIGluIHRoZSBsaXN0IChpbiBwaXhlbHMpLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1TaXplOiBudW1iZXIgPSA0MDtcblxuICAvKipcbiAgICogTWluIHdpZHRoIG9mIHRoZSBvcHRpb25zIGxpc3QgKGluIHBpeGVscykuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxOTZcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1NaW5XaWR0aDogbnVtYmVyID0gMTk2O1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGRyb3Bkb3duIHNlbGVjdCBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHZpc2libGUgIT09IHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnRvZ2dsZVZpc2libGUodmlzaWJsZSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAvLyB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gIH1cblxuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHZpc2libGVDaGFuZ2VcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgcG9wcGVyIE9wdGlvbnMgb2JqZWN0XG4gICAqIEB0eXBlIFBhcnRpYWw8T3B0aW9ucz5cbiAgICovXG4gIEBJbnB1dCgncG9wcGVyT3B0aW9ucycpIHBvcHBlcmpzT3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBzdHJhdGVneTogJ2ZpeGVkJywgbW9kaWZpZXJzOiBbb2JzZXJ2ZVJlZmVyZW5jZU1vZGlmaWVyLCB7XG4gICAgICBuYW1lOiAnb2Zmc2V0Jywgb3B0aW9uczoge1xuICAgICAgICBvZmZzZXQ6ICgpID0+IHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ3RhZ3MnICYmIHRoaXMub3B0aW9uc1NlbGVjdGVkLnNpemUgPyBbLTIsIDhdIDogWy0xMiwgMTJdXG4gICAgICB9XG4gICAgfV1cbiAgfTtcblxuICBpc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm9wdGlvbnNTZWxlY3RlZC52YWx1ZXMoKV07XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24ubGFiZWwpLmpvaW4oJywgJyk7XG4gIH1cblxuICBnZXQgY291bnRlclRleHQoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0gJHt0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dH1gO1xuICB9XG5cbiAgZ2V0IGNvdW50ZXJUZXh0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXAgPz8gdHlwZW9mIHRoaXMuc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0O1xuICB9O1xuXG4gIHByaXZhdGUgZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgbXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCE6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGRyZW4oTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIG11bHRpU2VsZWN0T3B0aW9uc1ZpZXchOiBRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKCdzY3JvbGxWaWV3cG9ydCcpIHNjcm9sbFZpZXdwb3J0VmlldyE6IFF1ZXJ5TGlzdDxDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ+O1xuICBAVmlld0NoaWxkKCdvcHRpb25zJykgb3B0aW9uc0VsZW1lbnRSZWYhOiBFbGVtZW50UmVmO1xuXG4gIHByb3RlY3RlZCBzY3JvbGxWaWV3cG9ydCE6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBwcm90ZWN0ZWQgdGVtcGxhdGVzOiB7IFtpZDogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9ID0ge307XG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb250ZW50VGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xuXG4gIHByaXZhdGUgZm9jdXNLZXlNYW5hZ2VyITogRm9jdXNLZXlNYW5hZ2VyPE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKSBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bk1lbnUnKSBkcm9wZG93bk1lbnUhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd24hOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25Ub2dnbGUhOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtdWx0aXNlbGVjdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdmb3JtLW11bHRpLXNlbGVjdCc6IHRydWUsXG4gICAgICAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLXRhZ3MnOiB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICd0YWdzJyAmJiB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zaXplID4gMCxcbiAgICAgIFtgZm9ybS1tdWx0aS1zZWxlY3QtJHt0aGlzLnNpemV9YF06ICEhdGhpcy5zaXplLFxuICAgICAgJ2Zvcm0tbXVsdGktc2VsZWN0LXdpdGgtY2xlYW5lcic6IHRoaXMuY2xlYW5lcixcbiAgICAgIHNob3c6IHRoaXMudmlzaWJsZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgJ2lzLXZhbGlkJzogdGhpcy52YWxpZCA9PT0gdHJ1ZSxcbiAgICAgICdpcy1pbnZhbGlkJzogdGhpcy52YWxpZCA9PT0gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlJylcbiAgcHJpdmF0ZSBnZXQgYXJpYU11bHRpU2VsZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgcHJpdmF0ZSBnZXQgYXJpYUV4cGFuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBwcml2YXRlIGdldCB0YWJJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHNldCB0YWJJbmRleCh2YWx1ZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdGFiSW5kZXggPSB0aGlzLmRpc2FibGVkIHx8IHRoaXMuc2VhcmNoID8gLTEgOiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAwO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGFiSW5kZXg6IG51bWJlciB8IG51bGwgPSAtMTtcblxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pIG9uS2V5VXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICBjb25zdCB0YXJnZXRUYWdOYW1lID0gKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU7XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFsnRW50ZXInLCAnU3BhY2UnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmNvZGUpICYmIFt0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRdLmluY2x1ZGVzKCRldmVudC50YXJnZXQpKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnVGFiJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcblxuICAgICAgaWYgKCRldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5zdWJ0cmVlRm9jdXNlZCkge1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcblxuICAgICAgICAgIGlmICh0aGlzLnRhYlRhcmdldCA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8udmFsdWUgPT09IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLnNsaWNlKDApWzBdLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgICAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghJGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/LnZhbHVlID09PSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKS5zbGljZSgtMSlbMF0udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygna2V5Ym9hcmQnLCAnb25LZXlVcCcpO1xuICAgICAgICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbSB8fCB0aGlzLnRhYlRhcmdldCAhPT0gdGFyZ2V0VGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZTtcbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiB0YXJnZXRUYWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyAmJiB0YXJnZXRUYWdOYW1lICE9PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleURvd24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYXZvaWQgc2V0dGluZyBmb2N1cyB0byBvcHRpb24gd2hpbGUgb24gaW5wdXQgZWxlbWVudFxuICAgIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoW3RoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5zZXRGb2N1cygnbW91c2UnLCAnb25DbGljaycpO1xuICB9XG5cbiAgcHVibGljIHZpc2libGVPcHRpb25zID0gc2lnbmFsKGZhbHNlKTtcblxuICBnZXQgc3VidHJlZUZvY3VzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnRyZWVGb2N1c2VkO1xuICB9XG5cbiAgc2V0IHN1YnRyZWVGb2N1c2VkKGZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdWJ0cmVlRm9jdXNlZCA9IHRoaXMuZGlzYWJsZWQgPyBmYWxzZSA6IGZvY3VzZWQ7XG4gICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZvY3VzZWQgPT09IGZhbHNlID8gZmFsc2UgOiB0aGlzLnZpc2libGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG51bGwpO1xuXG4gIHByaXZhdGUgbmF0aXZlU2VsZWN0UmVmITogYW55O1xuXG4gIGZvY3VzT3JpZ2luKG9yaWdpbjogRm9jdXNPcmlnaW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISFvcmlnaW47XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubXVsdGlwbGUpLFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBmb3Igc2luZ2xlIHNlbGVjdCAoIW11bHRpcGxlKVxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdzZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkIChzaW5nbGUpJyk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jb3B0aW9uc1JlYWR5JC5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnZpcnR1YWxTY3JvbGxlciksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgIGRlbGF5KDApLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c0tleU1hbmFnZXIoWy4uLnRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCwgLi4udGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3XSk7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCB9ID0geyAuLi5jaGFuZ2UgfTtcbiAgICAgICAgICBpZiAoYWRkZWQubGVuZ3RoID4gMCAmJiB0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIGRlbGF5KDApLFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLiNvcHRpb25zUmVhZHkkKSxcbiAgICAgICAgdGFwKChbY2hhbmdlLCByZWFkeV0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IHJlbW92ZWQgfSA9IHsgLi4uY2hhbmdlIH07XG4gICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNvcHRpb25zLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkJC5uZXh0KEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQudmFsdWVzKCkpKTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcblxuICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgICAgICAgIHRoaXMudXBkYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuI3ZhbHVlKTtcblxuICAgIHRoaXMudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm9wdGlvbnNBcnJheSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnVzZXJPcHRpb25zQXJyYXkkKSxcbiAgICAgICAgdGFwKChbb3B0aW9ucywgdXNlck9wdGlvbnNdKSA9PiB7XG5cbiAgICAgICAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldChvcHRpb25zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkgfHwgdXNlck9wdGlvbnMuc29tZSgoaXRlbSkgPT4gaXRlbS52aXNpYmxlKSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zZXRSZW5kZXJlZFJhbmdlKHsgc3RhcnQ6IDAsIGVuZDogdGhpcy52aXNpYmxlSXRlbXMgfSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBvcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICBvcHRpb24udmlzaWJsZSA9IGZvdW5kPy52aXNpYmxlID8/IGZhbHNlO1xuICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgICAgICAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuI2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSBjaGFuZ2VzWyd2YWx1ZSddO1xuICAgICAgaWYgKHZhbHVlQ2hhbmdlcy5jdXJyZW50VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcbiAgICB9XG4gIH1cblxuICBtYWtlT3B0aW9ucyhvcHRpb25zOiBJT3B0aW9uW10pIHtcblxuICAgIGlmICh0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyAmJiB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy4jb3B0aW9ucy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIHZhbHVlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLmxhYmVsLFxuICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsID8/IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZSxcbiAgICAgICAgdmlzaWJsZTogdGhpcy5zZWFyY2ggPT09ICdleHRlcm5hbCcgPyB0cnVlIDogb3B0aW9uLmN1c3RvbSAmJiBvcHRpb24uc2VsZWN0ZWQgPyBvcHRpb24udmlzaWJsZSA6IG9wdGlvbi52aXNpYmxlICE9PSBmYWxzZSxcbiAgICAgICAgdGV4dDogb3B0aW9uLnRleHQgPz8gb3B0aW9uLmxhYmVsID8/IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgc2VsZWN0ZWQ6IG9wdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgY3VzdG9tOiBvcHRpb24uY3VzdG9tXG4gICAgICAgIC8vIHNlbGVjdGVkOiB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG9wdGlvbi52YWx1ZSksXG4gICAgICAgIC8vIGlkOiBvcHRpb24uaWRcbiAgICAgIH07XG4gICAgICB0aGlzLiNvcHRpb25zLnNldChrZXksIHsgLi4udmFsdWUgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlck9wdGlvbnModGhpcy5zZWFyY2hWYWx1ZSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zVmlldz8ubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgdGhpcy4jb3B0aW9uc1JlYWR5JC5uZXh0KCk7XG4gIH1cblxuICB1c2VyT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmdldFVzZXJPcHRpb25zKCk7XG5cbiAgLy8gI2VmZmVjdFVzZXJPcHRpb25zID0gZWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAodGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpIHtcbiAgLy8gICAgIHRoaXMudXNlck9wdGlvbnNBcnJheSQubmV4dChBcnJheS5mcm9tKHRoaXMudXNlck9wdGlvbnMoKS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlKSkpO1xuICAvLyAgIH1cbiAgLy8gfSk7XG5cbiAgYWRkVXNlck9wdGlvbigpIHtcbiAgICBpZiAodGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJPcHRpb25zKCkuc29tZShvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4jb3B0aW9ucy5nZXQodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNlck9wdGlvbjogSU9wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIGxhYmVsOiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB0ZXh0OiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICB9O1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICh0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QgfHwgdGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpID8gJycgOiB0aGlzLnNlYXJjaFZhbHVlO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuYWRkVXNlck9wdGlvbih1c2VyT3B0aW9uKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdCh1c2VyT3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMub3B0aW9uc1NlbGVjdGVkLnNldCh1c2VyT3B0aW9uLnZhbHVlLCB1c2VyT3B0aW9uKTtcbiAgICAgIHRoaXMubWFrZU9wdGlvbnMoWy4uLnRoaXMub3B0aW9ucywgLi4udGhpcy51c2VyT3B0aW9ucygpXSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQWxsVXNlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UucmVtb3ZlQWxsVXNlck9wdGlvbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuc2V0VmlydHVhbFNjcm9sbGVyKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzOiBRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+LCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHByZXZpb3VzLnRvQXJyYXkoKS5tYXAob3B0aW9uID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgY29uc3QgY3VyciA9IGN1cnJlbnQudG9BcnJheSgpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLiNvcHRpb25zQ29udGVudCkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKGNoYW5nZXMgPT4ge1xuICAgICAgICAgIHRoaXMuI29wdGlvbnNDb250ZW50ID0gY2hhbmdlcy50b0FycmF5KCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMuc2V0KHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSkpO1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICAgICAgdGhpcy5tYWtlT3B0aW9ucyh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lmxlbmd0aCA+IDAgfHwgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5sZW5ndGggPiAwKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXRoaXMuZGlzYWJsZWQpO1xuXG4gICAgdGhpcy5zZXRMaXN0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdEZvY3VzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChvcHRpb246IE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uICYmIHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlICE9PSBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRhYlRhcmdldCE6IHN0cmluZztcblxuICBwcml2YXRlIG11bHRpc2VsZWN0U3Vic2NyaWJlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpIHtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm11bHRpU2VsZWN0VmlzaWJsZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZpc2libGUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93blZpc2libGUgIT09IHZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2aXNpYmxlKTtcbiAgICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQ/LnNldFJlbmRlcmVkUmFuZ2UoeyBzdGFydDogMCwgZW5kOiB0aGlzLnZpc2libGVJdGVtcyB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgIH0pO1xuXG4gIH1cblxuICBjbGVhckFsbE9wdGlvbnMoJGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpKS5maWx0ZXIob3B0aW9uID0+ICFvcHRpb24uZGlzYWJsZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KC4uLmVuYWJsZWRPcHRpb25zKTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsVXNlck9wdGlvbnMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ2NsZWFyQWxsT3B0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbE9wdGlvbnMoKSB7XG4gICAgY29uc3QgZW5hYmxlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuI29wdGlvbnMudmFsdWVzKCkpLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdCguLi5lbmFibGVkT3B0aW9ucyk7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gIH1cblxuICBoYW5kbGVUYWdSZW1vdmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KHZhbHVlKTtcbiAgICB0aGlzLnNldEZvY3VzKCdwcm9ncmFtJywgJ2hhbmRsZVRhZ1JlbW92ZScpO1xuICB9XG5cbiAgc2V0Rm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJywgbWV0aG9kTmFtZT86IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+KHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPz8gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IHByZXZlbnRTY3JvbGwgPSBvcmlnaW4gPT09ICdwcm9ncmFtJztcbiAgICB0aGlzLmZvY3VzTW9uaXRvcj8uZm9jdXNWaWEoZWxlbWVudCwgb3JpZ2luLCB7IHByZXZlbnRTY3JvbGw6IHByZXZlbnRTY3JvbGwgfSk7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldEZvY3VzJywgb3JpZ2luLCBtZXRob2ROYW1lLCAncHJldmVudFNjcm9sbDonLCBwcmV2ZW50U2Nyb2xsLCBlbGVtZW50LnRhZ05hbWUsIHRoaXMudmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyT3B0aW9ucyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdmFsdWUudG9Mb3dlckNhc2UoKSA/PyAnJztcbiAgICB0aGlzLiNvcHRpb25zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoc2VhcmNoU3RyaW5nID09PSAnJykge1xuICAgICAgICBpdGVtLnZpc2libGUgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2VhcmNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRoaXMuc2VhcmNoKGl0ZW0sIHNlYXJjaFN0cmluZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgodGhpcy5zZWFyY2ggPT09ICdleHRlcm5hbCcgJiYgIWl0ZW0uY3VzdG9tKSB8fCAhc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgIC8vIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udmlzaWJsZSA9IGl0ZW0ubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSA/PyB0cnVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UudXBkYXRlT3B0aW9uc0FycmF5KEFycmF5LmZyb20odGhpcy4jb3B0aW9ucy52YWx1ZXMoKSkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnZpc2libGUpKTtcbiAgICB0aGlzLnVzZXJPcHRpb25zQXJyYXkkLm5leHQoQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY3VzdG9tKSk7XG4gIH1cblxuICBjcmVhdGVOYXRpdmVTZWxlY3QoKSB7XG4gICAgaWYgKCF0aGlzLm5hdGl2ZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChNdWx0aVNlbGVjdE5hdGl2ZVNlbGVjdENvbXBvbmVudCk7XG4gICAgdGhpcy51cGRhdGVOYXRpdmVTZWxlY3QoKTtcbiAgfVxuXG4gIHVwZGF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMubmF0aXZlU2VsZWN0UmVmIHx8ICF0aGlzLm5hdGl2ZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCB7IHNlbGVjdGVkLCB2YWx1ZSwgbGFiZWwgfSA9IGl0ZW1bMV07XG4gICAgICByZXR1cm4geyBzZWxlY3RlZCwgdmFsdWUsIGxhYmVsIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuZm9ybSA9IHRoaXMubmF0aXZlRm9ybUlkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmlkID0gdGhpcy5uYXRpdmVJZDtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5uYW1lID0gdGhpcy5uYXRpdmVOYW1lO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaW5wdXRFbGVtZW50U2l6ZSgpIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCh0aGlzLm9wdGlvbnNTZWxlY3RlZC5zaXplID4gMCB8fCB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdjb3VudGVyJykgJiYgIXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoICsgMikudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2l6ZScpO1xuICAgICAgfVxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2VhcmNoS2V5RG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblxuICAgIGlmIChbJ0VudGVyJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkgJiYgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggJiYgdGhpcy5hbGxvd0NyZWF0ZU9wdGlvbnMpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5hZGRVc2VyT3B0aW9uKCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCB8fCB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnQmFja3NwYWNlJywgJ0RlbGV0ZSddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiAhb3B0aW9uLmRpc2FibGVkKS5wb3AoKTtcbiAgICAgIGlmIChsYXN0KSB7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGxhc3QudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNNb25pdG9yKG1vbml0b3I6IGJvb2xlYW4pIHtcbiAgICBpZiAobW9uaXRvciAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24gPSB0aGlzLmZvY3VzTW9uaXRvcj8ubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYsIHRydWUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIHRvIGF2b2lkIGZvY3VzIGxvc3Qgb24gc3BlZWQgc2Nyb2xsaW5nIHdpdGggdmlydHVhbFNjcm9sbFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yPy5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlT3B0aW9uOiAoRm9jdXNhYmxlT3B0aW9uICYgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZShzY3JvbGxlZEluZGV4OiBudW1iZXIsIHNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcblxuICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydCA9IHNjcm9sbFZpZXdwb3J0O1xuICAgIH1cblxuICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlT3B0aW9uID0gYXZhaWxhYmxlT3B0aW9uc1tzY3JvbGxlZEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IGF2YWlsYWJsZU9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuYWN0aXZlT3B0aW9uPy52YWx1ZSk7XG4gICAgY29uc3Qgb3B0aW9uc0FycmF5ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LnRvQXJyYXkoKTtcblxuICAgIGlmIChzY3JvbGxlZEluZGV4ID4gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUl0ZW0gPSBvcHRpb25zQXJyYXkuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24/LnZhbHVlKTtcbiAgICAgIGlmIChmaXJzdFZpc2libGVJdGVtICYmIHNjcm9sbGVkSW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShmaXJzdFZpc2libGVJdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsZWRJbmRleCArIHRoaXMudmlzaWJsZUl0ZW1zIC0gMiA8PSBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgY29uc3QgbGFzdFZpc2libGVJdGVtID0gb3B0aW9uc0FycmF5LmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKGxhc3RWaXNpYmxlSXRlbSA+IC0xKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdFZpc2libGVJdGVtICsgdGhpcy52aXNpYmxlSXRlbXMgLSAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBvcHRpb246IElPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2Uoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZTtcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgaWYgKHRoaXMuc3VidHJlZUZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlydHVhbFNjcm9sbGVyKCkge1xuXG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgZm9yIHZpcnR1YWxTY3JvbGxlclxuICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG5cbiAgICAvLyBpZiBubyB0ZW1wbGF0ZSBmb3VuZCwgZ2V0IGRlZmF1bHRNdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlIGZyb20gdmlld1xuICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3O1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgZ2V0cyBvdXQgb2Ygb3JkZXIgb24gY2hhbmdlc1xuICAgIC8vIGRvIHNvcnQoKSBhbmQgcmVzZXQoKVxuICAgIGNvbnN0IGluZGV4T2ZPcHRpb24gPSAob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgcmV0dXJuIFsuLi5vcHRpb24uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW5dPy5pbmRleE9mKG9wdGlvbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zQ2hhbmdlJDogT2JzZXJ2YWJsZTxRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+PiA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5jaGFuZ2VzO1xuXG4gICAgY29uc3Qgc29ydGVkT3B0aW9ucyQgPSBvcHRpb25zQ2hhbmdlJC5waXBlKFxuICAgICAgbWFwKG9wdGlvbnMgPT4gb3B0aW9ucy50b0FycmF5KCkpLFxuICAgICAgZmlsdGVyKG9wdGlvbnMgPT4gb3B0aW9ucy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMuc29ydCgoYSwgYikgPT4gaW5kZXhPZk9wdGlvbihhKSAtIGluZGV4T2ZPcHRpb24oYikpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgKTtcblxuICAgIHNvcnRlZE9wdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoc29ydGVkT3B0aW9ucyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQucmVzZXQoc29ydGVkT3B0aW9ucyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2Nyb2xsVmlld3BvcnRWaWV3LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoY2hhbmdlcyA9PiBjaGFuZ2VzLnRvQXJyYXkoKVswXSksXG4gICAgICAgIHRhcCgoc2Nyb2xsVmlld3BvcnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0ID0gc2Nyb2xsVmlld3BvcnQ7XG5cbiAgICAgICAgICAgICAgY29uc3QgY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyID0gdGhpcy5zY3JvbGxWaWV3cG9ydC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudD8uZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgIGlmIChjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBwYXJzZUludChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKSA/PyAnMTJweCcpICogMztcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uUmVjb3JkcykgPT4ge1xuICAgICAgICAgICAgICAgICAgbXV0YXRpb25SZWNvcmRzLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdDLU1VTFRJLVNFTEVDVC1PUFRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IHRoaXMuaXRlbU1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbU1pbldpZHRoID0gd2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2RrVmlydHVhbFNjcm9sbENvbnRlbnRXcmFwcGVyLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuI2Rlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldExpc3RLZXlNYW5hZ2VyKCkge1xuXG4gICAgLy8gcnVuIG9uY2Ugb24gbXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCBmaXJzdCBzZXRcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoY2hhbmdlcykgPT4gdGhpcy52aXJ0dWFsU2Nyb2xsZXIpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzS2V5TWFuYWdlcih0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2V0Rm9jdXNLZXlNYW5hZ2VyKGZvY3VzYWJsZU9wdGlvbnM6IChRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+IHwgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnRbXSkpIHtcblxuICAgIC8vIHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZvY3VzS2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIoZm9jdXNhYmxlT3B0aW9ucylcbiAgICAgIC53aXRoSG9tZUFuZEVuZCgpXG4gICAgICAud2l0aFBhZ2VVcERvd24oKVxuICAgICAgLnNraXBQcmVkaWNhdGUoKG9wdGlvbikgPT4gKG9wdGlvbi5kaXNhYmxlZCB8fCAhb3B0aW9uLnZpc2libGUpKTtcblxuICAgIGlmICghdGhpcy5fdmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKDMwMCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0tleU1hbmFnZXIudGFiT3V0XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIHRhcCgoKSA9PiB7fSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2UgPCAwKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPyB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlT3B0aW9uKSA6IHRoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtO1xuICAgICAgICBjb25zdCBvcHRpb24gPSA8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+dGhpcy5hY3RpdmVPcHRpb247XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLmZvY3VzQ2hhbmdlKG9wdGlvbik7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAvLyBpZiAoIXRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAvLyAgIHRoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgLy8gfVxuICB9XG5cbiAgZ2V0IGZpcnN0Rm9jdXNhYmxlSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5maW5kKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKSA/PyB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZpbmQob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaXJzdEl0ZW1BY3RpdmUoKSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW07XG4gICAgZmlyc3RGb2N1c2FibGVJdGVtID8gdGhpcy5mb2N1c0tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oZmlyc3RGb2N1c2FibGVJdGVtKSA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICB0aGlzLmFjdGl2ZU9wdGlvbiA9IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtID8/IG51bGw7XG4gIH1cblxuICB1cGRhdGVBY3RpdmVJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW08VCBleHRlbmRzIChNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCAmIEZvY3VzYWJsZU9wdGlvbik+KGl0ZW06IFQpOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbTogYW55KSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW0gPz8gaXRlbTtcbiAgICBmaXJzdEZvY3VzYWJsZUl0ZW0gPyB0aGlzLmZvY3VzS2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZUl0ZW0pIDogdGhpcy5mb2N1c0tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxufVxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCJcbiAgICAgICAgICAgIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJtdWx0aXNlbGVjdENsYXNzZXNcIlxuICAgICAgICAgICAgW3BvcHBlck9wdGlvbnNdPVwicG9wcGVyanNPcHRpb25zXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGlja2VyXCI+XG4gIDxkaXYgI2Ryb3Bkb3duVG9nZ2xlPVwiY0Ryb3Bkb3duVG9nZ2xlXCIgW2NhcmV0XT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY0Ryb3Bkb3duVG9nZ2xlPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb25cIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3Rpb25UeXBlID09PSAndGFncydcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihvcHRpb25zU2VsZWN0ZWQkIHwgYXN5bmMpIGFzIG9wdGlvblRhZ3NcIj5cbiAgICAgICAgICA8Yy1tdWx0aS1zZWxlY3QtdGFnXG4gICAgICAgICAgICAocmVtb3ZlKT1cImhhbmRsZVRhZ1JlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uVGFnczsgaW5kZXggYXMgaVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC10YWdcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDwvYy1tdWx0aS1zZWxlY3QtdGFnPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3RleHQnICYmICEhc2VsZWN0ZWRPcHRpb25zVGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXNlYXJjaFwiPnt7IHNlbGVjdGVkT3B0aW9uc1RleHQgfX08L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGlvblR5cGUgPT09ICdjb3VudGVyJ1wiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvdW50ZXJUZXh0VHlwZSA9PT0gJ3N0cmluZyc7IGVsc2UgcGx1cmFsTWFwXCI+e3sgY291bnRlclRleHQgfX08L3NwYW4+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1cmFsTWFwPlxuICAgICAgICAgIDxzcGFuPnt7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH19IHt7IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfCBpMThuUGx1cmFsOiAoc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0UGx1cmFsTWFwID8/IHsgb3RoZXI6IHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCA/PyAnKycgfSkgfX08L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPCEtLSAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2VhcmNoICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgc2VsZWN0aW9uVHlwZSAhPT0gJ2NvdW50ZXInXCI+LS0+XG4gICAgICA8IS0tICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXNlYXJjaFwiPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPi0tPlxuICAgICAgPCEtLSAgICAgIDwvbmctdGVtcGxhdGU+LS0+XG4gICAgPC9kaXY+XG5cbiAgICA8aW5wdXRcbiAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50KVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJvcHRpb25zU2VsZWN0ZWQuc2l6ZSA9PT0gMCAmJiBzZWxlY3Rpb25UeXBlICE9PSAnY291bnRlcicgPyBwbGFjZWhvbGRlciA6IG51bGxcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFzZWFyY2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoJzogdHJ1ZSwgZGlzYWJsZWQ6IChkaXNhYmxlZCB8fCAhc2VhcmNoKSB9XCJcbiAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgY011bHRpU2VsZWN0U2VhcmNoXG4gICAgICBzaXplPVwiM1wiXG4gICAgICB0YWJpbmRleD1cInt7IGRpc2FibGVkID8gLTEgOiAwIH19XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA+XG5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwiY2xlYXJBbGxPcHRpb25zKCRldmVudClcIlxuICAgICAgKm5nSWY9XCJjbGVhbmVyICYmIG9wdGlvbnNTZWxlY3RlZC5zaXplID4gMCAmJiAhZGlzYWJsZWRcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFpc0Ryb3Bkb3duVmlzaWJsZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgYWxsXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLWNsZWFuZXJcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiAjZHJvcGRvd25NZW51PVwiY0Ryb3Bkb3duTWVudVwiICpuZ0lmPVwiIWRpc2FibGVkXCIgW3Zpc2libGVdPVwiZHJvcGRvd24udmlzaWJsZVwiIGNEcm9wZG93bk1lbnU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIih2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbE9wdGlvbnMoKVwiXG4gICAgICAgICpuZ0lmPVwic2VsZWN0QWxsICYmIG11bHRpcGxlICYmICF2aXJ0dWFsU2Nyb2xsZXJcIlxuICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWFsbFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgPlxuICAgICAgICB7eyBzZWxlY3RBbGxMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZFbHNlXT1cIm9wdGlvbnNFbXB0eVwiIFtuZ0lmXT1cIih2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgIHx8IGlzTG9hZGluZygpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmlydHVhbFNjcm9sbGVyID8gbXVsdGlzZWxlY3RWaXJ0dWFsU2Nyb2xsZXIgOiBtdWx0aXNlbGVjdE9wdGlvbnNEaXZcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNvcHRpb25zRW1wdHk+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucy1lbXB0eVwiPnt7IHNlYXJjaE5vUmVzdWx0c0xhYmVsIH19PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNMb2FkaW5nKClcIj5cbiAgICAgIDxjLWVsZW1lbnQtY292ZXIgW25nU3R5bGVdPVwieydib3JkZXItcmFkaXVzJzogJzZweCcsICd6LWluZGV4JzogMn1cIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9jLWRyb3Bkb3duPlxuXG48bmctdGVtcGxhdGUgI211bHRpc2VsZWN0VmlydHVhbFNjcm9sbGVyPlxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgI3Njcm9sbFZpZXdwb3J0XG4gICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwiaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZSgkZXZlbnQsIHNjcm9sbFZpZXdwb3J0KVwiXG4gICAgKm5nSWY9XCIob3B0aW9uc0FycmF5JCB8IGFzeW5jKSBhcyBvcHRpb25zQXJyYXlcIlxuICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnaGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgJ21heEhlaWdodC5weCc6IG9wdGlvbnNNYXhIZWlnaHQsICdtaW5XaWR0aC5weCc6IGl0ZW1NaW5XaWR0aCA/PyAxOTYsIG92ZXJmbG93WDogJ2hpZGRlbicgfSA6IHsgJ21pbldpZHRoLnB4JzogaXRlbU1pbldpZHRoID8/IDE5Niwgb3ZlcmZsb3dYOiAnaGlkZGVuJ31cIlxuICAgIG1heEJ1ZmZlclB4PVwie3tpdGVtU2l6ZSAqIHZpc2libGVJdGVtc319XCJcbiAgICBtaW5CdWZmZXJQeD1cInt7aXRlbVNpemUgKiB2aXNpYmxlSXRlbXN9fVwiXG4gICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1vcHRpb25zXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICNjZGtWaXJ0dWFsRm9yXG4gICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc0FycmF5OyB0cmFja0J5OiB0cmFja0J5Rm47IHRlbXBsYXRlQ2FjaGVTaXplOiAwOyBldmVuIGFzIGV2ZW47IG9kZCBhcyBvZGQ7IGluZGV4IGFzIGluZGV4OyBjb3VudCBhcyBjb3VudDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdDtcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSB8fCBkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgLz5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlzZWxlY3RPcHRpb25zRGl2PlxuICA8ZGl2XG4gICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnbWF4SGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgb3ZlcmZsb3dZOiAnc2Nyb2xsJyB9IDoge31cIlxuICAgIFtjbGFzc109XCJ7J2Zvcm0tbXVsdGktc2VsZWN0LW9wdGlvbnMnOiB2aXNpYmxlT3B0aW9ucygpfVwiXG4gID5cbiAgICA8bmctY29udGVudCAvPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlck9wdGlvbnNUZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICA8Yy1tdWx0aS1zZWxlY3Qtb3B0aW9uXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgW3RleHRdPVwib3B0aW9uLnRleHRcIlxuICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgIFt2aXNpYmxlXT1cIm9wdGlvbi52aXNpYmxlXCJcbiAgPlxuICAgIHt7b3B0aW9uLnRleHR9fVxuICA8L2MtbXVsdGktc2VsZWN0LW9wdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXNlck9wdGlvbnNUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdXNlck9wdGlvbnNBcnJheSQgfCBhc3luYzsgZXZlbiBhcyBldmVuOyBvZGQgYXMgb2RkOyBpbmRleCBhcyBpbmRleDsgY291bnQgYXMgY291bnQ7IGZpcnN0IGFzIGZpcnN0OyBsYXN0IGFzIGxhc3Q7XCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSB8fCBkZWZhdWx0TXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gIC8+XG48L25nLXRlbXBsYXRlPlxuIl19