@fundamental-ngx/core 0.46.2-rc.12 → 0.46.2-rc.13

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 (244) hide show
  1. package/esm2022/action-bar/action-bar.component.mjs +2 -2
  2. package/esm2022/action-sheet/action-sheet.component.mjs +3 -3
  3. package/esm2022/avatar/avatar.component.mjs +3 -3
  4. package/esm2022/avatar-group/avatar-group.component.mjs +3 -3
  5. package/esm2022/bar/bar.component.mjs +2 -2
  6. package/esm2022/breadcrumb/breadcrumb.component.mjs +3 -3
  7. package/esm2022/busy-indicator/busy-indicator.component.mjs +3 -3
  8. package/esm2022/button/button.component.mjs +3 -3
  9. package/esm2022/calendar/calendar.component.mjs +3 -3
  10. package/esm2022/card/card.component.mjs +3 -3
  11. package/esm2022/carousel/carousel.component.mjs +3 -3
  12. package/esm2022/checkbox/checkbox/checkbox.component.mjs +3 -3
  13. package/esm2022/dialog/dialog.component.mjs +3 -3
  14. package/esm2022/dynamic-page/dynamic-page.component.mjs +3 -3
  15. package/esm2022/dynamic-side-content/dynamic-side-content.component.mjs +3 -3
  16. package/esm2022/facets/facet/facet.component.mjs +3 -3
  17. package/esm2022/feed-input/feed-input.component.mjs +2 -2
  18. package/esm2022/feed-list-item/components/list/feed-list.component.mjs +2 -2
  19. package/esm2022/file-uploader/file-uploader.component.mjs +3 -3
  20. package/esm2022/fixed-card-layout/fixed-card-layout.component.mjs +3 -3
  21. package/esm2022/flexible-column-layout/flexible-column-layout.component.mjs +3 -3
  22. package/esm2022/form/fieldset/fieldset.component.mjs +2 -2
  23. package/esm2022/form/form-control/form-control.component.mjs +3 -3
  24. package/esm2022/form/form-group/form-group.component.mjs +2 -2
  25. package/esm2022/form/form-header/form-header.component.mjs +2 -2
  26. package/esm2022/form/form-item/form-item.component.mjs +2 -2
  27. package/esm2022/form/form-label/form-label.component.mjs +3 -3
  28. package/esm2022/form/form-message/form-message.component.mjs +2 -2
  29. package/esm2022/generic-tag/generic-tag.component.mjs +3 -3
  30. package/esm2022/grid-list/components/grid-list/grid-list.component.mjs +2 -2
  31. package/esm2022/icon/icon.component.mjs +2 -2
  32. package/esm2022/illustrated-message/illustrated-message.component.mjs +3 -3
  33. package/esm2022/info-label/info-label.component.mjs +3 -3
  34. package/esm2022/input-group/input-group.component.mjs +3 -3
  35. package/esm2022/layout-grid/layout-grid.component.mjs +3 -3
  36. package/esm2022/layout-panel/layout-panel.component.mjs +2 -2
  37. package/esm2022/link/link.component.mjs +3 -3
  38. package/esm2022/list/list-navigation-item/list-navigation-item.component.mjs +3 -3
  39. package/esm2022/list/list.component.mjs +2 -2
  40. package/esm2022/menu/menu.component.mjs +2 -2
  41. package/esm2022/message-box/message-box.component.mjs +2 -2
  42. package/esm2022/message-page/message-page.component.mjs +3 -3
  43. package/esm2022/message-strip/message-strip.component.mjs +3 -3
  44. package/esm2022/message-toast/message-toast.component.mjs +3 -3
  45. package/esm2022/micro-process-flow/components/micro-process-flow/micro-process-flow.component.mjs +3 -3
  46. package/esm2022/multi-combobox/multi-combobox.component.mjs +3 -3
  47. package/esm2022/notification/notification/notification.component.mjs +2 -2
  48. package/esm2022/object-identifier/object-identifier.component.mjs +3 -3
  49. package/esm2022/object-marker/object-marker.component.mjs +3 -3
  50. package/esm2022/object-number/object-number.component.mjs +3 -3
  51. package/esm2022/object-status/object-status.component.mjs +3 -3
  52. package/esm2022/pagination/pagination.component.mjs +3 -3
  53. package/esm2022/panel/panel.component.mjs +3 -3
  54. package/esm2022/popover/popover-body/popover-body.component.mjs +3 -3
  55. package/esm2022/product-switch/product-switch-body/product-switch-body.component.mjs +3 -3
  56. package/esm2022/progress-indicator/progress-indicator.component.mjs +3 -3
  57. package/esm2022/quick-view/quick-view/quick-view.component.mjs +2 -2
  58. package/esm2022/radio/radio-button/radio-button.component.mjs +3 -3
  59. package/esm2022/rating-indicator/components/rating-indicator.component.mjs +3 -3
  60. package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +3 -3
  61. package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +2 -2
  62. package/esm2022/segmented-button/segmented-button.component.mjs +2 -2
  63. package/esm2022/select/select.component.mjs +3 -3
  64. package/esm2022/shellbar/shellbar.component.mjs +3 -3
  65. package/esm2022/side-navigation/side-navigation.component.mjs +3 -3
  66. package/esm2022/skeleton/components/skeleton.component.mjs +3 -3
  67. package/esm2022/slider/slider.component.mjs +3 -3
  68. package/esm2022/split-button/split-button.component.mjs +3 -3
  69. package/esm2022/splitter/splitter.component.mjs +2 -2
  70. package/esm2022/status-indicator/status-indicator.component.mjs +3 -3
  71. package/esm2022/step-input/step-input.component.mjs +3 -3
  72. package/esm2022/switch/switch.component.mjs +3 -3
  73. package/esm2022/table/table-wrapper.component.mjs +2 -2
  74. package/esm2022/table/table.component.mjs +2 -2
  75. package/esm2022/tabs/tab-list.component.mjs +3 -3
  76. package/esm2022/tabs/tab-nav/tab-nav.component.mjs +2 -2
  77. package/esm2022/text/text.component.mjs +3 -3
  78. package/esm2022/tile/tile.component.mjs +3 -3
  79. package/esm2022/time/time.component.mjs +3 -3
  80. package/esm2022/title/title.component.mjs +2 -2
  81. package/esm2022/token/token.component.mjs +3 -3
  82. package/esm2022/token/tokenizer.component.mjs +3 -3
  83. package/esm2022/toolbar/toolbar.component.mjs +3 -3
  84. package/esm2022/tree/tree.component.mjs +3 -3
  85. package/esm2022/upload-collection/upload-collection.component.mjs +3 -3
  86. package/esm2022/vertical-navigation/vertical-navigation-main-navigation.component.mjs +3 -3
  87. package/esm2022/vertical-navigation/vertical-navigation.component.mjs +3 -3
  88. package/esm2022/wizard/wizard.component.mjs +3 -3
  89. package/fesm2022/fundamental-ngx-core-action-bar.mjs +2 -2
  90. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-action-sheet.mjs +2 -2
  92. package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-avatar-group.mjs +2 -2
  94. package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
  96. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-bar.mjs +2 -2
  98. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +2 -2
  100. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +2 -2
  102. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-button.mjs +2 -2
  104. package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-calendar.mjs +2 -2
  106. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-card.mjs +2 -2
  108. package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-carousel.mjs +2 -2
  110. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-checkbox.mjs +2 -2
  112. package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-dialog.mjs +2 -2
  114. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +2 -2
  116. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
  118. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-facets.mjs +2 -2
  120. package/fesm2022/fundamental-ngx-core-facets.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-feed-input.mjs +2 -2
  122. package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +2 -2
  124. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-file-uploader.mjs +2 -2
  126. package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  128. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
  130. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-form.mjs +14 -14
  132. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-generic-tag.mjs +2 -2
  134. package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-grid-list.mjs +2 -2
  136. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-icon.mjs +2 -2
  138. package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +2 -2
  140. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-info-label.mjs +2 -2
  142. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-input-group.mjs +2 -2
  144. package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-layout-grid.mjs +2 -2
  146. package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-layout-panel.mjs +2 -2
  148. package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
  150. package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-list.mjs +4 -4
  152. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-menu.mjs +2 -2
  154. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-message-box.mjs +2 -2
  156. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-message-page.mjs +2 -2
  158. package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-message-strip.mjs +2 -2
  160. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-message-toast.mjs +2 -2
  162. package/fesm2022/fundamental-ngx-core-message-toast.mjs.map +1 -1
  163. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +2 -2
  164. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  165. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +2 -2
  166. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  167. package/fesm2022/fundamental-ngx-core-notification.mjs +2 -2
  168. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  169. package/fesm2022/fundamental-ngx-core-object-identifier.mjs +2 -2
  170. package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
  171. package/fesm2022/fundamental-ngx-core-object-marker.mjs +2 -2
  172. package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
  173. package/fesm2022/fundamental-ngx-core-object-number.mjs +2 -2
  174. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  175. package/fesm2022/fundamental-ngx-core-object-status.mjs +2 -2
  176. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  177. package/fesm2022/fundamental-ngx-core-pagination.mjs +2 -2
  178. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  179. package/fesm2022/fundamental-ngx-core-panel.mjs +2 -2
  180. package/fesm2022/fundamental-ngx-core-panel.mjs.map +1 -1
  181. package/fesm2022/fundamental-ngx-core-popover.mjs +2 -2
  182. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  183. package/fesm2022/fundamental-ngx-core-product-switch.mjs +2 -2
  184. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  185. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +2 -2
  186. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  187. package/fesm2022/fundamental-ngx-core-quick-view.mjs +2 -2
  188. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  189. package/fesm2022/fundamental-ngx-core-radio.mjs +2 -2
  190. package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
  191. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +2 -2
  192. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  193. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
  194. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  195. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +2 -2
  196. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  197. package/fesm2022/fundamental-ngx-core-select.mjs +2 -2
  198. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  199. package/fesm2022/fundamental-ngx-core-shellbar.mjs +2 -2
  200. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  201. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +2 -2
  202. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  203. package/fesm2022/fundamental-ngx-core-skeleton.mjs +2 -2
  204. package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
  205. package/fesm2022/fundamental-ngx-core-slider.mjs +2 -2
  206. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  207. package/fesm2022/fundamental-ngx-core-split-button.mjs +2 -2
  208. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  209. package/fesm2022/fundamental-ngx-core-splitter.mjs +2 -2
  210. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  211. package/fesm2022/fundamental-ngx-core-status-indicator.mjs +2 -2
  212. package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  213. package/fesm2022/fundamental-ngx-core-step-input.mjs +2 -2
  214. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  215. package/fesm2022/fundamental-ngx-core-switch.mjs +2 -2
  216. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  217. package/fesm2022/fundamental-ngx-core-table.mjs +4 -4
  218. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  219. package/fesm2022/fundamental-ngx-core-tabs.mjs +4 -4
  220. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  221. package/fesm2022/fundamental-ngx-core-text.mjs +2 -2
  222. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  223. package/fesm2022/fundamental-ngx-core-tile.mjs +2 -2
  224. package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
  225. package/fesm2022/fundamental-ngx-core-time.mjs +2 -2
  226. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  227. package/fesm2022/fundamental-ngx-core-title.mjs +2 -2
  228. package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
  229. package/fesm2022/fundamental-ngx-core-token.mjs +4 -4
  230. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  231. package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
  232. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  233. package/fesm2022/fundamental-ngx-core-tree.mjs +2 -2
  234. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  235. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +2 -2
  236. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  237. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +4 -4
  238. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  239. package/fesm2022/fundamental-ngx-core-wizard.mjs +2 -2
  240. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  241. package/fundamental-ngx-core-v0.46.2-rc.13.tgz +0 -0
  242. package/package.json +4 -4
  243. package/schematics/add-dependencies/index.js +6 -6
  244. package/fundamental-ngx-core-v0.46.2-rc.12.tgz +0 -0
@@ -596,13 +596,13 @@ export class CarouselComponent {
596
596
  return slides;
597
597
  }
598
598
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.CarouselService }, { token: i0.NgZone }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
599
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CarouselComponent, isStandalone: true, selector: "fd-carousel", inputs: { id: "id", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", pageIndicatorsOrientation: "pageIndicatorsOrientation", height: "height", width: "width", loop: "loop", navigation: "navigation", navigatorInPageIndicator: "navigatorInPageIndicator", numericIndicator: "numericIndicator", pageIndicatorContainer: "pageIndicatorContainer", pageIndicator: "pageIndicator", resourceStrings: "resourceStrings", slideTransitionDuration: "slideTransitionDuration", swipeEnabled: "swipeEnabled", vertical: "vertical", noPaginationContainerBorder: "noPaginationContainerBorder", contentBackground: "contentBackground", pageIndicatorBackground: "pageIndicatorBackground", visibleSlidesCount: "visibleSlidesCount" }, outputs: { slideChange: "slideChange" }, host: { listeners: { "keydown": "handleKeyboardEvent($event)" }, properties: { "style.width": "width", "attr.id": "this.id" } }, providers: [CarouselService], queries: [{ propertyName: "slides", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: "slideContainer", first: true, predicate: ["slideContainer"], descendants: true }, { propertyName: "carouselContainer", first: true, predicate: ["carouselContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [ngClass]=\"'fd-carousel__content--' + contentBackground\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div [style.display]=\"'none'\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div\n class=\"fd-carousel__page-indicator-container\"\n [class.fd-carousel__page-indicator-container--no-border]=\"noPaginationContainerBorder\"\n [ngClass]=\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--left]=\"!vertical\"\n [class.fd-carousel__button--up]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--right]=\"!vertical\"\n [class.fd-carousel__button--down]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.30.3-rc.2\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;box-shadow:var(--sapContent_Shadow1);margin:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{-webkit-transform:translateY(-50%);top:50%;transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{-webkit-transform:translateX(-50%);left:50%;transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:0 .25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;display:var(--fdCarousel_Button_Display);height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
599
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CarouselComponent, isStandalone: true, selector: "fd-carousel", inputs: { id: "id", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", pageIndicatorsOrientation: "pageIndicatorsOrientation", height: "height", width: "width", loop: "loop", navigation: "navigation", navigatorInPageIndicator: "navigatorInPageIndicator", numericIndicator: "numericIndicator", pageIndicatorContainer: "pageIndicatorContainer", pageIndicator: "pageIndicator", resourceStrings: "resourceStrings", slideTransitionDuration: "slideTransitionDuration", swipeEnabled: "swipeEnabled", vertical: "vertical", noPaginationContainerBorder: "noPaginationContainerBorder", contentBackground: "contentBackground", pageIndicatorBackground: "pageIndicatorBackground", visibleSlidesCount: "visibleSlidesCount" }, outputs: { slideChange: "slideChange" }, host: { listeners: { "keydown": "handleKeyboardEvent($event)" }, properties: { "style.width": "width", "attr.id": "this.id" } }, providers: [CarouselService], queries: [{ propertyName: "slides", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: "slideContainer", first: true, predicate: ["slideContainer"], descendants: true }, { propertyName: "carouselContainer", first: true, predicate: ["carouselContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [ngClass]=\"'fd-carousel__content--' + contentBackground\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div [style.display]=\"'none'\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div\n class=\"fd-carousel__page-indicator-container\"\n [class.fd-carousel__page-indicator-container--no-border]=\"noPaginationContainerBorder\"\n [ngClass]=\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--left]=\"!vertical\"\n [class.fd-carousel__button--up]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--right]=\"!vertical\"\n [class.fd-carousel__button--down]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;box-shadow:var(--sapContent_Shadow1);margin:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{-webkit-transform:translateY(-50%);top:50%;transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{-webkit-transform:translateX(-50%);left:50%;transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:0 .25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;display:var(--fdCarousel_Button_Display);height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
600
600
  }
601
601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CarouselComponent, decorators: [{
602
602
  type: Component,
603
603
  args: [{ selector: 'fd-carousel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CarouselService], host: {
604
604
  '[style.width]': 'width'
605
- }, standalone: true, imports: [NgIf, NgTemplateOutlet, NgClass, NgFor, ButtonComponent, FdTranslatePipe], template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [ngClass]=\"'fd-carousel__content--' + contentBackground\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div [style.display]=\"'none'\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div\n class=\"fd-carousel__page-indicator-container\"\n [class.fd-carousel__page-indicator-container--no-border]=\"noPaginationContainerBorder\"\n [ngClass]=\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--left]=\"!vertical\"\n [class.fd-carousel__button--up]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--right]=\"!vertical\"\n [class.fd-carousel__button--down]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.30.3-rc.2\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;box-shadow:var(--sapContent_Shadow1);margin:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{-webkit-transform:translateY(-50%);top:50%;transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{-webkit-transform:translateX(-50%);left:50%;transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:0 .25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;display:var(--fdCarousel_Button_Display);height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n"] }]
605
+ }, standalone: true, imports: [NgIf, NgTemplateOutlet, NgClass, NgFor, ButtonComponent, FdTranslatePipe], template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [ngClass]=\"'fd-carousel__content--' + contentBackground\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div [style.display]=\"'none'\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div\n class=\"fd-carousel__page-indicator-container\"\n [class.fd-carousel__page-indicator-container--no-border]=\"noPaginationContainerBorder\"\n [ngClass]=\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--left]=\"!vertical\"\n [class.fd-carousel__button--up]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--right]=\"!vertical\"\n [class.fd-carousel__button--down]=\"vertical\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;box-shadow:var(--sapContent_Shadow1);margin:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{-webkit-transform:translateY(-50%);top:50%;transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{-webkit-transform:translateX(-50%);left:50%;transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:0 .25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;display:var(--fdCarousel_Button_Display);height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n"] }]
606
606
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.CarouselService }, { type: i0.NgZone }, { type: i2.RtlService, decorators: [{
607
607
  type: Optional
608
608
  }] }]; }, propDecorators: { id: [{
@@ -667,4 +667,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
667
667
  type: HostListener,
668
668
  args: ['keydown', ['$event']]
669
669
  }] } });
670
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFJSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFB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LEtBQUs7Z0JBS04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFRRixlQUFlO3NCQURsQixLQUFLO2dCQWNOLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLDJCQUEyQjtzQkFEMUIsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQUtGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFZRyxXQUFXO3NCQURuQixNQUFNO2dCQU9QLE1BQU07c0JBSEwsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRTt3QkFDcEMsV0FBVyxFQUFFLElBQUk7cUJBQ3BCO2dCQUtELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBOEQ5QixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlLCByZXNpemVPYnNlcnZhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhcm91c2VsSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY2Fyb3VzZWwtaXRlbS9jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJvdXNlbENvbmZpZywgQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlLCBDYXJvdXNlbFNlcnZpY2UsIFBhbkVuZE91dHB1dCB9IGZyb20gJy4vY2Fyb3VzZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOLCBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi9pMThuL2Nhcm91c2VsLXJlc291cmNlcyc7XG5cbi8qKiBQYWdlIGxpbWl0IHRvIHN3aXRjaCB0byBudW1lcmljYWwgaW5kaWNhdG9yICovXG5jb25zdCBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUID0gODtcbmV4cG9ydCB0eXBlIFBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPSAnYm90dG9tJyB8ICd0b3AnO1xuXG5leHBvcnQgdHlwZSBDYXJvdXNlbEJhY2tncm91bmRPcHRpb25zID0gJ3RyYW5zbHVjZW50JyB8ICd0cmFuc3BhcmVudCcgfCAnc29saWQnO1xuXG5leHBvcnQgZW51bSBTbGlkZURpcmVjdGlvbiB7XG4gICAgTm9uZSxcbiAgICBORVhULFxuICAgIFBSRVZJT1VTXG59XG5leHBvcnQgaW50ZXJmYWNlIEZpdHRpbmdTbGlkZXNBbmRXaWR0aCB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBzbGlkZXM6IG51bWJlcjtcbn1cbmxldCBjYXJvdXNlbENvdW50ZXIgPSAwO1xuXG5jbGFzcyBDYXJvdXNlbEFjdGl2ZVNsaWRlcyB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGFjdGl2ZUl0ZW1zOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSwgcHVibGljIHJlYWRvbmx5IHNsaWRlRGlyZWN0aW9uOiBzdHJpbmcpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0Nhcm91c2VsU2VydmljZV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW3N0eWxlLndpZHRoXSc6ICd3aWR0aCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIE5nRm9yLCBCdXR0b25Db21wb25lbnQsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIElEIGZvciB0aGUgQ2Fyb3VzZWwuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gYGZkLWNhcm91c2VsLSR7Y2Fyb3VzZWxDb3VudGVyKyt9YDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWwgYXR0cmlidXRlIGZvciBjYXJvdXNlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsID0gbnVsbDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIHBvc2l0aW9uIG9mIHBhZ2UgaW5kaWNhdG9yIGNvbnRhaW5lci4gRGVmYXVsdCBwb3NpdGlvbiBpcyBib3R0b20uICovXG4gICAgQElucHV0KClcbiAgICBwYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uOiBQYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID0gJ2JvdHRvbSc7XG5cbiAgICAvKiogSGVpZ2h0IGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqIFdpZHRoIGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoID0gJzEwMCUnO1xuXG4gICAgLyoqIElmIGNhcm91c2VsIGlzIGluIGNpcmN1bGFyIGxvb3AgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvb3AgPSBmYWxzZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBuYXZpZ2F0aW9uIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogU2hvdyBuYXZpZ2F0aW9uIGJ1dHRvbiBpbiBwYWdlIGluZGljYXRvciBjb250YWluZXIgb3IgaW5zaWRlIGNvbnRlbnQuIERlZmF1bHQgaXMgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyIG9uIHRydWUgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRvckluUGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKiogQ29udmVydCB0byBOdW1lcmljIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgQElucHV0KClcbiAgICBudW1lcmljSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckNvbnRhaW5lciA9IHRydWU7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3IgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHNsaWRpbmcgZHVyYXRpb24gaW4gbWlsbGllIHNlY29uZHMuIERlZmF1bHQgaXMgMTUwICovXG4gICAgQElucHV0KClcbiAgICBzbGlkZVRyYW5zaXRpb25EdXJhdGlvbiA9IDE1MDtcblxuICAgIC8qKiBJcyBzd2lwZSBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBzd2lwZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqIElzIGNhcm91c2VsIGlzIHZlcnRpY2FsLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGhpZGUgdG9wIGJvcmRlciBvZiB0aGUgUGFnaW5hdGlvbiBDb250YWluZXIuICovXG4gICAgQElucHV0KClcbiAgICBub1BhZ2luYXRpb25Db250YWluZXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBCYWNrZ3JvdW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb250ZW50IGNvbnRhaW5lci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRlbnRCYWNrZ3JvdW5kOiBDYXJvdXNlbEJhY2tncm91bmRPcHRpb25zID0gJ3RyYW5zbHVjZW50JztcblxuICAgIC8qKiBCYWNrZ3JvdW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBQYWdpbmF0aW9uIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckJhY2tncm91bmQ6IENhcm91c2VsQmFja2dyb3VuZE9wdGlvbnMgPSAnc29saWQnO1xuXG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyB0byBiZSB2aXNpYmxlIGF0IGEgdGltZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGVTbGlkZXNDb3VudCh2YWx1ZTogbnVtYmVyIHwgJ2F1dG8nKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gdGhpcy5fZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgZ2V0IHZpc2libGVTbGlkZXNDb3VudCgpOiBudW1iZXIgfCAnYXV0bycge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSB0cmFuc2l0aW9uIGhhcyBoYXBwZW5lZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNsaWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJvdXNlbEFjdGl2ZVNsaWRlcz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihDYXJvdXNlbEl0ZW1Db21wb25lbnQsIHtcbiAgICAgICAgZGVzY2VuZGFudHM6IHRydWVcbiAgICB9KVxuICAgIHNsaWRlczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NsaWRlQ29udGFpbmVyJylcbiAgICBzbGlkZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBDYXJvdXNlbCBjb250YWluZXIgZWxlbWVudC4gKi9cbiAgICBAVmlld0NoaWxkKCdjYXJvdXNlbENvbnRhaW5lcicpXG4gICAgY2Fyb3VzZWxDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBTdGFydCBpbmRleCBvZiBjdXJyZW50bHkgYWN0aXZlIGl0ZW1zICovXG4gICAgY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBydGwgc2VydmljZSAqL1xuICAgIGRpcjogRGlyZWN0aW9uID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiBNYWtlIGxlZnQgbmF2aWdhdGlvbiBidXR0b24gZGlzYWJsZWQgKi9cbiAgICBsZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIE1ha2UgcmlnaHQgbmF2aWdhdGlvbiBidXR0b24gZGlzYWJsZWQgKi9cbiAgICByaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBGYWtlIGFycmF5IGZvciBjb3VudGluZyBudW1iZXIgb2YgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBwYWdlSW5kaWNhdG9yc0NvdW50QXJyYXk6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zbGlkZXNXcmFwcGVyU2l6ZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY29udGVudFNpemVQeCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2xpZGVzV3JhcHBlclNpemUgPyBgJHt0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZX1weGAgOiB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZVNsaWRlc0NvdW50OiBudW1iZXIgfCAnYXV0bycgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBDYXJvdXNlbENvbmZpZyA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZXNDb3B5OiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZVN3aXBlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Fyb3VzZWxTZXJ2aWNlOiBDYXJvdXNlbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XXSkgfHxcbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbVVBfQVJST1csIERPV05fQVJST1ddKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNSdGwoKSA/IHRoaXMubmV4dCgpIDogdGhpcy5wcmV2aW91cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1J0bCgpID8gdGhpcy5wcmV2aW91cygpIDogdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxDb250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9SdGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmlzaWJsZVNsaWRlc0NvdW50ICYmIHRoaXMuc2xpZGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShTbGlkZURpcmVjdGlvbi5Ob25lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBPbiBjYXJvdXNlbCBsb2FkLCBkaXNwbGF5IGZpcnN0IHNsaWRlICsgbnVtYmVyIG9mIHNsaWRlIHZpc2libGVcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHBhZ2luYXRpb24gZGlzcGxheSB0byBudW1lcmljLCBpZiBpdGVtIGNvdW50IGlzIG1vcmUgdGhhbiA4XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUKSB7XG4gICAgICAgICAgICB0aGlzLm51bWVyaWNJbmRpY2F0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgc3dpcGUgd2hlbiB0aGVyZSBpcyBubyBjYXJvdXNlbCBpdGVtXG4gICAgICAgICAgICB0aGlzLnN3aXBlRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBLZWVwIGNvcHkgb2Ygb3JpZ2luYWwgc2xpZGUgYXJyYXksIGZvciBpbmRpY2F0b3IgcHVycG9zZS5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBsb29wZWQgY2Fyb3VzZWwsIG9yaWdpbmFsIHNsaWRlcyBhcnJheSBjaGFuZ2VzLlxuICAgICAgICB0aGlzLl9zbGlkZXNDb3B5ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGR5bmFtaWMgdXBkYXRlIG9mIHNsaWRlc1xuICAgICAgICB0aGlzLnNsaWRlcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25TbGlkZVVwZGF0ZXMoKSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaW5pdGlhbGlzZSh0aGlzLl9jb25maWcsIHRoaXMuc2xpZGVzLCB0aGlzLnNsaWRlQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICB0aGlzLl9yZXNpemVDb250ZW50Q29udGFpbmVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCAmJiB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCAhPT0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnVwZGF0ZUNvbmZpZyh0aGlzLl9jb25maWcpO1xuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgKHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA+IDAgfHwgdGhpcy5udW1lcmljSW5kaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBnZXRQYWdlSW5kaWNhdG9yTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyAxfSAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX29mfSAke1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoXG4gICAgICAgIH1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNjcmVlblJlYWRlckxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9yZWFkZXJ9ICR7dGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIDF9ICR7XG4gICAgICAgICAgICB0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9vZlxuICAgICAgICB9ICR7dGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RofWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWwgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsLmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBnZXQgdmFsdWUgZm9yIHJ0bCAqL1xuICAgIF9pc1J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgcHJldmlvdXMgc2xpZGUgaW4gdGhlIGNhcm91c2VsLiAqL1xuICAgIHByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja1ByZXZpb3VzKCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuICovXG4gICAgbmV4dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZpbmcgdG8gbmV4dCBzbGlkZVxuICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0QnRuRm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnBpY2tOZXh0KCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLk5FWFQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGNhcm91c2VsIHNlcnZpY2UgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlU2VydmljZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZVN3aXBlKGV2ZW50KSk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5kcmFnU3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuX29uU2xpZGVEcmFnKGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBQcmV2ZW50IG5hdGl2ZSBmb2N1cyBmbG93IHJlbGF0ZWQgdG8gYnV0dG9uLCBpZiBidXR0b24gd2lsbCBiZSBkaXNhYmxlIG9uIGZvY3VzIHN0YXRlLlxuICAgICAqIEl0IHdvcmtzIG9ubHkgaWYgY2Fyb3VzZWwgaXMgbm90IGluIGNpcmN1bGFyIGxvb3AuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwO1xuICAgICAgICBjb25zdCBpc0xhc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaXNGaXJzdCB8fCBpc0xhc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBBZGp1c3QgcG9zaXRpb24gb2YgYWN0aXZlIGl0ZW0sIGJhc2VkIG9uIHNsaWRlIGRpcmVjdGlvbiAqL1xuICAgIHByaXZhdGUgX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIHN0ZXA6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICAgICAgLy8gTW92ZSBvbmUgc3RlcCBpbiB0aGUgZGlyZWN0aW9uXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQWRqdXN0bWVudCA9IHNsaWRlRGlyZWN0aW9uID09PSBTbGlkZURpcmVjdGlvbi5ORVhUID8gc3RlcCA6IC1zdGVwO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHBvc2l0aW9uQWRqdXN0bWVudDtcblxuICAgICAgICAvLyBJZiBjYXJvdXNlbCBzZXQgdG8gbG9vcFxuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5zbGlkZXMubGVuZ3RoICsgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAlIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2J1dHRvblZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbmF2aWdhdGlvbiBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHByaXZhdGUgX2J1dHRvblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb29wKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBidXR0b24gaWYgZWl0aGVyIGRpcmVjdGlvbiBsaW1pdCBoYXMgcmVhY2hlZC5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggLSAxID09PSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID4gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID49IHRoaXMuc2xpZGVzLmxlbmd0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSB3aGVuIHNsaWRlIGlzIGFkZGVkIG9yIHJlbW92ZWQgKi9cbiAgICBwcml2YXRlIF9vblNsaWRlVXBkYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVzQ29weSA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pbml0aWFsaXNlKHRoaXMuX2NvbmZpZywgdGhpcy5zbGlkZXMsIHRoaXMuc2xpZGVDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWSgwcHgpJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZVgoMHB4KScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSW5pdGlhbGl6ZSBjYXJvdXNlbCB3aXRoIHZpc2libGUgaXRlbXMgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2Fyb3VzZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGVzIG5hdmlnYXRvciBidXR0b24gZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5fYnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgbGV0IGFycmF5TGVuZ3RoOiBudW1iZXI7XG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBpbmRpY2F0b3IgY291bnQgd2l0aCBmYWtlIGFycmF5LCB0byB1c2UgaW4gdGVtcGxhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmxvb3AgJiYgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBsb29wIHdpdGggbXVsdGkgaXRlbSB2aXNpYmxlLlxuICAgICAgICAgICAgICAgIGFycmF5TGVuZ3RoID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheUxlbmd0aCA9IHRoaXMuc2xpZGVzLmxlbmd0aCAtIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFnZUluZGljYXRvcnNJZlplcm9Db3VudCA9IHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMCA/IDAgOiAxO1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkgPSBuZXcgQXJyYXkoYXJyYXlMZW5ndGggPiAwID8gYXJyYXlMZW5ndGggOiBwYWdlSW5kaWNhdG9yc0lmWmVyb0NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuX2dvVG9GaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKF9zbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID49IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dvVG9GaXJzdEl0ZW0oKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmN1cnJlbnRUcmFuc2l0aW9uUHggIT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5nb1RvSXRlbSh0aGlzLnNsaWRlcy5maXJzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplIGNvbmZpZyBmb3IgQ2Fyb3VzZWwgc2VydmljZSAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25maWcudmVydGljYWwgPSB0aGlzLnZlcnRpY2FsO1xuICAgICAgICB0aGlzLl9jb25maWcuZWxlbWVudHNBdE9uY2UgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICB0aGlzLl9jb25maWcuZ2VzdHVyZVN1cHBvcnQgPSB0aGlzLnN3aXBlRW5hYmxlZDtcbiAgICAgICAgdGhpcy5fY29uZmlnLmluZmluaXRlID0gdGhpcy5sb29wO1xuICAgICAgICB0aGlzLl9jb25maWcudHJhbnNpdGlvbiA9IFN0cmluZyh0aGlzLnNsaWRlVHJhbnNpdGlvbkR1cmF0aW9uKSArICdtcyc7XG4gICAgICAgIC8vIENhcm91c2VsIHNlcnZpY2UgZXhwZWN0cyB0cmFuc2l0aW9uIGluIHN0cmluZyBmb3JtYXQgd2l0aCB1bml0LlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gUmV0dXJucyB0aGUgc2xpZGUgc3dhcHBpbmcgc3RlcHNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVGFrZW4oZXZlbnQ6IFBhbkVuZE91dHB1dCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN0ZXBzQ2FsY3VsYXRlZDogbnVtYmVyO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoIXRoaXMuX2lzUnRsKCkgJiYgZXZlbnQuYWZ0ZXIpIHx8XG4gICAgICAgICAgICAodGhpcy5faXNSdGwoKSAmJiAhZXZlbnQuYWZ0ZXIgJiYgIXRoaXMudmVydGljYWwpIHx8XG4gICAgICAgICAgICAodGhpcy52ZXJ0aWNhbCAmJiBldmVudC5hZnRlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9PT0gMCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA+IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4IC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UsIHdoZW4gZmlyc3QgbGVmdCBzd2lwZSBiZWZvcmUgc2xpZGVzIGFyZSByb3RhdGVkIGluIGNhcm91c2VsIHNlcnZpY2VcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5zbGlkZXMubGVuZ3RoIC0gYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RlcHNDYWxjdWxhdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbm90aWZpY2F0aW9uIG9uIHZpc2libGUgc2xpZGUgY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uLCBmaXJzdEFjdGl2ZVNsaWRlPzogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVTbGlkZXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdID0gW107XG4gICAgICAgIGxldCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgZmlyc3RBY3RpdmVTbGlkZSA9IHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlU2xpZGUpIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGFjdGl2ZVNsaWRlSW5kZXggPSAwOyBhY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDsgYWN0aXZlU2xpZGVJbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGZpcnN0QWN0aXZlU2xpZGVJbmRleCArIGFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzLmdldChpbmRleCk7XG4gICAgICAgICAgICBpZiAoc2xpZGUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgICAgICAgc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4KTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyAnTmV4dCcgOiAnUHJldmlvdXMnO1xuICAgICAgICB0aGlzLnNsaWRlQ2hhbmdlLmVtaXQobmV3IENhcm91c2VsQWN0aXZlU2xpZGVzKGFjdGl2ZVNsaWRlcywgZGlyZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWFuYWdlcyB2aXNpYmlsaXR5IGZvciBzbGlkZXMuIFVzZWZ1bCBpbiBtYW5hZ2luZyB0YWIgb3JkZXIgKi9cbiAgICBwcml2YXRlIF9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChfc2xpZGVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggJiYgaW5kZXggPCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfc2xpZGVzLnZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2xpZGVzLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3NsaWRlcy52aXNpYmlsaXR5ID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zbGlkZXMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSwgdGhpcy5zbGlkZVRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaERpcmVjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlyID0gdGhpcy5faXNSdGwoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaXNSdGwgPSB0aGlzLmRpciA9PT0gJ3J0bCc7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLml0ZW1zICYmIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0odGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICByZWZyZXNoRGlyZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hEaXJlY3Rpb24oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT24gU3dpcGluZyBvZiBzbGlkZSwgbWFuYWdlIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVN3aXBlKGV2ZW50OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZVNsaWRlID0gZXZlbnQuaXRlbTtcbiAgICAgICAgY29uc3QgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuX3NsaWRlc0NvcHkuZmluZEluZGV4KChfc2xpZGUpID0+IF9zbGlkZSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIGNvbnN0IHN0ZXBUYWtlbiA9IHRoaXMuX2dldFN0ZXBUYWtlbihldmVudCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGlmIChzdGVwVGFrZW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1J0bCgpKSB7XG4gICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLk5FWFQgOiBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmVydGljYWwgY2Fyb3VzZWwgc2xpZGUgZGlyZWN0aW9uIGlzIHNhbWUgaW4gbHRyIGFuZCBydGxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUyA6IFNsaWRlRGlyZWN0aW9uLk5FWFQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uLCBzdGVwVGFrZW4pO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNYWtpbmcgc2xpZGVzIHZpc2libGUgd2hlbiBzbGlkZXMgYXJlIGRyYWdnZWQuIE90aGVyd2lzZSwgaXQgbG9vc2VzIHRoZSBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NsaWRlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NsaWRlU3dpcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIHNsaWRlIGxpbWl0IHJlYWNoZWQsIGlmIGRyYWdnaW5nIHN0YXJ0cyB0aGVuIHJldmVydCB2aXNpYmlsaXR5XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NsaWRlU3dpcGVkICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzaXplcyBpbm5lciBjYXJvdXNlbCBjb250YWluZXIgdG8gZml0IGFsbCBpdGVtcyBpbiB0aGUgdmlld3BvcnQgYW5kIGhpZGUgdGhvc2Ugd2hpY2ggYXJlIG5vdCBmdWxseSBpbiBpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNpemVDb250ZW50Q29udGFpbmVyKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5zbGlkZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5jYXJvdXNlbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVTbGlkZXNDb3VudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSBzbGlkZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZWVkbGVTbGlkZUluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbW91bnQgb2Ygc2xpZGVzIGluc3VmZmljaWVudCB0byBmaWxsIHdob2xlIGNhcm91c2VsLCBzbGlkZSBiYWNrIGEgYml0LlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyA+IHRvdGFsU2xpZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZUluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyAtIHRvdGFsU2xpZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRsZVNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KG5lZWRsZVNsaWRlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSBuZWVkbGVTbGlkZUluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBuZWVkbGVTbGlkZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGNhcm91c2VsIGNvbmZpZyBhbmQgdHJhbnNpdGlvbiB0byB0aGUgY3VycmVudCBzbGlkZS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbmVlZGxlU2xpZGUgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKG5lZWRsZVNsaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZSA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGVzIGhvdyBtYW55IHNsaWRlcyBjYW4gYmUgc2hvd24gd2l0aGluIGN1cnJlbnQgY2Fyb3VzZWwgdmlld3BvcnQuXG4gICAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZml0dGluZyBzbGlkZXMgY291bnQgYW5kIHRvdGFsIHdpZHRoIG9mIHRob3NlIHNsaWRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTogRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhcm91c2VsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIHNsaWRlczogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSB0aGlzLmNhcm91c2VsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBtYXhTaXplID0gMDtcbiAgICAgICAgbGV0IHNsaWRlc0NvdW50ID0gMDtcbiAgICAgICAgY29uc3QgY2Fyb3VzZWxTbGlkZXMgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU2xpZGVzID0gY2Fyb3VzZWxTbGlkZXMuc3BsaWNlKDAsIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpO1xuICAgICAgICBjb25zdCBnZXRTbGlkZXMgPSAoc2xpZGVzOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBzbGlkZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gc2xpZGUuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNsaWRlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBtYXhTaXplICsgc2xpZGVXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA+IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXhTaXplID0gbmV3U2l6ZTtcbiAgICAgICAgICAgICAgICBzbGlkZXNDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBnZXRTbGlkZXMoY2Fyb3VzZWxTbGlkZXMpO1xuXG4gICAgICAgIC8vIElmIHdpdGggb2YgdGhlIHJlc3Qgb2YgdGhlIHNsaWRlcyBpcyBsZXNzZXIgdGhhbiBjYXJvdXNlJ3Mgdmlld3BvcnQsIGFkZCBwcmV2aW91cyBzbGlkZXMgdG8gaXQuXG4gICAgICAgIGlmIChtYXhTaXplIDwgd2lkdGgpIHtcbiAgICAgICAgICAgIGdldFNsaWRlcyhwcmV2aW91c1NsaWRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgc2xpZGVzOiBzbGlkZXNDb3VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgIT09ICdhdXRvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNsaWRlcyB9ID0gdGhpcy5fZ2V0Rml0dGluZ1NsaWRlc0FuZFdpZHRoKCk7XG4gICAgICAgIHJldHVybiBzbGlkZXM7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxcIlxuICAgIFtjbGFzcy5mZC1jYXJvdXNlbC0tbm8tbmF2aWdhdGlvbl09XCIhbmF2aWdhdGlvblwiXG4gICAgZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgW2F0dHIuZGlyXT1cImRpclwiXG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgI2Nhcm91c2VsQ29udGFpbmVyXG4gICAgKGNsaWNrKT1cIl9mb2N1cygpXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dQYWdlSW5kaWNhdG9yQ29udGFpbmVyICYmIHBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPT09ICd0b3AnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX2NvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2NvbnRlbnQtLWhvcml6b250YWxdPVwiIXZlcnRpY2FsXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiJ2ZkLWNhcm91c2VsX19jb250ZW50LS0nICsgY29udGVudEJhY2tncm91bmRcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiX2NvbnRlbnRTaXplUHhcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAjc2xpZGVDb250YWluZXIgY2xhc3M9XCJmZC1jYXJvdXNlbF9fc2xpZGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCIgcm9sZT1cInJlZ2lvblwiIFthdHRyLmlkXT1cImlkICsgJy1hY2Nlc3NpYmlsaXR5J1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGRpcj1cImx0clwiPlxuICAgICAgICB7eyBzY3JlZW5SZWFkZXJMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUluZGljYXRvckNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yLWNvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3ItY29udGFpbmVyLS1uby1ib3JkZXJdPVwibm9QYWdpbmF0aW9uQ29udGFpbmVyQm9yZGVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiJ2ZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci1jb250YWluZXItLScgKyBwYWdlSW5kaWNhdG9yQmFja2dyb3VuZFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUluZGljYXRvcnNcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9ycz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVtZXJpY0luZGljYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3RleHRcIiBkaXI9XCJsdHJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UGFnZUluZGljYXRvckxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFudW1lcmljSW5kaWNhdG9yICYmIF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICA8b2wgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JzXCIgW2F0dHIuZGlyXT1cImRpclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xpZGUtdG9dPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci0tYWN0aXZlXT1cImkgPT09IGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9vbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b25cIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tbGVmdF09XCIhdmVydGljYWxcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tdXBdPVwidmVydGljYWxcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgZGF0YS1zbGlkZT1cInByZXZpb3VzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUNhcm91c2VsLmxlZnROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxlZnRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cIidjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtnbHlwaF09XCJ2ZXJ0aWNhbCA/ICdzbGltLWFycm93LXVwJyA6ICdzbGltLWFycm93LWxlZnQnXCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvblJpZ2h0PlxuICAgIDxidXR0b25cbiAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX2J1dHRvblwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fYnV0dG9uLS1yaWdodF09XCIhdmVydGljYWxcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tZG93bl09XCJ2ZXJ0aWNhbFwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIjFcIlxuICAgICAgICBkYXRhLXNsaWRlPVwibmV4dFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyaWdodEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtnbHlwaF09XCJ2ZXJ0aWNhbCA/ICdzbGltLWFycm93LWRvd24nIDogJ3NsaW0tYXJyb3ctcmlnaHQnXCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
670
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFJSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFB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LEtBQUs7Z0JBS04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFRRixlQUFlO3NCQURsQixLQUFLO2dCQWNOLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLDJCQUEyQjtzQkFEMUIsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQUtGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFZRyxXQUFXO3NCQURuQixNQUFNO2dCQU9QLE1BQU07c0JBSEwsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRTt3QkFDcEMsV0FBVyxFQUFFLElBQUk7cUJBQ3BCO2dCQUtELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBOEQ5QixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlLCByZXNpemVPYnNlcnZhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhcm91c2VsSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY2Fyb3VzZWwtaXRlbS9jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJvdXNlbENvbmZpZywgQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlLCBDYXJvdXNlbFNlcnZpY2UsIFBhbkVuZE91dHB1dCB9IGZyb20gJy4vY2Fyb3VzZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOLCBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi9pMThuL2Nhcm91c2VsLXJlc291cmNlcyc7XG5cbi8qKiBQYWdlIGxpbWl0IHRvIHN3aXRjaCB0byBudW1lcmljYWwgaW5kaWNhdG9yICovXG5jb25zdCBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUID0gODtcbmV4cG9ydCB0eXBlIFBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPSAnYm90dG9tJyB8ICd0b3AnO1xuXG5leHBvcnQgdHlwZSBDYXJvdXNlbEJhY2tncm91bmRPcHRpb25zID0gJ3RyYW5zbHVjZW50JyB8ICd0cmFuc3BhcmVudCcgfCAnc29saWQnO1xuXG5leHBvcnQgZW51bSBTbGlkZURpcmVjdGlvbiB7XG4gICAgTm9uZSxcbiAgICBORVhULFxuICAgIFBSRVZJT1VTXG59XG5leHBvcnQgaW50ZXJmYWNlIEZpdHRpbmdTbGlkZXNBbmRXaWR0aCB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBzbGlkZXM6IG51bWJlcjtcbn1cbmxldCBjYXJvdXNlbENvdW50ZXIgPSAwO1xuXG5jbGFzcyBDYXJvdXNlbEFjdGl2ZVNsaWRlcyB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGFjdGl2ZUl0ZW1zOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSwgcHVibGljIHJlYWRvbmx5IHNsaWRlRGlyZWN0aW9uOiBzdHJpbmcpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0Nhcm91c2VsU2VydmljZV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW3N0eWxlLndpZHRoXSc6ICd3aWR0aCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIE5nRm9yLCBCdXR0b25Db21wb25lbnQsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIElEIGZvciB0aGUgQ2Fyb3VzZWwuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gYGZkLWNhcm91c2VsLSR7Y2Fyb3VzZWxDb3VudGVyKyt9YDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWwgYXR0cmlidXRlIGZvciBjYXJvdXNlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsID0gbnVsbDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIHBvc2l0aW9uIG9mIHBhZ2UgaW5kaWNhdG9yIGNvbnRhaW5lci4gRGVmYXVsdCBwb3NpdGlvbiBpcyBib3R0b20uICovXG4gICAgQElucHV0KClcbiAgICBwYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uOiBQYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID0gJ2JvdHRvbSc7XG5cbiAgICAvKiogSGVpZ2h0IGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqIFdpZHRoIGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoID0gJzEwMCUnO1xuXG4gICAgLyoqIElmIGNhcm91c2VsIGlzIGluIGNpcmN1bGFyIGxvb3AgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvb3AgPSBmYWxzZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBuYXZpZ2F0aW9uIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogU2hvdyBuYXZpZ2F0aW9uIGJ1dHRvbiBpbiBwYWdlIGluZGljYXRvciBjb250YWluZXIgb3IgaW5zaWRlIGNvbnRlbnQuIERlZmF1bHQgaXMgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyIG9uIHRydWUgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRvckluUGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKiogQ29udmVydCB0byBOdW1lcmljIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgQElucHV0KClcbiAgICBudW1lcmljSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckNvbnRhaW5lciA9IHRydWU7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3IgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHNsaWRpbmcgZHVyYXRpb24gaW4gbWlsbGllIHNlY29uZHMuIERlZmF1bHQgaXMgMTUwICovXG4gICAgQElucHV0KClcbiAgICBzbGlkZVRyYW5zaXRpb25EdXJhdGlvbiA9IDE1MDtcblxuICAgIC8qKiBJcyBzd2lwZSBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBzd2lwZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqIElzIGNhcm91c2VsIGlzIHZlcnRpY2FsLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGhpZGUgdG9wIGJvcmRlciBvZiB0aGUgUGFnaW5hdGlvbiBDb250YWluZXIuICovXG4gICAgQElucHV0KClcbiAgICBub1BhZ2luYXRpb25Db250YWluZXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBCYWNrZ3JvdW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb250ZW50IGNvbnRhaW5lci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRlbnRCYWNrZ3JvdW5kOiBDYXJvdXNlbEJhY2tncm91bmRPcHRpb25zID0gJ3RyYW5zbHVjZW50JztcblxuICAgIC8qKiBCYWNrZ3JvdW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBQYWdpbmF0aW9uIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckJhY2tncm91bmQ6IENhcm91c2VsQmFja2dyb3VuZE9wdGlvbnMgPSAnc29saWQnO1xuXG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyB0byBiZSB2aXNpYmxlIGF0IGEgdGltZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGVTbGlkZXNDb3VudCh2YWx1ZTogbnVtYmVyIHwgJ2F1dG8nKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gdGhpcy5fZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgZ2V0IHZpc2libGVTbGlkZXNDb3VudCgpOiBudW1iZXIgfCAnYXV0bycge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSB0cmFuc2l0aW9uIGhhcyBoYXBwZW5lZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNsaWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJvdXNlbEFjdGl2ZVNsaWRlcz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihDYXJvdXNlbEl0ZW1Db21wb25lbnQsIHtcbiAgICAgICAgZGVzY2VuZGFudHM6IHRydWVcbiAgICB9KVxuICAgIHNsaWRlczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NsaWRlQ29udGFpbmVyJylcbiAgICBzbGlkZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBDYXJvdXNlbCBjb250YWluZXIgZWxlbWVudC4gKi9cbiAgICBAVmlld0NoaWxkKCdjYXJvdXNlbENvbnRhaW5lcicpXG4gICAgY2Fyb3VzZWxDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBTdGFydCBpbmRleCBvZiBjdXJyZW50bHkgYWN0aXZlIGl0ZW1zICovXG4gICAgY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBydGwgc2VydmljZSAqL1xuICAgIGRpcjogRGlyZWN0aW9uID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiBNYWtlIGxlZnQgbmF2aWdhdGlvbiBidXR0b24gZGlzYWJsZWQgKi9cbiAgICBsZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIE1ha2UgcmlnaHQgbmF2aWdhdGlvbiBidXR0b24gZGlzYWJsZWQgKi9cbiAgICByaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBGYWtlIGFycmF5IGZvciBjb3VudGluZyBudW1iZXIgb2YgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBwYWdlSW5kaWNhdG9yc0NvdW50QXJyYXk6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zbGlkZXNXcmFwcGVyU2l6ZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY29udGVudFNpemVQeCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2xpZGVzV3JhcHBlclNpemUgPyBgJHt0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZX1weGAgOiB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZVNsaWRlc0NvdW50OiBudW1iZXIgfCAnYXV0bycgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBDYXJvdXNlbENvbmZpZyA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZXNDb3B5OiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZVN3aXBlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Fyb3VzZWxTZXJ2aWNlOiBDYXJvdXNlbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XXSkgfHxcbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbVVBfQVJST1csIERPV05fQVJST1ddKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNSdGwoKSA/IHRoaXMubmV4dCgpIDogdGhpcy5wcmV2aW91cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1J0bCgpID8gdGhpcy5wcmV2aW91cygpIDogdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxDb250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9SdGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmlzaWJsZVNsaWRlc0NvdW50ICYmIHRoaXMuc2xpZGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShTbGlkZURpcmVjdGlvbi5Ob25lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBPbiBjYXJvdXNlbCBsb2FkLCBkaXNwbGF5IGZpcnN0IHNsaWRlICsgbnVtYmVyIG9mIHNsaWRlIHZpc2libGVcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHBhZ2luYXRpb24gZGlzcGxheSB0byBudW1lcmljLCBpZiBpdGVtIGNvdW50IGlzIG1vcmUgdGhhbiA4XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUKSB7XG4gICAgICAgICAgICB0aGlzLm51bWVyaWNJbmRpY2F0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgc3dpcGUgd2hlbiB0aGVyZSBpcyBubyBjYXJvdXNlbCBpdGVtXG4gICAgICAgICAgICB0aGlzLnN3aXBlRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBLZWVwIGNvcHkgb2Ygb3JpZ2luYWwgc2xpZGUgYXJyYXksIGZvciBpbmRpY2F0b3IgcHVycG9zZS5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBsb29wZWQgY2Fyb3VzZWwsIG9yaWdpbmFsIHNsaWRlcyBhcnJheSBjaGFuZ2VzLlxuICAgICAgICB0aGlzLl9zbGlkZXNDb3B5ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGR5bmFtaWMgdXBkYXRlIG9mIHNsaWRlc1xuICAgICAgICB0aGlzLnNsaWRlcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25TbGlkZVVwZGF0ZXMoKSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaW5pdGlhbGlzZSh0aGlzLl9jb25maWcsIHRoaXMuc2xpZGVzLCB0aGlzLnNsaWRlQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICB0aGlzLl9yZXNpemVDb250ZW50Q29udGFpbmVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCAmJiB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCAhPT0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnVwZGF0ZUNvbmZpZyh0aGlzLl9jb25maWcpO1xuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgKHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA+IDAgfHwgdGhpcy5udW1lcmljSW5kaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBnZXRQYWdlSW5kaWNhdG9yTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyAxfSAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX29mfSAke1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoXG4gICAgICAgIH1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNjcmVlblJlYWRlckxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9yZWFkZXJ9ICR7dGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIDF9ICR7XG4gICAgICAgICAgICB0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9vZlxuICAgICAgICB9ICR7dGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RofWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWwgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsLmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBnZXQgdmFsdWUgZm9yIHJ0bCAqL1xuICAgIF9pc1J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgcHJldmlvdXMgc2xpZGUgaW4gdGhlIGNhcm91c2VsLiAqL1xuICAgIHByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja1ByZXZpb3VzKCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuICovXG4gICAgbmV4dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZpbmcgdG8gbmV4dCBzbGlkZVxuICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0QnRuRm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnBpY2tOZXh0KCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLk5FWFQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGNhcm91c2VsIHNlcnZpY2UgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlU2VydmljZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZVN3aXBlKGV2ZW50KSk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5kcmFnU3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuX29uU2xpZGVEcmFnKGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBQcmV2ZW50IG5hdGl2ZSBmb2N1cyBmbG93IHJlbGF0ZWQgdG8gYnV0dG9uLCBpZiBidXR0b24gd2lsbCBiZSBkaXNhYmxlIG9uIGZvY3VzIHN0YXRlLlxuICAgICAqIEl0IHdvcmtzIG9ubHkgaWYgY2Fyb3VzZWwgaXMgbm90IGluIGNpcmN1bGFyIGxvb3AuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwO1xuICAgICAgICBjb25zdCBpc0xhc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaXNGaXJzdCB8fCBpc0xhc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBBZGp1c3QgcG9zaXRpb24gb2YgYWN0aXZlIGl0ZW0sIGJhc2VkIG9uIHNsaWRlIGRpcmVjdGlvbiAqL1xuICAgIHByaXZhdGUgX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIHN0ZXA6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICAgICAgLy8gTW92ZSBvbmUgc3RlcCBpbiB0aGUgZGlyZWN0aW9uXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQWRqdXN0bWVudCA9IHNsaWRlRGlyZWN0aW9uID09PSBTbGlkZURpcmVjdGlvbi5ORVhUID8gc3RlcCA6IC1zdGVwO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHBvc2l0aW9uQWRqdXN0bWVudDtcblxuICAgICAgICAvLyBJZiBjYXJvdXNlbCBzZXQgdG8gbG9vcFxuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5zbGlkZXMubGVuZ3RoICsgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAlIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2J1dHRvblZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbmF2aWdhdGlvbiBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHByaXZhdGUgX2J1dHRvblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb29wKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBidXR0b24gaWYgZWl0aGVyIGRpcmVjdGlvbiBsaW1pdCBoYXMgcmVhY2hlZC5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggLSAxID09PSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID4gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID49IHRoaXMuc2xpZGVzLmxlbmd0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSB3aGVuIHNsaWRlIGlzIGFkZGVkIG9yIHJlbW92ZWQgKi9cbiAgICBwcml2YXRlIF9vblNsaWRlVXBkYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVzQ29weSA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pbml0aWFsaXNlKHRoaXMuX2NvbmZpZywgdGhpcy5zbGlkZXMsIHRoaXMuc2xpZGVDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWSgwcHgpJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZVgoMHB4KScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSW5pdGlhbGl6ZSBjYXJvdXNlbCB3aXRoIHZpc2libGUgaXRlbXMgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2Fyb3VzZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGVzIG5hdmlnYXRvciBidXR0b24gZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5fYnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgbGV0IGFycmF5TGVuZ3RoOiBudW1iZXI7XG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBpbmRpY2F0b3IgY291bnQgd2l0aCBmYWtlIGFycmF5LCB0byB1c2UgaW4gdGVtcGxhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmxvb3AgJiYgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBsb29wIHdpdGggbXVsdGkgaXRlbSB2aXNpYmxlLlxuICAgICAgICAgICAgICAgIGFycmF5TGVuZ3RoID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheUxlbmd0aCA9IHRoaXMuc2xpZGVzLmxlbmd0aCAtIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFnZUluZGljYXRvcnNJZlplcm9Db3VudCA9IHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMCA/IDAgOiAxO1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkgPSBuZXcgQXJyYXkoYXJyYXlMZW5ndGggPiAwID8gYXJyYXlMZW5ndGggOiBwYWdlSW5kaWNhdG9yc0lmWmVyb0NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuX2dvVG9GaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKF9zbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID49IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dvVG9GaXJzdEl0ZW0oKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmN1cnJlbnRUcmFuc2l0aW9uUHggIT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5nb1RvSXRlbSh0aGlzLnNsaWRlcy5maXJzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplIGNvbmZpZyBmb3IgQ2Fyb3VzZWwgc2VydmljZSAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25maWcudmVydGljYWwgPSB0aGlzLnZlcnRpY2FsO1xuICAgICAgICB0aGlzLl9jb25maWcuZWxlbWVudHNBdE9uY2UgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICB0aGlzLl9jb25maWcuZ2VzdHVyZVN1cHBvcnQgPSB0aGlzLnN3aXBlRW5hYmxlZDtcbiAgICAgICAgdGhpcy5fY29uZmlnLmluZmluaXRlID0gdGhpcy5sb29wO1xuICAgICAgICB0aGlzLl9jb25maWcudHJhbnNpdGlvbiA9IFN0cmluZyh0aGlzLnNsaWRlVHJhbnNpdGlvbkR1cmF0aW9uKSArICdtcyc7XG4gICAgICAgIC8vIENhcm91c2VsIHNlcnZpY2UgZXhwZWN0cyB0cmFuc2l0aW9uIGluIHN0cmluZyBmb3JtYXQgd2l0aCB1bml0LlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gUmV0dXJucyB0aGUgc2xpZGUgc3dhcHBpbmcgc3RlcHNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVGFrZW4oZXZlbnQ6IFBhbkVuZE91dHB1dCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN0ZXBzQ2FsY3VsYXRlZDogbnVtYmVyO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoIXRoaXMuX2lzUnRsKCkgJiYgZXZlbnQuYWZ0ZXIpIHx8XG4gICAgICAgICAgICAodGhpcy5faXNSdGwoKSAmJiAhZXZlbnQuYWZ0ZXIgJiYgIXRoaXMudmVydGljYWwpIHx8XG4gICAgICAgICAgICAodGhpcy52ZXJ0aWNhbCAmJiBldmVudC5hZnRlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9PT0gMCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA+IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4IC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UsIHdoZW4gZmlyc3QgbGVmdCBzd2lwZSBiZWZvcmUgc2xpZGVzIGFyZSByb3RhdGVkIGluIGNhcm91c2VsIHNlcnZpY2VcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5zbGlkZXMubGVuZ3RoIC0gYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RlcHNDYWxjdWxhdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbm90aWZpY2F0aW9uIG9uIHZpc2libGUgc2xpZGUgY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uLCBmaXJzdEFjdGl2ZVNsaWRlPzogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVTbGlkZXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdID0gW107XG4gICAgICAgIGxldCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgZmlyc3RBY3RpdmVTbGlkZSA9IHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlU2xpZGUpIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGFjdGl2ZVNsaWRlSW5kZXggPSAwOyBhY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDsgYWN0aXZlU2xpZGVJbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGZpcnN0QWN0aXZlU2xpZGVJbmRleCArIGFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzLmdldChpbmRleCk7XG4gICAgICAgICAgICBpZiAoc2xpZGUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgICAgICAgc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4KTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyAnTmV4dCcgOiAnUHJldmlvdXMnO1xuICAgICAgICB0aGlzLnNsaWRlQ2hhbmdlLmVtaXQobmV3IENhcm91c2VsQWN0aXZlU2xpZGVzKGFjdGl2ZVNsaWRlcywgZGlyZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWFuYWdlcyB2aXNpYmlsaXR5IGZvciBzbGlkZXMuIFVzZWZ1bCBpbiBtYW5hZ2luZyB0YWIgb3JkZXIgKi9cbiAgICBwcml2YXRlIF9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChfc2xpZGVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggJiYgaW5kZXggPCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfc2xpZGVzLnZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2xpZGVzLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3NsaWRlcy52aXNpYmlsaXR5ID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zbGlkZXMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSwgdGhpcy5zbGlkZVRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaERpcmVjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlyID0gdGhpcy5faXNSdGwoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaXNSdGwgPSB0aGlzLmRpciA9PT0gJ3J0bCc7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLml0ZW1zICYmIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0odGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICByZWZyZXNoRGlyZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hEaXJlY3Rpb24oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT24gU3dpcGluZyBvZiBzbGlkZSwgbWFuYWdlIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVN3aXBlKGV2ZW50OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZVNsaWRlID0gZXZlbnQuaXRlbTtcbiAgICAgICAgY29uc3QgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuX3NsaWRlc0NvcHkuZmluZEluZGV4KChfc2xpZGUpID0+IF9zbGlkZSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIGNvbnN0IHN0ZXBUYWtlbiA9IHRoaXMuX2dldFN0ZXBUYWtlbihldmVudCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGlmIChzdGVwVGFrZW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1J0bCgpKSB7XG4gICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLk5FWFQgOiBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmVydGljYWwgY2Fyb3VzZWwgc2xpZGUgZGlyZWN0aW9uIGlzIHNhbWUgaW4gbHRyIGFuZCBydGxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUyA6IFNsaWRlRGlyZWN0aW9uLk5FWFQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uLCBzdGVwVGFrZW4pO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNYWtpbmcgc2xpZGVzIHZpc2libGUgd2hlbiBzbGlkZXMgYXJlIGRyYWdnZWQuIE90aGVyd2lzZSwgaXQgbG9vc2VzIHRoZSBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NsaWRlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NsaWRlU3dpcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIHNsaWRlIGxpbWl0IHJlYWNoZWQsIGlmIGRyYWdnaW5nIHN0YXJ0cyB0aGVuIHJldmVydCB2aXNpYmlsaXR5XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NsaWRlU3dpcGVkICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzaXplcyBpbm5lciBjYXJvdXNlbCBjb250YWluZXIgdG8gZml0IGFsbCBpdGVtcyBpbiB0aGUgdmlld3BvcnQgYW5kIGhpZGUgdGhvc2Ugd2hpY2ggYXJlIG5vdCBmdWxseSBpbiBpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNpemVDb250ZW50Q29udGFpbmVyKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5zbGlkZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5jYXJvdXNlbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVTbGlkZXNDb3VudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSBzbGlkZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZWVkbGVTbGlkZUluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbW91bnQgb2Ygc2xpZGVzIGluc3VmZmljaWVudCB0byBmaWxsIHdob2xlIGNhcm91c2VsLCBzbGlkZSBiYWNrIGEgYml0LlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyA+IHRvdGFsU2xpZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZUluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyAtIHRvdGFsU2xpZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRsZVNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KG5lZWRsZVNsaWRlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSBuZWVkbGVTbGlkZUluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBuZWVkbGVTbGlkZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGNhcm91c2VsIGNvbmZpZyBhbmQgdHJhbnNpdGlvbiB0byB0aGUgY3VycmVudCBzbGlkZS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbmVlZGxlU2xpZGUgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKG5lZWRsZVNsaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZSA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGVzIGhvdyBtYW55IHNsaWRlcyBjYW4gYmUgc2hvd24gd2l0aGluIGN1cnJlbnQgY2Fyb3VzZWwgdmlld3BvcnQuXG4gICAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZml0dGluZyBzbGlkZXMgY291bnQgYW5kIHRvdGFsIHdpZHRoIG9mIHRob3NlIHNsaWRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTogRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhcm91c2VsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIHNsaWRlczogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSB0aGlzLmNhcm91c2VsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBtYXhTaXplID0gMDtcbiAgICAgICAgbGV0IHNsaWRlc0NvdW50ID0gMDtcbiAgICAgICAgY29uc3QgY2Fyb3VzZWxTbGlkZXMgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU2xpZGVzID0gY2Fyb3VzZWxTbGlkZXMuc3BsaWNlKDAsIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpO1xuICAgICAgICBjb25zdCBnZXRTbGlkZXMgPSAoc2xpZGVzOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBzbGlkZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gc2xpZGUuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNsaWRlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBtYXhTaXplICsgc2xpZGVXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA+IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXhTaXplID0gbmV3U2l6ZTtcbiAgICAgICAgICAgICAgICBzbGlkZXNDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBnZXRTbGlkZXMoY2Fyb3VzZWxTbGlkZXMpO1xuXG4gICAgICAgIC8vIElmIHdpdGggb2YgdGhlIHJlc3Qgb2YgdGhlIHNsaWRlcyBpcyBsZXNzZXIgdGhhbiBjYXJvdXNlJ3Mgdmlld3BvcnQsIGFkZCBwcmV2aW91cyBzbGlkZXMgdG8gaXQuXG4gICAgICAgIGlmIChtYXhTaXplIDwgd2lkdGgpIHtcbiAgICAgICAgICAgIGdldFNsaWRlcyhwcmV2aW91c1NsaWRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgc2xpZGVzOiBzbGlkZXNDb3VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgIT09ICdhdXRvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNsaWRlcyB9ID0gdGhpcy5fZ2V0Rml0dGluZ1NsaWRlc0FuZFdpZHRoKCk7XG4gICAgICAgIHJldHVybiBzbGlkZXM7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxcIlxuICAgIFtjbGFzcy5mZC1jYXJvdXNlbC0tbm8tbmF2aWdhdGlvbl09XCIhbmF2aWdhdGlvblwiXG4gICAgZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgW2F0dHIuZGlyXT1cImRpclwiXG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgI2Nhcm91c2VsQ29udGFpbmVyXG4gICAgKGNsaWNrKT1cIl9mb2N1cygpXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dQYWdlSW5kaWNhdG9yQ29udGFpbmVyICYmIHBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPT09ICd0b3AnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX2NvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2NvbnRlbnQtLWhvcml6b250YWxdPVwiIXZlcnRpY2FsXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiJ2ZkLWNhcm91c2VsX19jb250ZW50LS0nICsgY29udGVudEJhY2tncm91bmRcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiX2NvbnRlbnRTaXplUHhcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAjc2xpZGVDb250YWluZXIgY2xhc3M9XCJmZC1jYXJvdXNlbF9fc2xpZGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCIgcm9sZT1cInJlZ2lvblwiIFthdHRyLmlkXT1cImlkICsgJy1hY2Nlc3NpYmlsaXR5J1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGRpcj1cImx0clwiPlxuICAgICAgICB7eyBzY3JlZW5SZWFkZXJMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUluZGljYXRvckNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yLWNvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3ItY29udGFpbmVyLS1uby1ib3JkZXJdPVwibm9QYWdpbmF0aW9uQ29udGFpbmVyQm9yZGVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiJ2ZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci1jb250YWluZXItLScgKyBwYWdlSW5kaWNhdG9yQmFja2dyb3VuZFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUluZGljYXRvcnNcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9ycz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVtZXJpY0luZGljYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3RleHRcIiBkaXI9XCJsdHJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UGFnZUluZGljYXRvckxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFudW1lcmljSW5kaWNhdG9yICYmIF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICA8b2wgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JzXCIgW2F0dHIuZGlyXT1cImRpclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xpZGUtdG9dPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci0tYWN0aXZlXT1cImkgPT09IGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9vbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b25cIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tbGVmdF09XCIhdmVydGljYWxcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tdXBdPVwidmVydGljYWxcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgZGF0YS1zbGlkZT1cInByZXZpb3VzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUNhcm91c2VsLmxlZnROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxlZnRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cIidjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtnbHlwaF09XCJ2ZXJ0aWNhbCA/ICdzbGltLWFycm93LXVwJyA6ICdzbGltLWFycm93LWxlZnQnXCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvblJpZ2h0PlxuICAgIDxidXR0b25cbiAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX2J1dHRvblwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fYnV0dG9uLS1yaWdodF09XCIhdmVydGljYWxcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tZG93bl09XCJ2ZXJ0aWNhbFwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIjFcIlxuICAgICAgICBkYXRhLXNsaWRlPVwibmV4dFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyaWdodEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtnbHlwaF09XCJ2ZXJ0aWNhbCA/ICdzbGltLWFycm93LWRvd24nIDogJ3NsaW0tYXJyb3ctcmlnaHQnXCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19