@seniorsistemas/angular-components 19.3.1 → 19.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.d.ts +1 -2
  2. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +0 -1
  3. package/chips/lib/chips/chips/chips.component.d.ts +1 -2
  4. package/code-editor/lib/code-editor/code-editor.component.d.ts +0 -2
  5. package/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.d.ts +1 -3
  6. package/common/lib/svg-factory/svg-factory.directive.d.ts +1 -2
  7. package/content-generator/lib/content-generator/content-generator.component.d.ts +1 -6
  8. package/content-generator/lib/services/IAssist/iassist.service.d.ts +0 -3
  9. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -3
  10. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.d.ts +0 -2
  11. package/currency/lib/currency.service.d.ts +0 -2
  12. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +3 -7
  13. package/custom-fields/lib/custom-fields/custom-fields.service.d.ts +0 -2
  14. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +0 -2
  15. package/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.d.ts +1 -2
  16. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -3
  17. package/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.d.ts +1 -2
  18. package/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.d.ts +1 -3
  19. package/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.d.ts +1 -2
  20. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -3
  21. package/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.d.ts +1 -2
  22. package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +1 -3
  23. package/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.d.ts +1 -2
  24. package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
  25. package/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +1 -2
  26. package/empty-state/lib/empty-state/go-back/go-back.component.d.ts +0 -2
  27. package/esm2022/badge/lib/badge/badge.component.mjs +3 -3
  28. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +10 -13
  29. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +7 -11
  30. package/esm2022/chips/lib/chips/chips/chips.component.mjs +5 -8
  31. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +6 -9
  32. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.mjs +8 -13
  33. package/esm2022/common/lib/svg-factory/svg-factory.directive.mjs +6 -10
  34. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +24 -30
  35. package/esm2022/content-generator/lib/services/IAssist/iassist.service.mjs +9 -12
  36. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +15 -23
  37. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +6 -9
  38. package/esm2022/currency/lib/currency.service.mjs +6 -9
  39. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +17 -25
  40. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +6 -9
  41. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +22 -28
  42. package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +6 -10
  43. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +12 -17
  44. package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +5 -8
  45. package/esm2022/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.mjs +12 -17
  46. package/esm2022/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +5 -8
  47. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +13 -19
  48. package/esm2022/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.mjs +6 -10
  49. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +14 -19
  50. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +5 -8
  51. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +5 -8
  52. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +5 -8
  53. package/esm2022/empty-state/lib/empty-state/go-back/go-back.component.mjs +8 -11
  54. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +17 -21
  55. package/esm2022/gantt/lib/gantt/components/gantt/gantt.mjs +6 -2
  56. package/esm2022/gantt/lib/gantt/gantt.component.mjs +8 -4
  57. package/esm2022/global-search/lib/global-search/global-search.component.mjs +5 -8
  58. package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +7 -12
  59. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +5 -8
  60. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +6 -10
  61. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +9 -12
  62. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +14 -17
  63. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +12 -15
  64. package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +15 -19
  65. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +5 -8
  66. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +10 -13
  67. package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +10 -13
  68. package/esm2022/kanban/lib/kanban/kanban.component.mjs +23 -17
  69. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +10 -16
  70. package/esm2022/locale/lib/locale/locale.service.mjs +8 -12
  71. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +6 -9
  72. package/esm2022/locale/lib/locale/pipes/localized-currency.pipe.mjs +6 -9
  73. package/esm2022/locale/lib/locale/pipes/localized-date.pipe.mjs +6 -9
  74. package/esm2022/locale/lib/locale/pipes/localized-number.pipe.mjs +6 -9
  75. package/esm2022/locale/lib/locale/pipes/localized-time.pipe.mjs +6 -9
  76. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +6 -9
  77. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +5 -8
  78. package/esm2022/numeric/lib/numeric.pipe.mjs +8 -12
  79. package/esm2022/numeric/lib/numeric.service.mjs +6 -9
  80. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +8 -11
  81. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +10 -16
  82. package/esm2022/picklist/lib/picklist/picklist.component.mjs +5 -8
  83. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +15 -19
  84. package/esm2022/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.mjs +8 -11
  85. package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +5 -4
  86. package/esm2022/select-button/lib/select-button/select-button.component.mjs +3 -3
  87. package/esm2022/shared/lib/accessibility/paginator-accessibility.directive.mjs +8 -13
  88. package/esm2022/shared/lib/accessibility/table-checkbox-accessibility.directive.mjs +5 -8
  89. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +9 -12
  90. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +12 -16
  91. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.service.mjs +12 -16
  92. package/esm2022/speech-recognition/lib/speech-recognition/text-to-speech.service.mjs +8 -10
  93. package/esm2022/split-button/lib/split-button/split-button.component.mjs +5 -8
  94. package/esm2022/table/lib/table/row-toggler/row-toggler.directive.mjs +7 -7
  95. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +19 -28
  96. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +9 -16
  97. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +11 -13
  98. package/esm2022/text-area/lib/text-area/text-area.component.mjs +5 -8
  99. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +8 -11
  100. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +16 -24
  101. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +8 -11
  102. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +12 -16
  103. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +13 -25
  104. package/esm2022/toast/lib/toast/toast.service.mjs +7 -12
  105. package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +10 -14
  106. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +6 -10
  107. package/fesm2022/seniorsistemas-angular-components-badge.mjs +2 -2
  108. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +10 -12
  110. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +6 -10
  112. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  113. package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -7
  114. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  115. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +10 -18
  116. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  117. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -9
  118. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  119. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +29 -40
  120. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  121. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +16 -28
  122. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  123. package/fesm2022/seniorsistemas-angular-components-currency.mjs +5 -8
  124. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  125. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +45 -59
  126. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  127. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +108 -157
  128. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  129. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +4 -8
  130. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  131. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +17 -22
  132. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  133. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +12 -4
  134. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  135. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +4 -7
  136. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  137. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +6 -11
  138. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  139. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +4 -7
  140. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  141. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +5 -9
  142. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  143. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +29 -38
  144. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  145. package/fesm2022/seniorsistemas-angular-components-insights.mjs +17 -22
  146. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  147. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +4 -7
  148. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  149. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +30 -30
  150. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  151. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +7 -15
  152. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  153. package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -41
  154. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  155. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +5 -8
  156. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  157. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +4 -7
  158. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  159. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +9 -16
  160. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  161. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +13 -24
  162. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  163. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +4 -7
  164. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  165. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +14 -21
  166. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  167. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +11 -14
  168. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  169. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
  170. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  171. package/fesm2022/seniorsistemas-angular-components-shared.mjs +10 -18
  172. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  173. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +7 -10
  174. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  175. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +23 -34
  176. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  177. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +4 -7
  178. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  179. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +10 -12
  180. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  181. package/fesm2022/seniorsistemas-angular-components-table.mjs +29 -46
  182. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  183. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +4 -7
  184. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  185. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +6 -9
  186. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  187. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +30 -55
  188. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  189. package/fesm2022/seniorsistemas-angular-components-toast.mjs +6 -11
  190. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  191. package/fesm2022/seniorsistemas-angular-components-tree.mjs +9 -14
  192. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  193. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +5 -9
  194. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  195. package/file-picker/lib/file-picker/file-picker.component.d.ts +0 -4
  196. package/file-upload/README.md +9 -37
  197. package/gantt/lib/gantt/gantt.component.d.ts +1 -0
  198. package/global-search/lib/global-search/global-search.component.d.ts +1 -2
  199. package/ia-insight/README.md +17 -0
  200. package/image-cropper/lib/image-cropper/image-cropper.service.d.ts +1 -2
  201. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +1 -2
  202. package/info-sign/lib/info-sign/info-sign.directive.d.ts +1 -2
  203. package/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +1 -2
  204. package/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +0 -2
  205. package/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +0 -2
  206. package/insights/lib/insights/components/insights-card/insights-card.component.d.ts +0 -4
  207. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +1 -2
  208. package/kanban/lib/kanban/components/kanban-column/kanban-column.component.d.ts +0 -2
  209. package/kanban/lib/kanban/components/kanban-item/kanban-item.component.d.ts +0 -2
  210. package/kanban/lib/kanban/kanban.component.d.ts +2 -2
  211. package/loading-state/lib/loading-state/loading-state.directive.d.ts +1 -2
  212. package/locale/lib/locale/locale.service.d.ts +0 -3
  213. package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +0 -2
  214. package/locale/lib/locale/pipes/localized-currency.pipe.d.ts +0 -2
  215. package/locale/lib/locale/pipes/localized-date.pipe.d.ts +0 -2
  216. package/locale/lib/locale/pipes/localized-number.pipe.d.ts +0 -2
  217. package/locale/lib/locale/pipes/localized-time.pipe.d.ts +0 -2
  218. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +0 -2
  219. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +1 -2
  220. package/numeric/lib/numeric.pipe.d.ts +0 -3
  221. package/numeric/lib/numeric.service.d.ts +0 -2
  222. package/package.json +13 -13
  223. package/password-strength/lib/password-strength/password-strength.component.d.ts +0 -2
  224. package/password-strength/lib/password-strength/password-strength.directive.d.ts +1 -2
  225. package/picklist/lib/picklist/picklist.component.d.ts +1 -2
  226. package/product-header/README.md +17 -0
  227. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +0 -4
  228. package/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.d.ts +0 -2
  229. package/progressbar/lib/progressbar/progressbar.module.d.ts +2 -1
  230. package/shared/lib/accessibility/paginator-accessibility.directive.d.ts +1 -3
  231. package/shared/lib/accessibility/table-checkbox-accessibility.directive.d.ts +1 -2
  232. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +0 -2
  233. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +0 -4
  234. package/speech-recognition/lib/speech-recognition/speech-recognition.service.d.ts +1 -5
  235. package/speech-recognition/lib/speech-recognition/text-to-speech.service.d.ts +1 -3
  236. package/split-button/lib/split-button/split-button.component.d.ts +1 -2
  237. package/table/lib/table/row-toggler/row-toggler.directive.d.ts +1 -1
  238. package/table/lib/table/table-column/table-columns.component.d.ts +2 -6
  239. package/table/lib/table/table-paging/table-paging.component.d.ts +0 -3
  240. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -1
  241. package/text-area/lib/text-area/text-area.component.d.ts +1 -2
  242. package/text-area-ia/README.md +17 -0
  243. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +0 -2
  244. package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +1 -3
  245. package/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +0 -2
  246. package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +0 -2
  247. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +1 -5
  248. package/toast/lib/toast/toast.service.d.ts +0 -2
  249. package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +1 -3
  250. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +1 -2
  251. package/confirm-dialog/README.md +0 -226
  252. package/numeric-mask/README.md +0 -395
  253. package/pin-code-field/README.md +0 -366
  254. package/spotlight/README.md +0 -311
@@ -178,8 +178,12 @@ export class Gantt {
178
178
  if (typeof element === 'string') {
179
179
  element = document.querySelector(element);
180
180
  }
181
+ else if (element instanceof SVGElement) {
182
+ // Se já for SVGElement direto, usar como tal
183
+ svgElement = element;
184
+ }
181
185
  // get the SVGElement
182
- if (element instanceof HTMLElement) {
186
+ if (!svgElement && element instanceof HTMLElement) {
183
187
  wrapperElement = element;
184
188
  svgElement = element.querySelector('svg');
185
189
  }
@@ -809,4 +813,4 @@ export class Gantt {
809
813
  function generate_id(task) {
810
814
  return task.name + '_' + Math.random().toString(36).slice(2, 12);
811
815
  }
812
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZ2FudHQvc3JjL2xpYi9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsTUFBTSxPQUFPLEtBQUs7SUFDUCxPQUFPLEdBQVksRUFBRSxHQUFHLGNBQWMsRUFBYSxDQUFDO0lBQ3BELEtBQUssQ0FBa0I7SUFDdkIsY0FBYyxDQUFNO0lBQ3BCLEtBQUssQ0FBVTtJQUNmLE1BQU0sQ0FBTTtJQUNaLElBQUksQ0FBUztJQUNiLE1BQU0sQ0FBVztJQUNqQixpQkFBaUIsQ0FBTTtJQUN2QixJQUFJLENBQU07SUFDVixVQUFVLENBQWtCO0lBQzVCLGFBQWEsQ0FBa0I7SUFDL0IsS0FBSyxHQUFpQixJQUFJLENBQUM7SUFFMUIsUUFBUSxDQUFRO0lBQ2hCLFFBQVEsQ0FBUTtJQUV4QixZQUFZLE9BQVksRUFBRSxLQUFhLEVBQUUsT0FBMEI7UUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENB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LE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNyRixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsS0FBSztnQkFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFB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dGVudCI6WyJpbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgRW5yaWNoZWRUYXNrLCBUYXNrIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3LW1vZGUnO1xuaW1wb3J0IHsgQXJyb3cgfSBmcm9tICcuL2Fycm93JztcbmltcG9ydCB7IEJhciB9IGZyb20gJy4vYmFyJztcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi9nYW50dC1vcHRpb25zJztcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSAnLi9wb3B1cCc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuL3V0aWxzL2RhdGUtdXRpbHMnO1xuaW1wb3J0IHsgJCwgY3JlYXRlU1ZHIH0gZnJvbSAnLi91dGlscy9zdmctdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgR2FudHQge1xuICAgIHB1YmxpYyBvcHRpb25zOiBPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucyB9IGFzIE9wdGlvbnM7XG4gICAgcHVibGljIHRhc2tzPzogRW5yaWNoZWRUYXNrW107XG4gICAgcHVibGljIGRlcGVuZGVuY3lfbWFwOiBhbnk7XG4gICAgcHVibGljIGRhdGVzPzogRGF0ZVtdO1xuICAgIHB1YmxpYyBsYXllcnM6IGFueTtcbiAgICBwdWJsaWMgYmFycz86IEJhcltdO1xuICAgIHB1YmxpYyBhcnJvd3M/OiBBcnJvd1tdO1xuICAgIHB1YmxpYyBiYXJfYmVpbmdfZHJhZ2dlZDogYW55O1xuICAgIHB1YmxpYyAkc3ZnOiBhbnk7XG4gICAgcHVibGljICRjb250YWluZXI/OiBIVE1MRGl2RWxlbWVudDtcbiAgICBwdWJsaWMgcG9wdXBfd3JhcHBlcj86IEhUTUxEaXZFbGVtZW50O1xuICAgIHB1YmxpYyBwb3B1cDogUG9wdXAgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX21pbkRhdGU/OiBEYXRlO1xuICAgIHByaXZhdGUgX21heERhdGU/OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3Iod3JhcHBlcjogYW55LCB0YXNrczogVGFza1tdLCBvcHRpb25zPzogUGFydGlhbDxPcHRpb25zPikge1xuICAgICAgICB0aGlzLl9zZXR1cE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3NldHVwV3JhcHBlcih3cmFwcGVyKTtcbiAgICAgICAgdGhpcy5zZXR1cF90YXNrcyh0YXNrcyk7XG4gICAgICAgIC8vIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZpZXcgbW9kZVxuICAgICAgICB0aGlzLmNoYW5nZV92aWV3X21vZGUoKTtcbiAgICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBfdGFza3ModGFza3M6IGFueSkge1xuICAgICAgICAvLyBwcmVwYXJlIHRhc2tzXG4gICAgICAgIHRoaXMudGFza3MgPSB0YXNrcy5tYXAoKHRhc2s6IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBzdGFuZGFyZCBjb2xvcnMgaWYgbmVlZGVkXG4gICAgICAgICAgICB0YXNrLmNvbG9yID0gdGFzay5jb2xvciB8fCAnIzc4OTJBMSc7XG5cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gRGF0ZSBvYmplY3RzXG4gICAgICAgICAgICB0YXNrLl9zdGFydCA9IERhdGVVdGlscy5wYXJzZSh0YXNrLnN0YXJ0KTtcbiAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5wYXJzZSh0YXNrLmVuZCk7XG5cbiAgICAgICAgICAgIC8vIG1ha2UgdGFzayBpbnZhbGlkIGlmIGR1cmF0aW9uIHRvbyBsYXJnZVxuICAgICAgICAgICAgaWYgKERhdGVVdGlscy5kaWZmKHRhc2suX2VuZCwgdGFzay5fc3RhcnQsICd5ZWFyJykgPiAxMCkge1xuICAgICAgICAgICAgICAgIHRhc2suZW5kID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FjaGUgaW5kZXhcbiAgICAgICAgICAgIHRhc2suX2luZGV4ID0gaTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXNrLl9yb3dfaWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdGFzay5faW5kZXggPSB0YXNrLl9yb3dfaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludmFsaWQgZGF0ZXNcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCAmJiAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gdG9kYXk7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0b2RheSwgMiwgJ2RheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRhc2suc3RhcnQgJiYgdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9zdGFydCA9IERhdGVVdGlscy5hZGQodGFzay5fZW5kLCAtMiwgJ2RheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFzay5zdGFydCAmJiAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX3N0YXJ0LCAyLCAnZGF5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGhvdXJzIGlzIG5vdCBzZXQsIGFzc3VtZSB0aGUgbGFzdCBkYXkgaXMgZnVsbCBkYXlcbiAgICAgICAgICAgIC8vIGUuZzogMjAxOC0wOS0wOSBiZWNvbWVzIDIwMTgtMDktMDkgMjM6NTk6NTlcbiAgICAgICAgICAgIGNvbnN0IHRhc2tFbmRWYWx1ZXMgPSBEYXRlVXRpbHMuZ2V0RGF0ZVZhbHVlcyh0YXNrLl9lbmQpO1xuICAgICAgICAgICAgaWYgKHRhc2tFbmRWYWx1ZXMuc2xpY2UoMykuZXZlcnkoKGQpID0+IGQgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9lbmQsIDI0LCAnaG91cicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbnZhbGlkIGZsYWdcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCB8fCAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmludmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5kZXBlbmRlbmNpZXMgPT09ICdzdHJpbmcnIHx8ICF0YXNrLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGxldCBkZXBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRhc2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHMgPSB0YXNrLmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGQ6IGFueSkgPT4gZC50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+IGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLmRlcGVuZGVuY2llcyA9IGRlcHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVpZHNcbiAgICAgICAgICAgIGlmICghdGFzay5pZCkge1xuICAgICAgICAgICAgICAgIHRhc2suaWQgPSBnZW5lcmF0ZV9pZCh0YXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NldHVwRGVwZW5kZW5jaWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2godGFza3M6IFRhc2tbXSkge1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2Vfdmlld19tb2RlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZV92aWV3X21vZGUobW9kZSA9IHRoaXMub3B0aW9ucz8udmlld01vZGUpIHtcbiAgICAgICAgdGhpcy5fc2V0dXBHYW50dERhdGVzKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdTY2FsZShtb2RlKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEYXRlcygpO1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgLy8gZmlyZSB2aWV3bW9kZV9jaGFuZ2UgZXZlbnRcbiAgICAgICAgdGhpcy50cmlnZ2VyX2V2ZW50KCdvblZpZXdDaGFuZ2UnLCBbbW9kZV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYWtlX2dyaWRfaGlnaGxpZ2h0cygpIHtcbiAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICAgICAgICAgICgodGhpcy5vcHRpb25zPy5iYXJIZWlnaHQgPz8gMCkgKyAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApKSAqICh0aGlzLnRhc2tzPy5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSAvIDI7XG5cbiAgICAgICAgICAgIGxldCB4ID0gMDtcblxuICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZGF0ZXMpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLmRhdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHkgPSAoKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgLyAyO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRhdGUgPT09IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzV2Vla2VuZCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgfHwgZGF0ZS5nZXREYXkoKSA9PT0gNjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3RvZGF5LWhpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgIHkgPSAoKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgLyAyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICd3ZWVrZW5kLWhpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcnggPSAzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ5ID0gMztcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5IHx8IGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTVkcoJ3JlY3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHggKz0gdGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVuc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgWy4uLnRoaXMuJHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCcuYmFyLXdyYXBwZXInKV0uZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlld19pcyhtb2RlczogVmlld01vZGUgfCBWaWV3TW9kZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVzLnNvbWUoKG1vZGUpID0+IHRoaXMub3B0aW9ucz8udmlld01vZGUgPT09IG1vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucz8udmlld01vZGUgPT09IG1vZGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfYmFyKGlkOiBhbnkpOiBCYXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXJzPy5maW5kKChiYXI6IGFueSkgPT4gYmFyLnRhc2suaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd19wb3B1cChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwKHRoaXMucG9wdXBfd3JhcHBlciwgdGhpcy5vcHRpb25zPy5jdXN0b21Qb3B1cEh0bWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZV9wb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cD8uaGlkZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyX2V2ZW50KGV2ZW50OiBrZXlvZiBPcHRpb25zLCBhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8uW2V2ZW50XSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW2V2ZW50XS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwV3JhcHBlcihlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgbGV0IHN2Z0VsZW1lbnQsIHdyYXBwZXJFbGVtZW50O1xuXG4gICAgICAgIC8vIENTUyBTZWxlY3RvciBpcyBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIFNWR0VsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgc3ZnRWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHN2Z0VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgICAgIFwiRnJhcHDDqSBHYW50dCBvbmx5IHN1cHBvcnRzIHVzYWdlIG9mIGEgc3RyaW5nIENTUyBzZWxlY3RvciwgSFRNTCBET00gZWxlbWVudCBvciBTVkcgRE9NIGVsZW1lbnQgZm9yIHRoZSAnZWxlbWVudCcgcGFyYW1ldGVyXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3ZnIGVsZW1lbnRcbiAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgaXRcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IGNyZWF0ZVNWRygnc3ZnJywge1xuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogd3JhcHBlckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdnYW50dCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IHN2Z0VsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLiRzdmcuY2xhc3NMaXN0LmFkZCgnZ2FudHQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdyYXBwZXIgZWxlbWVudFxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2dhbnR0LWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5jb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLiRjb250YWluZXIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kc3ZnKTtcblxuICAgICAgICAvLyBwb3B1cCB3cmFwcGVyXG4gICAgICAgIHRoaXMucG9wdXBfd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIuY2xhc3NMaXN0LmFkZCgncG9wdXAtd3JhcHBlcicpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cF93cmFwcGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXR1cE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXR1cERlcGVuZGVuY2llcygpIHtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcCA9IHt9O1xuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy50YXNrcykpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0LmRlcGVuZGVuY2llcykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkIG9mIHQuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXSA9IHRoaXMuZGVwZW5kZW5jeV9tYXBbZF0gfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXS5wdXNoKHQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1NjYWxlKHZpZXdfbW9kZTogYW55KSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLm9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdNb2RlID0gdmlld19tb2RlO1xuICAgICAgICBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5RdWFydGVySG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0IC8gNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuSG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5EYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLkhhbGZEYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgLyAyO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5RdWFydGVyRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuV2Vlaykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDc7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxNDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDMwO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTIwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDM2NTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDEyMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwRGF0ZXMoKSB7XG4gICAgICAgIHRoaXMuX3NldHVwRGF0ZVZhbHVlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwR2FudHREYXRlcygpIHtcbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudGFza3MpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy50YXNrcykge1xuICAgICAgICAgICAgICAgIC8vIHNldCBnbG9iYWwgc3RhcnQgYW5kIGVuZCBkYXRlXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1pbkRhdGUgfHwgdGFzay5zdGFydCA8IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLnN0YXJ0T2YodGFzay5zdGFydCwgJ2RheScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF4RGF0ZSB8fCB0YXNrLmVuZCA+IHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGFzay5lbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMubWluRGF0ZSkgfHwgaXNOdWxsT3JVbmRlZmluZWQodGhpcy5tYXhEYXRlKSkgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zPy52aWV3TW9kZSkge1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5RdWFydGVySG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDE1KSwgJ21pbnV0ZXMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxNSwgJ21pbnV0ZXMnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICdob3VyJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLlF1YXJ0ZXJEYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyA2KSwgJ2hvdXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyA2LCAnaG91cicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5IYWxmRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMTIpLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEyLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5EYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICdkYXknKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuV2VlazpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCAnd2VlaycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICd3ZWVrJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLk1vbnRoOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksICdtb250aCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsICdtb250aCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5ZZWFyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksICd5ZWFyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgJ3llYXInKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwRGF0ZVZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5kYXRlcyA9IFtdO1xuICAgICAgICBsZXQgY3VyRGF0ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLm1pbkRhdGUpICYmICFpc051bGxPclVuZGVmaW5lZCh0aGlzLm1heERhdGUpKSB7XG4gICAgICAgICAgICB3aGlsZSAoY3VyRGF0ZSA9PT0gbnVsbCB8fCBjdXJEYXRlIDwgdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1ckRhdGUgPSBEYXRlVXRpbHMuY2xvbmUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLlllYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJEYXRlID0gRGF0ZVV0aWxzLmFkZChjdXJEYXRlLCAxLCAneWVhcicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckRhdGUgPSBEYXRlVXRpbHMuYWRkKGN1ckRhdGUsIDEsICdtb250aCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRGF0ZSA9IERhdGVVdGlscy5hZGQoY3VyRGF0ZSwgdGhpcy5vcHRpb25zPy5zdGVwLCAnaG91cicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXMucHVzaChjdXJEYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9ICh0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGggLSAxKSAvIHRoaXMuZGF0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gY29sdW1uV2lkdGggPCA0NSA/IDQ1IDogY29sdW1uV2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9iaW5kR3JpZENsaWNrKCk7XG4gICAgICAgIHRoaXMuX2JpbmRCYXJFdmVudHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyKCk7XG4gICAgICAgIHRoaXMuX3NldHVwTGF5ZXJzKCk7XG4gICAgICAgIHRoaXMuX21ha2VHcmlkKCk7XG4gICAgICAgIHRoaXMuX21ha2VEYXRlcygpO1xuICAgICAgICB0aGlzLl9tYWtlQmFycygpO1xuICAgICAgICB0aGlzLl9tYWtlQXJyb3dzKCk7XG4gICAgICAgIHRoaXMuX21hcEFycm93c09uQmFycygpO1xuICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xuICAgICAgICB0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwTGF5ZXJzKCkge1xuICAgICAgICB0aGlzLmxheWVycyA9IHt9O1xuICAgICAgICBjb25zdCBsYXllcnMgPSBbJ2dyaWQnLCAnZGF0ZScsICdhcnJvdycsICdwcm9ncmVzcycsICdiYXInLCAnZGV0YWlscyddO1xuICAgICAgICAvLyBtYWtlIGdyb3VwIGxheWVyc1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgdGhpcy5sYXllcnNbbGF5ZXJdID0gY3JlYXRlU1ZHKCdnJywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBsYXllcixcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMuJHN2ZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWQoKSB7XG4gICAgICAgIHRoaXMuX21ha2VHcmlkQmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLl9tYWtlR3JpZFJvd3MoKTtcbiAgICAgICAgdGhpcy5fbWFrZUdyaWRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfaGlnaGxpZ2h0cygpO1xuICAgICAgICB0aGlzLl9tYWtlR3JpZFRpY2tzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWRCYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgZ3JpZFdpZHRoID0gKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICBncmlkV2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0aW5jdFJvd3MgPSBbLi4ubmV3IFNldCh0aGlzLnRhc2tzPy5tYXAoKHg6IGFueSkgPT4geC5fcm93X2lkKSldO1xuICAgICAgICBjb25zdCBncmlkSGVpZ2h0ID1cbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArXG4gICAgICAgICAgICAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApIC8gMiArXG4gICAgICAgICAgICAoKHRoaXMub3B0aW9ucz8uYmFySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgKiBkaXN0aW5jdFJvd3MubGVuZ3RoO1xuXG4gICAgICAgIGNyZWF0ZVNWRygncmVjdCcsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IGdyaWRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZ3JpZEhlaWdodCxcbiAgICAgICAgICAgIGNsYXNzOiAnZ3JpZC1iYWNrZ3JvdW5kJyxcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5hdHRyKFxuICAgICAgICAgICAgdGhpcy4kc3ZnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhlaWdodDogZ3JpZEhlaWdodCxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWRSb3dzKCkge1xuICAgICAgICBjb25zdCByb3dzTGF5ZXIgPSBjcmVhdGVTVkcoJ2cnLCB7IGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCB9KTtcbiAgICAgICAgY29uc3QgbGluZXNMYXllciA9IGNyZWF0ZVNWRygnZycsIHsgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkIH0pO1xuXG4gICAgICAgIGNvbnN0IHJvd1dpZHRoID0gKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSAodGhpcy5vcHRpb25zPy5iYXJIZWlnaHQgPz8gMCkgKyAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApO1xuICAgICAgICBsZXQgcm93WSA9ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkgLyAyO1xuXG4gICAgICAgIHRoaXMudGFza3M/LmZvckVhY2goKF8pID0+IHtcbiAgICAgICAgICAgIGNyZWF0ZVNWRygncmVjdCcsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IHJvd1ksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJvd1dpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiAnZ3JpZC1yb3cnLFxuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogcm93c0xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRygnbGluZScsIHtcbiAgICAgICAgICAgICAgICB4MTogMCxcbiAgICAgICAgICAgICAgICB5MTogcm93WSArIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICB4Mjogcm93V2lkdGgsXG4gICAgICAgICAgICAgICAgeTI6IHJvd1kgKyByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdyb3ctbGluZScsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiBsaW5lc0xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJvd1kgKz0gKHRoaXMub3B0aW9ucz8uYmFySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUdyaWRIZWFkZXIoKSB7XG4gICAgICAgIC8vIGNvbnN0IGFkZElzSG91clZpZXcgPSB0aGlzLmlzSG91clZpZXcgPyAyNSA6IDEwXG4gICAgICAgIGNvbnN0IGhlYWRlcldpZHRoID0gKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSAodGhpcy5vcHRpb25zPy5oZWFkZXJIZWlnaHQgPz8gMCkgKyAxMDtcbiAgICAgICAgY3JlYXRlU1ZHKCdyZWN0Jywge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogaGVhZGVyV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCxcbiAgICAgICAgICAgIGNsYXNzOiAnZ3JpZC1oZWFkZXInLFxuICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlR3JpZFRpY2tzKCkge1xuICAgICAgICBsZXQgdGlja1ggPSAwO1xuICAgICAgICBjb25zdCB0aWNrWSA9ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkgLyAyO1xuICAgICAgICBjb25zdCB0aWNrSGVpZ2h0ID0gKCh0aGlzLm9wdGlvbnM/LmJhckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkpICogKHRoaXMudGFza3M/Lmxlbmd0aCA/PyAwKTtcblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5kYXRlcykpIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdGhpcy5kYXRlcykge1xuICAgICAgICAgICAgbGV0IHRpY2tDbGFzcyA9ICd0aWNrJztcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5RdWFydGVySG91cikgJiYgZGF0ZS5nZXRIb3VycygpID09PSAwICYmIGRhdGUuZ2V0TWludXRlcygpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgZmlyc3QgaG91ciBvZiBkYXkuXG4gICAgICAgICAgICAgICAgdGlja0NsYXNzICs9ICcgdGhpY2snO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoW1ZpZXdNb2RlLkhvdXIsIFZpZXdNb2RlLlF1YXJ0ZXJEYXksIFZpZXdNb2RlLkhhbGZEYXldKSAmJiBkYXRlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCBob3VyIG9mIGRheS5cbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpICYmIGRhdGUuZ2V0RGF0ZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgbW9uZGF5XG4gICAgICAgICAgICAgICAgdGlja0NsYXNzICs9ICcgdGhpY2snO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuV2VlaykgJiYgZGF0ZS5nZXREYXRlKCkgPj0gMSAmJiBkYXRlLmdldERhdGUoKSA8IDgpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCB3ZWVrXG4gICAgICAgICAgICAgICAgdGlja0NsYXNzICs9ICcgdGhpY2snO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpICYmIGRhdGUuZ2V0TW9udGgoKSAlIDMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrcyBmb3IgcXVhcnRlcnNcbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRygncGF0aCcsIHtcbiAgICAgICAgICAgICAgICBkOiBgTSAke3RpY2tYfSAke3RpY2tZfSB2ICR7dGlja0hlaWdodH1gLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB0aWNrQ2xhc3MsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGlja1ggKz0gKERhdGVVdGlscy5nZXREYXlzSW5Nb250aChkYXRlKSAqICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApKSAvIDMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWNrWCArPSB0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlRGF0ZXMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5fZ2V0RGF0ZXNUb0RyYXcoKTtcblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZGF0ZXMpKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGRhdGVzW2ldO1xuXG4gICAgICAgICAgICBjcmVhdGVTVkcoJ3RleHQnLCB7XG4gICAgICAgICAgICAgICAgeDogZGF0ZS5sb3dlcl94LFxuICAgICAgICAgICAgICAgIHk6IGRhdGUubG93ZXJfeSArIDIwLFxuICAgICAgICAgICAgICAgIGlubmVySFRNTDogZGF0ZS5sb3dlcl90ZXh0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiAndGl0bGUtMicsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRlLm1pZGRsZV90ZXh0KSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlU1ZHKCd0ZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLm1pZGRsZV94LFxuICAgICAgICAgICAgICAgICAgICB5OiBkYXRlLm1pZGRsZV95LFxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGRhdGUubWlkZGxlX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAnbWlkZGxlLXRleHQnLFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRlLnVwcGVyX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdXBwZXJUZXh0ID0gY3JlYXRlU1ZHKCd0ZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLnVwcGVyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUudXBwZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLnVwcGVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAndXBwZXItdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZGF0ZSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvdXQtb2YtYm91bmQgZGF0ZXNcbiAgICAgICAgICAgICAgICBpZiAoJHVwcGVyVGV4dC5nZXRCQm94KCkueDIgPiB0aGlzLmxheWVycy5ncmlkLmdldEJCb3goKS53aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAkdXBwZXJUZXh0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2dldERhdGVzVG9EcmF3KCkge1xuICAgICAgICBsZXQgbGFzdERhdGU6IGFueSA9IG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5kYXRlcz8ubWFwKChkYXRlOiBhbnksIGk6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuX2dldERhdGVJbmZvKGRhdGUsIGxhc3REYXRlLCBpKTtcbiAgICAgICAgICAgIGxhc3REYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRhdGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldERhdGVJbmZvKGRhdGU6IERhdGUsIGxhc3RfZGF0ZTogRGF0ZSwgaTogYW55KSB7XG4gICAgICAgIGlmICghbGFzdF9kYXRlKSB7XG4gICAgICAgICAgICBsYXN0X2RhdGUgPSBEYXRlVXRpbHMuYWRkKGRhdGUsIDEsICd5ZWFyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlVGV4dDogYW55ID0ge1xuICAgICAgICAgICAgLy8gcXVhcnRlciBob3VyXG4gICAgICAgICAgICBxdWFydGVySG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgcXVhcnRlckhvdXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnSEg6bW0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgLy8gaG91clxuICAgICAgICAgICAgaG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgaG91ckxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdISDptbScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBxdWFydGVyIGRheVxuICAgICAgICAgICAgcXVhcnRlckRheVVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgcXVhcnRlckRheUxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdISDptbScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBoYWxmIGRheVxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgID8gZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKSB8fCBpIDwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdEIE1NTScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QnLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0hIOm1tJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIGRheVxuICAgICAgICAgICAgZGF5VXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkgfHwgaSA9PT0gMCA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ01NTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBkYXlNaWRkbGU6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ2RkZCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICBkYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyB3ZWVrXG4gICAgICAgICAgICB3ZWVrVXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdNTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSkgOiAnJyxcblxuICAgICAgICAgICAgd2Vla0xvd2VyOlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdEIE1NTScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBtb250aFxuICAgICAgICAgICAgbW9udGhVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ1lZWVknLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBtb250aExvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdNTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIHllYXJcbiAgICAgICAgICAgIHllYXJVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ1lZWVknLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICB5ZWFyTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ1lZWVknLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBEZXNjb250YW5kbyAyMCBwYXJhIGFkY2lvbmFyIHVtYSBzZWd1bmRhIGxpbmhhIGRlIGluZm9ybWHDp8OjbyBubyBjYWJlw6dhbGhvXG4gICAgICAgIGNvbnN0IGJhc2VQb3MgPSB7XG4gICAgICAgICAgICB4OiBpICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCksXG4gICAgICAgICAgICB1cHBlcl95OiAodGhpcy5vcHRpb25zPy5oZWFkZXJIZWlnaHQgPz8gMCkgLSAyMCAtIDI1LFxuICAgICAgICAgICAgbWlkZGxlX3k6ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSAtIDIwLFxuICAgICAgICAgICAgbG93ZXJfeTogKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApIC0gMjAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHhQb3M6IGFueSA9IHtcbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyVXBwZXI6ICh0aGlzLmRhdGVzPy5sZW5ndGggPz8gMCkgPCAxNCA/ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIDogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogMjQpIC8gMixcbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyTWlkZGxlOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgICAgICBxdWFydGVySG91ckxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIGhvdXJVcHBlcjogKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSA8IDE0ID8gKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiAyNCkgLyAyLFxuICAgICAgICAgICAgaG91ck1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgaG91ckxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogNCkgLyAyLFxuICAgICAgICAgICAgcXVhcnRlckRheU1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgcXVhcnRlckRheUxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIGhhbGZEYXlVcHBlcjogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogMikgLyAyLFxuICAgICAgICAgICAgaGFsZkRheU1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgaGFsZkRheUxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG5cbiAgICAgICAgICAgIGRheVVwcGVyOiAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApIDwgMTUgPyAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSA6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDMwKSAvIDIsXG4gICAgICAgICAgICBkYXlNaWRkbGU6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMiAtIDEyLFxuICAgICAgICAgICAgZGF5TG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgd2Vla1VwcGVyOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiA0KSAvIDIsXG4gICAgICAgICAgICB3ZWVrTWlkZGxlOiAwLFxuICAgICAgICAgICAgd2Vla0xvd2VyOiAwLFxuXG4gICAgICAgICAgICBtb250aFVwcGVyOiAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApIDwgMTUgPyAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSA6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDEyKSAvIDIsXG4gICAgICAgICAgICBtb250aE1pZGRsZTogMCxcbiAgICAgICAgICAgIG1vbnRoTG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgeWVhclVwcGVyOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiAzMCkgLyAyLFxuICAgICAgICAgICAgeWVhck1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuICAgICAgICAgICAgeWVhckxvd2VyOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwcGVyX3RleHQ6IGRhdGVUZXh0W2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9VXBwZXJgXSxcbiAgICAgICAgICAgIG1pZGRsZV90ZXh0OiBkYXRlVGV4dFtgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfU1pZGRsZWBdLFxuICAgICAgICAgICAgbG93ZXJfdGV4dDogZGF0ZVRleHRbYCR7dGhpcy5vcHRpb25zPy52aWV3TW9kZSA/PyAnZGF5J31Mb3dlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeDogYmFzZVBvcy54ICsgeFBvc1tgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfVVwcGVyYF0sXG4gICAgICAgICAgICB1cHBlcl95OiBiYXNlUG9zLnVwcGVyX3ksXG4gICAgICAgICAgICBtaWRkbGVfeDogYmFzZVBvcy54ICsgeFBvc1tgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfU1pZGRsZWBdLFxuICAgICAgICAgICAgbWlkZGxlX3k6IGJhc2VQb3MubWlkZGxlX3ksXG4gICAgICAgICAgICBsb3dlcl94OiBiYXNlUG9zLnggKyB4UG9zW2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9TG93ZXJgXSxcbiAgICAgICAgICAgIGxvd2VyX3k6IGJhc2VQb3MubG93ZXJfeSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFrZUJhcnMoKSB7XG4gICAgICAgIHRoaXMuYmFycyA9IHRoaXMudGFza3M/Lm1hcCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXIgPSBuZXcgQmFyKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuYmFyLmFwcGVuZENoaWxkKGJhci5ncm91cCk7XG4gICAgICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlQXJyb3dzKCkge1xuICAgICAgICB0aGlzLmFycm93cyA9IFtdO1xuXG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnRhc2tzKSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgdGFzayBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGFzay5kZXBlbmRlbmNpZXMpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBhcnJvd3M6IEFycm93W10gPSBbXTtcbiAgICAgICAgICAgIGFycm93cyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodGFza19pZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLl9nZXRUYXNrKHRhc2tfaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlcGVuZGVuY3kgfHwgIXRoaXMuYmFycykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3cgPSBuZXcgQXJyb3coXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJzW2RlcGVuZGVuY3kuX2luZGV4XSwgLy8gZnJvbV90YXNrXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbdGFzay5faW5kZXhdLCAvLyB0b190YXNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmFycm93LmFwcGVuZENoaWxkKGFycm93LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyb3c7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhcnJvdyk6IGFycm93IGlzIEFycm93ID0+IGFycm93ICE9PSB1bmRlZmluZWQpOyAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICAgICAgdGhpcy5hcnJvd3MgPSB0aGlzLmFycm93cy5jb25jYXQoYXJyb3dzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX21hcEFycm93c09uQmFycygpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYmFycykpIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGJhciBvZiB0aGlzLmJhcnMpIHtcbiAgICAgICAgICAgIGJhci5hcnJvd3MgPSB0aGlzLmFycm93cz8uZmlsdGVyKChhcnJvdzogQXJyb3cpID0+IGFycm93LmZyb21UYXNrLnRhc2s/LmlkID09PSBiYXIudGFzaz8uaWQgfHwgYXJyb3cudG9UYXNrLnRhc2s/LmlkID09PSBiYXIudGFzaz8uaWQpID8/IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0V2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cldpZHRoID0gdGhpcy4kc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IHRoaXMuJHN2Zy5xdWVyeVNlbGVjdG9yKCcuZ3JpZCAuZ3JpZC1yb3cnKS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XG4gICAgICAgIGlmIChjdXJXaWR0aCA8IGFjdHVhbFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdmcuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGFjdHVhbFdpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFNjcm9sbFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy4kc3ZnLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAhdGhpcy5taW5EYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaG91cnNCZWZvcmVGaXJzdFRhc2sgPSBEYXRlVXRpbHMuZGlmZih0aGlzLl9nZXRPbGRlc3RTdGFydGluZ0RhdGUoKSwgdGhpcy5taW5EYXRlLCAnaG91cicpO1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbFBvcyA9IChob3Vyc0JlZm9yZUZpcnN0VGFzayAvICh0aGlzLm9wdGlvbnM/LnN0ZXAgPz8gMCkpICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLSAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKTtcblxuICAgICAgICBwYXJlbnRFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmluZEdyaWRDbGljaygpIHtcbiAgICAgICAgJC5vbih0aGlzLiRzdmcsIHRoaXMub3B0aW9ucz8ucG9wdXBUcmlnZ2VyLCAnLmdyaWQtcm93LCAuZ3JpZC1oZWFkZXInLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0X2FsbCgpO1xuICAgICAgICAgICAgdGhpcy5oaWRlX3BvcHVwKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRCYXJFdmVudHMoKSB7XG4gICAgICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCB4T25TdGFydCA9IDA7XG4gICAgICAgIGxldCBpc1Jlc2l6aW5nTGVmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNSZXNpemluZ1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGxldCBwYXJlbnRCYXJJZDogYW55ID0gbnVsbDtcbiAgICAgICAgbGV0IGJhcnM6IEJhcltdID0gW107XG4gICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBudWxsO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFjdGlvbl9pbl9wcm9ncmVzcygpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RyYWdnaW5nIHx8IGlzUmVzaXppbmdMZWZ0IHx8IGlzUmVzaXppbmdSaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCAnbW91c2Vkb3duJywgJy5iYXItd3JhcHBlciwgLmhhbmRsZScsIChlOiBhbnksIGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFyV3JhcHBlciA9ICQuY2xvc2VzdCgnLmJhci13cmFwcGVyJywgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgaXNSZXNpemluZ0xlZnQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygncmlnaHQnKSkge1xuICAgICAgICAgICAgICAgIGlzUmVzaXppbmdSaWdodCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdiYXItd3JhcHBlcicpICYmIHRoaXMub3B0aW9ucz8uYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiYXJXcmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblxuICAgICAgICAgICAgeE9uU3RhcnQgPSBlLm9mZnNldFg7XG5cbiAgICAgICAgICAgIHBhcmVudEJhcklkID0gYmFyV3JhcHBlcj8uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICBjb25zdCBpZHMgPSBbcGFyZW50QmFySWQsIC4uLnRoaXMuX2dldEFsbERlcGVuZGVudFRhc2tzKHBhcmVudEJhcklkKV07XG4gICAgICAgICAgICBiYXJzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0X2JhcihpZCkpLmZpbHRlcigoYmFyKTogYmFyIGlzIEJhciA9PiBiYXIgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBwYXJlbnRCYXJJZDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5veCA9ICRiYXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICRiYXIub3kgPSAkYmFyLmdldFkoKTtcbiAgICAgICAgICAgICAgICAkYmFyLm93aWR0aCA9ICRiYXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQub24oXG4gICAgICAgICAgICB0aGlzLiRzdmcsXG4gICAgICAgICAgICAnbW91c2Vtb3ZlJyxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbl9pbl9wcm9ncmVzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkeCA9IGUub2Zmc2V0WCAtIHhPblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGJhciA9IGJhci5lbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSB0aGlzLl9nZXRTbmFwUG9zaXRpb24oZHgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVfcG9wdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzaXppbmdMZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50QmFySWQgPT09IGJhci50YXNrPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci51cGRhdGVCYXJQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkYmFyLm93aWR0aCAtICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogJGJhci5veCArICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1Jlc2l6aW5nUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRCYXJJZCA9PT0gYmFyLnRhc2s/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRiYXIub3dpZHRoICsgJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzRHJhZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhci51cGRhdGVCYXJQb3NpdGlvbih7IHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHggfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICApO1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNEcmFnZ2luZyB8fCBpc1Jlc2l6aW5nTGVmdCB8fCBpc1Jlc2l6aW5nUmlnaHQgfHwgIXRoaXMub3B0aW9ucz8uYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiBiYXIuZ3JvdXAuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpc1Jlc2l6aW5nTGVmdCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNSZXNpemluZ1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQub24oXG4gICAgICAgICAgICB0aGlzLiRzdmcsXG4gICAgICAgICAgICAnbW91c2V1cCcsXG4gICAgICAgICAgICAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJfYmVpbmdfZHJhZ2dlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGJhciA9IGJhci5lbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoISRiYXIuZmluYWxkeCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBiYXIuZGF0ZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgYmFyLnNldEFjdGlvbkNvbXBsZXRlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QWxsRGVwZW5kZW50VGFza3ModGFza19pZDogYW55KSB7XG4gICAgICAgIGxldCBvdXQ6IGFueVtdID0gW107XG4gICAgICAgIGxldCB0b1Byb2Nlc3MgPSBbdGFza19pZF07XG4gICAgICAgIHdoaWxlICh0b1Byb2Nlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZXBzID0gdG9Qcm9jZXNzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjID0gYWNjLmNvbmNhdCh0aGlzLmRlcGVuZGVuY3lfbWFwW2N1cnJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KGRlcHMpO1xuICAgICAgICAgICAgdG9Qcm9jZXNzID0gZGVwcy5maWx0ZXIoKGQ6IGFueSkgPT4gIXRvUHJvY2Vzcy5pbmNsdWRlcyhkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0LmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRTbmFwUG9zaXRpb24oZHg6IGFueSkge1xuICAgICAgICBjb25zdCBvZHggPSBkeDtcbiAgICAgICAgbGV0IHJlbTtcbiAgICAgICAgbGV0IHBvc2l0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuSG91cikpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gNik7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDEyID8gMCA6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gNik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLldlZWspKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDcpO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAxNCA/IDAgOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMzApO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyA2MCA/IDAgOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDMwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIgPyAwIDogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRUYXNrKGlkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3M/LmZpbmQoKHRhc2s6IGFueSkgPT4gdGFzay5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldE9sZGVzdFN0YXJ0aW5nRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3M/Lm1hcCgodGFzazogYW55KSA9PiB0YXNrLl9zdGFydCkucmVkdWNlKChwcmV2X2RhdGU6IGFueSwgY3VyX2RhdGU6IGFueSkgPT4gKGN1cl9kYXRlIDw9IHByZXZfZGF0ZSA/IGN1cl9kYXRlIDogcHJldl9kYXRlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuJHN2Zy5pbm5lckhUTUwgPSAnJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlX2lkKHRhc2s6IGFueSkge1xuICAgIHJldHVybiB0YXNrLm5hbWUgKyAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMik7XG59XG4iXX0=
816
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZ2FudHQvc3JjL2xpYi9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsTUFBTSxPQUFPLEtBQUs7SUFDUCxPQUFPLEdBQVksRUFBRSxHQUFHLGNBQWMsRUFBYSxDQUFDO0lBQ3BELEtBQUssQ0FBa0I7SUFDdkIsY0FBYyxDQUFNO0lBQ3BCLEtBQUssQ0FBVTtJQUNmLE1BQU0sQ0FBTTtJQUNaLElBQUksQ0FBUztJQUNiLE1BQU0sQ0FBVztJQUNqQixpQkFBaUIsQ0FBTTtJQUN2QixJQUFJLENBQU07SUFDVixVQUFVLENBQWtCO0lBQzVCLGFBQWEsQ0FBa0I7SUFDL0IsS0FBSyxHQUFpQixJQUFJLENBQUM7SUFFMUIsUUFBUSxDQUFRO0lBQ2hCLFFBQVEsQ0FBUTtJQUV4QixZQUFZLE9BQVksRUFBRSxLQUFhLEVBQUUsT0FBMEI7UUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENB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QUMsQ0FBQztnQkFDdkYsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLEdBQUc7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckYsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLElBQUk7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDdEYsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLEtBQUs7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztn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QyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCB7IEVucmljaGVkVGFzaywgVGFzayB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL29wdGlvbnMnO1xuaW1wb3J0IHsgVmlld01vZGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmlldy1tb2RlJztcbmltcG9ydCB7IEFycm93IH0gZnJvbSAnLi9hcnJvdyc7XG5pbXBvcnQgeyBCYXIgfSBmcm9tICcuL2Jhcic7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vZ2FudHQtb3B0aW9ucyc7XG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gJy4vcG9wdXAnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi91dGlscy9kYXRlLXV0aWxzJztcbmltcG9ydCB7ICQsIGNyZWF0ZVNWRyB9IGZyb20gJy4vdXRpbHMvc3ZnLXV0aWxzJztcblxuZXhwb3J0IGNsYXNzIEdhbnR0IHtcbiAgICBwdWJsaWMgb3B0aW9uczogT3B0aW9ucyA9IHsgLi4uZGVmYXVsdE9wdGlvbnMgfSBhcyBPcHRpb25zO1xuICAgIHB1YmxpYyB0YXNrcz86IEVucmljaGVkVGFza1tdO1xuICAgIHB1YmxpYyBkZXBlbmRlbmN5X21hcDogYW55O1xuICAgIHB1YmxpYyBkYXRlcz86IERhdGVbXTtcbiAgICBwdWJsaWMgbGF5ZXJzOiBhbnk7XG4gICAgcHVibGljIGJhcnM/OiBCYXJbXTtcbiAgICBwdWJsaWMgYXJyb3dzPzogQXJyb3dbXTtcbiAgICBwdWJsaWMgYmFyX2JlaW5nX2RyYWdnZWQ6IGFueTtcbiAgICBwdWJsaWMgJHN2ZzogYW55O1xuICAgIHB1YmxpYyAkY29udGFpbmVyPzogSFRNTERpdkVsZW1lbnQ7XG4gICAgcHVibGljIHBvcHVwX3dyYXBwZXI/OiBIVE1MRGl2RWxlbWVudDtcbiAgICBwdWJsaWMgcG9wdXA6IFBvcHVwIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIF9taW5EYXRlPzogRGF0ZTtcbiAgICBwcml2YXRlIF9tYXhEYXRlPzogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHdyYXBwZXI6IGFueSwgdGFza3M6IFRhc2tbXSwgb3B0aW9ucz86IFBhcnRpYWw8T3B0aW9ucz4pIHtcbiAgICAgICAgdGhpcy5fc2V0dXBPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9zZXR1cFdyYXBwZXIod3JhcHBlcik7XG4gICAgICAgIHRoaXMuc2V0dXBfdGFza3ModGFza3MpO1xuICAgICAgICAvLyBpbml0aWFsaXplIHdpdGggZGVmYXVsdCB2aWV3IG1vZGVcbiAgICAgICAgdGhpcy5jaGFuZ2Vfdmlld19tb2RlKCk7XG4gICAgICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWF4RGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldHVwX3Rhc2tzKHRhc2tzOiBhbnkpIHtcbiAgICAgICAgLy8gcHJlcGFyZSB0YXNrc1xuICAgICAgICB0aGlzLnRhc2tzID0gdGFza3MubWFwKCh0YXNrOiBhbnksIGk6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gc3RhbmRhcmQgY29sb3JzIGlmIG5lZWRlZFxuICAgICAgICAgICAgdGFzay5jb2xvciA9IHRhc2suY29sb3IgfHwgJyM3ODkyQTEnO1xuXG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIERhdGUgb2JqZWN0c1xuICAgICAgICAgICAgdGFzay5fc3RhcnQgPSBEYXRlVXRpbHMucGFyc2UodGFzay5zdGFydCk7XG4gICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMucGFyc2UodGFzay5lbmQpO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHRhc2sgaW52YWxpZCBpZiBkdXJhdGlvbiB0b28gbGFyZ2VcbiAgICAgICAgICAgIGlmIChEYXRlVXRpbHMuZGlmZih0YXNrLl9lbmQsIHRhc2suX3N0YXJ0LCAneWVhcicpID4gMTApIHtcbiAgICAgICAgICAgICAgICB0YXNrLmVuZCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhY2hlIGluZGV4XG4gICAgICAgICAgICB0YXNrLl9pbmRleCA9IGk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5fcm93X2lkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRhc2suX2luZGV4ID0gdGFzay5fcm93X2lkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbnZhbGlkIGRhdGVzXG4gICAgICAgICAgICBpZiAoIXRhc2suc3RhcnQgJiYgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9kYXkgPSBEYXRlVXRpbHMudG9kYXkoKTtcbiAgICAgICAgICAgICAgICB0YXNrLl9zdGFydCA9IHRvZGF5O1xuICAgICAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5hZGQodG9kYXksIDIsICdkYXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0YXNrLnN0YXJ0ICYmIHRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fc3RhcnQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX2VuZCwgLTIsICdkYXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhc2suc3RhcnQgJiYgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9zdGFydCwgMiwgJ2RheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBob3VycyBpcyBub3Qgc2V0LCBhc3N1bWUgdGhlIGxhc3QgZGF5IGlzIGZ1bGwgZGF5XG4gICAgICAgICAgICAvLyBlLmc6IDIwMTgtMDktMDkgYmVjb21lcyAyMDE4LTA5LTA5IDIzOjU5OjU5XG4gICAgICAgICAgICBjb25zdCB0YXNrRW5kVmFsdWVzID0gRGF0ZVV0aWxzLmdldERhdGVWYWx1ZXModGFzay5fZW5kKTtcbiAgICAgICAgICAgIGlmICh0YXNrRW5kVmFsdWVzLnNsaWNlKDMpLmV2ZXJ5KChkKSA9PiBkID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5hZGQodGFzay5fZW5kLCAyNCwgJ2hvdXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW52YWxpZCBmbGFnXG4gICAgICAgICAgICBpZiAoIXRhc2suc3RhcnQgfHwgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5pbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRhc2suZGVwZW5kZW5jaWVzID09PSAnc3RyaW5nJyB8fCAhdGFzay5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgICAgICBkZXBzID0gdGFzay5kZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChkOiBhbnkpID0+IGQudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZDogYW55KSA9PiBkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFzay5kZXBlbmRlbmNpZXMgPSBkZXBzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB1aWRzXG4gICAgICAgICAgICBpZiAoIXRhc2suaWQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmlkID0gZ2VuZXJhdGVfaWQodGFzayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZXR1cERlcGVuZGVuY2llcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWZyZXNoKHRhc2tzOiBUYXNrW10pIHtcbiAgICAgICAgdGhpcy5zZXR1cF90YXNrcyh0YXNrcyk7XG4gICAgICAgIHRoaXMuY2hhbmdlX3ZpZXdfbW9kZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2Vfdmlld19tb2RlKG1vZGUgPSB0aGlzLm9wdGlvbnM/LnZpZXdNb2RlKSB7XG4gICAgICAgIHRoaXMuX3NldHVwR2FudHREYXRlcygpO1xuICAgICAgICB0aGlzLl91cGRhdGVWaWV3U2NhbGUobW9kZSk7XG4gICAgICAgIHRoaXMuX3NldHVwRGF0ZXMoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICAgIC8vIGZpcmUgdmlld21vZGVfY2hhbmdlIGV2ZW50XG4gICAgICAgIHRoaXMudHJpZ2dlcl9ldmVudCgnb25WaWV3Q2hhbmdlJywgW21vZGVdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFrZV9ncmlkX2hpZ2hsaWdodHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuRGF5KSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgICAgICAgICAoKHRoaXMub3B0aW9ucz8uYmFySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgKiAodGhpcy50YXNrcz8ubGVuZ3RoID8/IDApICtcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zPy5oZWFkZXJIZWlnaHQgPz8gMCkgK1xuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkgLyAyO1xuXG4gICAgICAgICAgICBsZXQgeCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGVzKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdGhpcy5kYXRlcykge1xuICAgICAgICAgICAgICAgIGxldCB5ID0gKCh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkpIC8gMjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXRlID09PSBEYXRlVXRpbHMudG9kYXkoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1dlZWtlbmQgPSBkYXRlLmdldERheSgpID09PSAwIHx8IGRhdGUuZ2V0RGF5KCkgPT09IDY7XG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICd0b2RheS1oaWdobGlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB5ID0gKCh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkpIC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnd2Vla2VuZC1oaWdobGlnaHQnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJ4ID0gMztcbiAgICAgICAgICAgICAgICBjb25zdCByeSA9IDM7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNUb2RheSB8fCBpc1dlZWtlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU1ZHKCdyZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgICAgICAgICByeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB4ICs9IHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1bnNlbGVjdF9hbGwoKSB7XG4gICAgICAgIFsuLi50aGlzLiRzdmcucXVlcnlTZWxlY3RvckFsbCgnLmJhci13cmFwcGVyJyldLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZpZXdfaXMobW9kZXM6IFZpZXdNb2RlIHwgVmlld01vZGVbXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2Rlcy5zb21lKChtb2RlKSA9PiB0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID09PSBtb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID09PSBtb2RlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2JhcihpZDogYW55KTogQmFyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFycz8uZmluZCgoYmFyOiBhbnkpID0+IGJhci50YXNrLmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dfcG9wdXAob3B0aW9uczogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5wb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cCh0aGlzLnBvcHVwX3dyYXBwZXIsIHRoaXMub3B0aW9ucz8uY3VzdG9tUG9wdXBIdG1sKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcHVwLnNob3cob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVfcG9wdXAoKSB7XG4gICAgICAgIHRoaXMucG9wdXA/LmhpZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlcl9ldmVudChldmVudDoga2V5b2YgT3B0aW9ucywgYXJnczogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LltldmVudF0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1tldmVudF0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXR1cFdyYXBwZXIoZWxlbWVudDogYW55KSB7XG4gICAgICAgIGxldCBzdmdFbGVtZW50LCB3cmFwcGVyRWxlbWVudDtcblxuICAgICAgICAvLyBDU1MgU2VsZWN0b3IgaXMgcGFzc2VkXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBTZSBqw6EgZm9yIFNWR0VsZW1lbnQgZGlyZXRvLCB1c2FyIGNvbW8gdGFsXG4gICAgICAgICAgICBzdmdFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCB0aGUgU1ZHRWxlbWVudFxuICAgICAgICBpZiAoIXN2Z0VsZW1lbnQgJiYgZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBzdmdFbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuICAgICAgICAgICAgc3ZnRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgICAgXCJGcmFwcMOpIEdhbnR0IG9ubHkgc3VwcG9ydHMgdXNhZ2Ugb2YgYSBzdHJpbmcgQ1NTIHNlbGVjdG9yLCBIVE1MIERPTSBlbGVtZW50IG9yIFNWRyBET00gZWxlbWVudCBmb3IgdGhlICdlbGVtZW50JyBwYXJhbWV0ZXJcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdmcgZWxlbWVudFxuICAgICAgICBpZiAoIXN2Z0VsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpdFxuICAgICAgICAgICAgdGhpcy4kc3ZnID0gY3JlYXRlU1ZHKCdzdmcnLCB7XG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB3cmFwcGVyRWxlbWVudCxcbiAgICAgICAgICAgICAgICBjbGFzczogJ2dhbnR0JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kc3ZnID0gc3ZnRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuJHN2Zy5jbGFzc0xpc3QuYWRkKCdnYW50dCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd3JhcHBlciBlbGVtZW50XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZ2FudHQtY29udGFpbmVyJyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRjb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGggKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuJHN2Zy5wYXJlbnRFbGVtZW50O1xuICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuJGNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRzdmcpO1xuXG4gICAgICAgIC8vIHBvcHVwIHdyYXBwZXJcbiAgICAgICAgdGhpcy5wb3B1cF93cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucG9wdXBfd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdwb3B1cC13cmFwcGVyJyk7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwX3dyYXBwZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwT3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldHVwRGVwZW5kZW5jaWVzKCkge1xuICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwID0ge307XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLnRhc2tzKSkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy50YXNrcykge1xuICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHQuZGVwZW5kZW5jaWVzKSkgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGQgb2YgdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwW2RdID0gdGhpcy5kZXBlbmRlbmN5X21hcFtkXSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwW2RdLnB1c2godC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVWaWV3U2NhbGUodmlld19tb2RlOiBhbnkpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMub3B0aW9ucykpIHJldHVybjtcblxuICAgICAgICB0aGlzLm9wdGlvbnMudmlld01vZGUgPSB2aWV3X21vZGU7XG4gICAgICAgIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLlF1YXJ0ZXJIb3VyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gMjQgLyA0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5Ib3VyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gMjQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLkRheSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuSGFsZkRheSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLlF1YXJ0ZXJEYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgLyA0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5XZWVrKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0ICogNztcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDE0MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0ICogMzA7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxMjA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0ICogMzY1O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTIwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBEYXRlcygpIHtcbiAgICAgICAgdGhpcy5fc2V0dXBEYXRlVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBHYW50dERhdGVzKCkge1xuICAgICAgICB0aGlzLl9taW5EYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9tYXhEYXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy50YXNrcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFzayBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGdsb2JhbCBzdGFydCBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWluRGF0ZSB8fCB0YXNrLnN0YXJ0IDwgdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuc3RhcnRPZih0YXNrLnN0YXJ0LCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXhEYXRlIHx8IHRhc2suZW5kID4gdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSB0YXNrLmVuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5taW5EYXRlKSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLm1heERhdGUpKSByZXR1cm47XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnM/LnZpZXdNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLlF1YXJ0ZXJIb3VyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMTUpLCAnbWludXRlcycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDE1LCAnbWludXRlcycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5Ib3VyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksICdob3VyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgJ2hvdXInKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuUXVhcnRlckRheTpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDYpLCAnaG91cicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDYsICdob3VyJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLkhhbGZEYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxMiksICdob3VyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMTIsICdob3VyJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLkRheTpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5XZWVrOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksICd3ZWVrJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgJ3dlZWsnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLlllYXI6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgJ3llYXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCAneWVhcicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBEYXRlVmFsdWVzKCkge1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIGxldCBjdXJEYXRlID0gbnVsbDtcblxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMubWluRGF0ZSkgJiYgIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMubWF4RGF0ZSkpIHtcbiAgICAgICAgICAgIHdoaWxlIChjdXJEYXRlID09PSBudWxsIHx8IGN1ckRhdGUgPCB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1ckRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyRGF0ZSA9IERhdGVVdGlscy5jbG9uZSh0aGlzLm1pbkRhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuWWVhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckRhdGUgPSBEYXRlVXRpbHMuYWRkKGN1ckRhdGUsIDEsICd5ZWFyJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLk1vbnRoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRGF0ZSA9IERhdGVVdGlscy5hZGQoY3VyRGF0ZSwgMSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJEYXRlID0gRGF0ZVV0aWxzLmFkZChjdXJEYXRlLCB0aGlzLm9wdGlvbnM/LnN0ZXAsICdob3VyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlcy5wdXNoKGN1ckRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8uY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gKHRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCAtIDEpIC8gdGhpcy5kYXRlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aCA8IDQ1ID8gNDUgOiBjb2x1bW5XaWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRFdmVudHMoKSB7XG4gICAgICAgIHRoaXMuX2JpbmRHcmlkQ2xpY2soKTtcbiAgICAgICAgdGhpcy5fYmluZEJhckV2ZW50cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlbmRlcigpIHtcbiAgICAgICAgdGhpcy5fY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBMYXllcnMoKTtcbiAgICAgICAgdGhpcy5fbWFrZUdyaWQoKTtcbiAgICAgICAgdGhpcy5fbWFrZURhdGVzKCk7XG4gICAgICAgIHRoaXMuX21ha2VCYXJzKCk7XG4gICAgICAgIHRoaXMuX21ha2VBcnJvd3MoKTtcbiAgICAgICAgdGhpcy5fbWFwQXJyb3dzT25CYXJzKCk7XG4gICAgICAgIHRoaXMuX3NldFdpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBMYXllcnMoKSB7XG4gICAgICAgIHRoaXMubGF5ZXJzID0ge307XG4gICAgICAgIGNvbnN0IGxheWVycyA9IFsnZ3JpZCcsICdkYXRlJywgJ2Fycm93JywgJ3Byb2dyZXNzJywgJ2JhcicsICdkZXRhaWxzJ107XG4gICAgICAgIC8vIG1ha2UgZ3JvdXAgbGF5ZXJzXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmxheWVyc1tsYXllcl0gPSBjcmVhdGVTVkcoJ2cnLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IGxheWVyLFxuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy4kc3ZnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlR3JpZCgpIHtcbiAgICAgICAgdGhpcy5fbWFrZUdyaWRCYWNrZ3JvdW5kKCk7XG4gICAgICAgIHRoaXMuX21ha2VHcmlkUm93cygpO1xuICAgICAgICB0aGlzLl9tYWtlR3JpZEhlYWRlcigpO1xuICAgICAgICB0aGlzLm1ha2VfZ3JpZF9oaWdobGlnaHRzKCk7XG4gICAgICAgIHRoaXMuX21ha2VHcmlkVGlja3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlR3JpZEJhY2tncm91bmQoKSB7XG4gICAgICAgIGxldCBncmlkV2lkdGggPSAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8uY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGdyaWRXaWR0aCA9IHRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc3RpbmN0Um93cyA9IFsuLi5uZXcgU2V0KHRoaXMudGFza3M/Lm1hcCgoeDogYW55KSA9PiB4Ll9yb3dfaWQpKV07XG4gICAgICAgIGNvbnN0IGdyaWRIZWlnaHQgPVxuICAgICAgICAgICAgKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICtcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCkgLyAyICtcbiAgICAgICAgICAgICgodGhpcy5vcHRpb25zPy5iYXJIZWlnaHQgPz8gMCkgKyAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApKSAqIGRpc3RpbmN0Um93cy5sZW5ndGg7XG5cbiAgICAgICAgY3JlYXRlU1ZHKCdyZWN0Jywge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogZ3JpZFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBncmlkSGVpZ2h0LFxuICAgICAgICAgICAgY2xhc3M6ICdncmlkLWJhY2tncm91bmQnLFxuICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICB9KTtcblxuICAgICAgICAkLmF0dHIoXG4gICAgICAgICAgICB0aGlzLiRzdmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBncmlkSGVpZ2h0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlR3JpZFJvd3MoKSB7XG4gICAgICAgIGNvbnN0IHJvd3NMYXllciA9IGNyZWF0ZVNWRygnZycsIHsgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkIH0pO1xuICAgICAgICBjb25zdCBsaW5lc0xheWVyID0gY3JlYXRlU1ZHKCdnJywgeyBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQgfSk7XG5cbiAgICAgICAgY29uc3Qgcm93V2lkdGggPSAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCk7XG4gICAgICAgIGNvbnN0IHJvd0hlaWdodCA9ICh0aGlzLm9wdGlvbnM/LmJhckhlaWdodCA/PyAwKSArICh0aGlzLm9wdGlvbnM/LnBhZGRpbmcgPz8gMCk7XG4gICAgICAgIGxldCByb3dZID0gKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSAvIDI7XG5cbiAgICAgICAgdGhpcy50YXNrcz8uZm9yRWFjaCgoXykgPT4ge1xuICAgICAgICAgICAgY3JlYXRlU1ZHKCdyZWN0Jywge1xuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogcm93WSxcbiAgICAgICAgICAgICAgICB3aWR0aDogcm93V2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdncmlkLXJvdycsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiByb3dzTGF5ZXIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY3JlYXRlU1ZHKCdsaW5lJywge1xuICAgICAgICAgICAgICAgIHgxOiAwLFxuICAgICAgICAgICAgICAgIHkxOiByb3dZICsgcm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgIHgyOiByb3dXaWR0aCxcbiAgICAgICAgICAgICAgICB5Mjogcm93WSArIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICBjbGFzczogJ3Jvdy1saW5lJyxcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IGxpbmVzTGF5ZXIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcm93WSArPSAodGhpcy5vcHRpb25zPy5iYXJIZWlnaHQgPz8gMCkgKyAodGhpcy5vcHRpb25zPy5wYWRkaW5nID8/IDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlR3JpZEhlYWRlcigpIHtcbiAgICAgICAgLy8gY29uc3QgYWRkSXNIb3VyVmlldyA9IHRoaXMuaXNIb3VyVmlldyA/IDI1IDogMTBcbiAgICAgICAgY29uc3QgaGVhZGVyV2lkdGggPSAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCk7XG4gICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSArIDEwO1xuICAgICAgICBjcmVhdGVTVkcoJ3JlY3QnLCB7XG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgIHdpZHRoOiBoZWFkZXJXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0LFxuICAgICAgICAgICAgY2xhc3M6ICdncmlkLWhlYWRlcicsXG4gICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21ha2VHcmlkVGlja3MoKSB7XG4gICAgICAgIGxldCB0aWNrWCA9IDA7XG4gICAgICAgIGNvbnN0IHRpY2tZID0gKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSAvIDI7XG4gICAgICAgIGNvbnN0IHRpY2tIZWlnaHQgPSAoKHRoaXMub3B0aW9ucz8uYmFySGVpZ2h0ID8/IDApICsgKHRoaXMub3B0aW9ucz8ucGFkZGluZyA/PyAwKSkgKiAodGhpcy50YXNrcz8ubGVuZ3RoID8/IDApO1xuXG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGVzKSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLmRhdGVzKSB7XG4gICAgICAgICAgICBsZXQgdGlja0NsYXNzID0gJ3RpY2snO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLlF1YXJ0ZXJIb3VyKSAmJiBkYXRlLmdldEhvdXJzKCkgPT09IDAgJiYgZGF0ZS5nZXRNaW51dGVzKCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCBob3VyIG9mIGRheS5cbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhbVmlld01vZGUuSG91ciwgVmlld01vZGUuUXVhcnRlckRheSwgVmlld01vZGUuSGFsZkRheV0pICYmIGRhdGUuZ2V0SG91cnMoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHRoaWNrIHRpY2sgZm9yIGZpcnN0IGhvdXIgb2YgZGF5LlxuICAgICAgICAgICAgICAgIHRpY2tDbGFzcyArPSAnIHRoaWNrJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLkRheSkgJiYgZGF0ZS5nZXREYXRlKCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBtb25kYXlcbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5XZWVrKSAmJiBkYXRlLmdldERhdGUoKSA+PSAxICYmIGRhdGUuZ2V0RGF0ZSgpIDwgOCkge1xuICAgICAgICAgICAgICAgIC8vIHRoaWNrIHRpY2sgZm9yIGZpcnN0IHdlZWtcbiAgICAgICAgICAgICAgICB0aWNrQ2xhc3MgKz0gJyB0aGljayc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkgJiYgZGF0ZS5nZXRNb250aCgpICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHRoaWNrIHRpY2tzIGZvciBxdWFydGVyc1xuICAgICAgICAgICAgICAgIHRpY2tDbGFzcyArPSAnIHRoaWNrJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3JlYXRlU1ZHKCdwYXRoJywge1xuICAgICAgICAgICAgICAgIGQ6IGBNICR7dGlja1h9ICR7dGlja1l9IHYgJHt0aWNrSGVpZ2h0fWAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRpY2tDbGFzcyxcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aWNrWCArPSAoRGF0ZVV0aWxzLmdldERheXNJbk1vbnRoKGRhdGUpICogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkpIC8gMzA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRpY2tYICs9IHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX21ha2VEYXRlcygpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLl9nZXREYXRlc1RvRHJhdygpO1xuXG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZChkYXRlcykpIHJldHVybjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZGF0ZXNbaV07XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRygndGV4dCcsIHtcbiAgICAgICAgICAgICAgICB4OiBkYXRlLmxvd2VyX3gsXG4gICAgICAgICAgICAgICAgeTogZGF0ZS5sb3dlcl95ICsgMjAsXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLmxvd2VyX3RleHQsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICd0aXRsZS0yJyxcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGRhdGUubWlkZGxlX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVTVkcoJ3RleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IGRhdGUubWlkZGxlX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUubWlkZGxlX3ksXG4gICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogZGF0ZS5taWRkbGVfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICdtaWRkbGUtdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZGF0ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGUudXBwZXJfdGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0ICR1cHBlclRleHQgPSBjcmVhdGVTVkcoJ3RleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IGRhdGUudXBwZXJfeCxcbiAgICAgICAgICAgICAgICAgICAgeTogZGF0ZS51cHBlcl95LFxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGRhdGUudXBwZXJfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICd1cHBlci10ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG91dC1vZi1ib3VuZCBkYXRlc1xuICAgICAgICAgICAgICAgIGlmICgkdXBwZXJUZXh0LmdldEJCb3goKS54MiA+IHRoaXMubGF5ZXJzLmdyaWQuZ2V0QkJveCgpLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICR1cHBlclRleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RGF0ZXNUb0RyYXcoKSB7XG4gICAgICAgIGxldCBsYXN0RGF0ZTogYW55ID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmRhdGVzPy5tYXAoKGRhdGU6IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkID0gdGhpcy5fZ2V0RGF0ZUluZm8oZGF0ZSwgbGFzdERhdGUsIGkpO1xuICAgICAgICAgICAgbGFzdERhdGUgPSBkYXRlO1xuICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGF0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RGF0ZUluZm8oZGF0ZTogRGF0ZSwgbGFzdF9kYXRlOiBEYXRlLCBpOiBhbnkpIHtcbiAgICAgICAgaWYgKCFsYXN0X2RhdGUpIHtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IERhdGVVdGlscy5hZGQoZGF0ZSwgMSwgJ3llYXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGVUZXh0OiBhbnkgPSB7XG4gICAgICAgICAgICAvLyBxdWFydGVyIGhvdXJcbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyVXBwZXI6IGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCBNTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBxdWFydGVySG91ckxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdISDptbScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBob3VyXG4gICAgICAgICAgICBob3VyVXBwZXI6IGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCBNTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBob3VyTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0hIOm1tJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIHF1YXJ0ZXIgZGF5XG4gICAgICAgICAgICBxdWFydGVyRGF5VXBwZXI6IGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCBNTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICBxdWFydGVyRGF5TG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0hIOm1tJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIGhhbGYgZGF5XG4gICAgICAgICAgICBoYWxmRGF5VXBwZXI6XG4gICAgICAgICAgICAgICAgZGF0ZS5nZXREYXRlKCkgIT09IGxhc3RfZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICAgICAgPyBkYXRlLmdldE1vbnRoKCkgIT09IGxhc3RfZGF0ZS5nZXRNb250aCgpIHx8IGkgPCAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnRCcsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG5cbiAgICAgICAgICAgIGhhbGZEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnSEg6bW0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgLy8gZGF5XG4gICAgICAgICAgICBkYXlVcHBlcjogZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKSB8fCBpID09PSAwID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnTU1NTScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpIDogJycsXG5cbiAgICAgICAgICAgIGRheU1pZGRsZTogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnZGRkJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGRheUxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdEJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIHdlZWtcbiAgICAgICAgICAgIHdlZWtVcHBlcjogZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKSA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ01NTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSA6ICcnLFxuXG4gICAgICAgICAgICB3ZWVrTG93ZXI6XG4gICAgICAgICAgICAgICAgZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ0QgTU1NJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICAgICAgOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsICdEJywgdGhpcy5vcHRpb25zPy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIG1vbnRoXG4gICAgICAgICAgICBtb250aFVwcGVyOiBkYXRlLmdldEZ1bGxZZWFyKCkgIT09IGxhc3RfZGF0ZS5nZXRGdWxsWWVhcigpID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnWVlZWScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpIDogJycsXG5cbiAgICAgICAgICAgIG1vbnRoTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgJ01NTU0nLCB0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgLy8geWVhclxuICAgICAgICAgICAgeWVhclVwcGVyOiBkYXRlLmdldEZ1bGxZZWFyKCkgIT09IGxhc3RfZGF0ZS5nZXRGdWxsWWVhcigpID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnWVlZWScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpIDogJycsXG5cbiAgICAgICAgICAgIHllYXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCAnWVlZWScsIHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIERlc2NvbnRhbmRvIDIwIHBhcmEgYWRjaW9uYXIgdW1hIHNlZ3VuZGEgbGluaGEgZGUgaW5mb3JtYcOnw6NvIG5vIGNhYmXDp2FsaG9cbiAgICAgICAgY29uc3QgYmFzZVBvcyA9IHtcbiAgICAgICAgICAgIHg6IGkgKiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSxcbiAgICAgICAgICAgIHVwcGVyX3k6ICh0aGlzLm9wdGlvbnM/LmhlYWRlckhlaWdodCA/PyAwKSAtIDIwIC0gMjUsXG4gICAgICAgICAgICBtaWRkbGVfeTogKHRoaXMub3B0aW9ucz8uaGVhZGVySGVpZ2h0ID8/IDApIC0gMjAsXG4gICAgICAgICAgICBsb3dlcl95OiAodGhpcy5vcHRpb25zPy5oZWFkZXJIZWlnaHQgPz8gMCkgLSAyMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeFBvczogYW55ID0ge1xuICAgICAgICAgICAgcXVhcnRlckhvdXJVcHBlcjogKHRoaXMuZGF0ZXM/Lmxlbmd0aCA/PyAwKSA8IDE0ID8gKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiAyNCkgLyAyLFxuICAgICAgICAgICAgcXVhcnRlckhvdXJNaWRkbGU6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyTG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgaG91clVwcGVyOiAodGhpcy5kYXRlcz8ubGVuZ3RoID8/IDApIDwgMTQgPyAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSA6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDI0KSAvIDIsXG4gICAgICAgICAgICBob3VyTWlkZGxlOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgICAgICBob3VyTG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgcXVhcnRlckRheVVwcGVyOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiA0KSAvIDIsXG4gICAgICAgICAgICBxdWFydGVyRGF5TWlkZGxlOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgICAgICBxdWFydGVyRGF5TG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOiAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgKiAyKSAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5TWlkZGxlOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcblxuICAgICAgICAgICAgZGF5VXBwZXI6ICh0aGlzLmRhdGVzPy5sZW5ndGggPz8gMCkgPCAxNSA/ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIDogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogMzApIC8gMixcbiAgICAgICAgICAgIGRheU1pZGRsZTogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyIC0gMTIsXG4gICAgICAgICAgICBkYXlMb3dlcjogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuXG4gICAgICAgICAgICB3ZWVrVXBwZXI6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDQpIC8gMixcbiAgICAgICAgICAgIHdlZWtNaWRkbGU6IDAsXG4gICAgICAgICAgICB3ZWVrTG93ZXI6IDAsXG5cbiAgICAgICAgICAgIG1vbnRoVXBwZXI6ICh0aGlzLmRhdGVzPy5sZW5ndGggPz8gMCkgPCAxNSA/ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIDogKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApICogMTIpIC8gMixcbiAgICAgICAgICAgIG1vbnRoTWlkZGxlOiAwLFxuICAgICAgICAgICAgbW9udGhMb3dlcjogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAyLFxuXG4gICAgICAgICAgICB5ZWFyVXBwZXI6ICgodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAqIDMwKSAvIDIsXG4gICAgICAgICAgICB5ZWFyTWlkZGxlOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDIsXG4gICAgICAgICAgICB5ZWFyTG93ZXI6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMixcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXBwZXJfdGV4dDogZGF0ZVRleHRbYCR7dGhpcy5vcHRpb25zPy52aWV3TW9kZSA/PyAnZGF5J31VcHBlcmBdLFxuICAgICAgICAgICAgbWlkZGxlX3RleHQ6IGRhdGVUZXh0W2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9TWlkZGxlYF0sXG4gICAgICAgICAgICBsb3dlcl90ZXh0OiBkYXRlVGV4dFtgJHt0aGlzLm9wdGlvbnM/LnZpZXdNb2RlID8/ICdkYXknfUxvd2VyYF0sXG4gICAgICAgICAgICB1cHBlcl94OiBiYXNlUG9zLnggKyB4UG9zW2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9VXBwZXJgXSxcbiAgICAgICAgICAgIHVwcGVyX3k6IGJhc2VQb3MudXBwZXJfeSxcbiAgICAgICAgICAgIG1pZGRsZV94OiBiYXNlUG9zLnggKyB4UG9zW2Ake3RoaXMub3B0aW9ucz8udmlld01vZGUgPz8gJ2RheSd9TWlkZGxlYF0sXG4gICAgICAgICAgICBtaWRkbGVfeTogYmFzZVBvcy5taWRkbGVfeSxcbiAgICAgICAgICAgIGxvd2VyX3g6IGJhc2VQb3MueCArIHhQb3NbYCR7dGhpcy5vcHRpb25zPy52aWV3TW9kZSA/PyAnZGF5J31Mb3dlcmBdLFxuICAgICAgICAgICAgbG93ZXJfeTogYmFzZVBvcy5sb3dlcl95LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYWtlQmFycygpIHtcbiAgICAgICAgdGhpcy5iYXJzID0gdGhpcy50YXNrcz8ubWFwKCh0YXNrOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhciA9IG5ldyBCYXIodGhpcywgdGFzayk7XG4gICAgICAgICAgICB0aGlzLmxheWVycy5iYXIuYXBwZW5kQ2hpbGQoYmFyLmdyb3VwKTtcbiAgICAgICAgICAgIHJldHVybiBiYXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21ha2VBcnJvd3MoKSB7XG4gICAgICAgIHRoaXMuYXJyb3dzID0gW107XG5cbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudGFza3MpKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0YXNrLmRlcGVuZGVuY2llcykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGFycm93czogQXJyb3dbXSA9IFtdO1xuICAgICAgICAgICAgYXJyb3dzID0gdGFzay5kZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgICAubWFwKCh0YXNrX2lkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHRoaXMuX2dldFRhc2sodGFza19pZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGVwZW5kZW5jeSB8fCAhdGhpcy5iYXJzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJvdyA9IG5ldyBBcnJvdyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbZGVwZW5kZW5jeS5faW5kZXhdLCAvLyBmcm9tX3Rhc2tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyc1t0YXNrLl9pbmRleF0sIC8vIHRvX3Rhc2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuYXJyb3cuYXBwZW5kQ2hpbGQoYXJyb3cuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJvdztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGFycm93KTogYXJyb3cgaXMgQXJyb3cgPT4gYXJyb3cgIT09IHVuZGVmaW5lZCk7IC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgICB0aGlzLmFycm93cyA9IHRoaXMuYXJyb3dzLmNvbmNhdChhcnJvd3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFwQXJyb3dzT25CYXJzKCkge1xuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5iYXJzKSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgYmFyIG9mIHRoaXMuYmFycykge1xuICAgICAgICAgICAgYmFyLmFycm93cyA9IHRoaXMuYXJyb3dzPy5maWx0ZXIoKGFycm93OiBBcnJvdykgPT4gYXJyb3cuZnJvbVRhc2sudGFzaz8uaWQgPT09IGJhci50YXNrPy5pZCB8fCBhcnJvdy50b1Rhc2sudGFzaz8uaWQgPT09IGJhci50YXNrPy5pZCkgPz8gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgY3VyV2lkdGggPSB0aGlzLiRzdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbnN0IGFjdHVhbFdpZHRoID0gdGhpcy4kc3ZnLnF1ZXJ5U2VsZWN0b3IoJy5ncmlkIC5ncmlkLXJvdycpLmdldEF0dHJpYnV0ZSgnd2lkdGgnKTtcbiAgICAgICAgaWYgKGN1cldpZHRoIDwgYWN0dWFsV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuJHN2Zy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYWN0dWFsV2lkdGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0U2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50IHx8ICF0aGlzLm1pbkRhdGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBob3Vyc0JlZm9yZUZpcnN0VGFzayA9IERhdGVVdGlscy5kaWZmKHRoaXMuX2dldE9sZGVzdFN0YXJ0aW5nRGF0ZSgpLCB0aGlzLm1pbkRhdGUsICdob3VyJyk7XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsUG9zID0gKGhvdXJzQmVmb3JlRmlyc3RUYXNrIC8gKHRoaXMub3B0aW9ucz8uc3RlcCA/PyAwKSkgKiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAtICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApO1xuXG4gICAgICAgIHBhcmVudEVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kR3JpZENsaWNrKCkge1xuICAgICAgICAkLm9uKHRoaXMuJHN2ZywgdGhpcy5vcHRpb25zPy5wb3B1cFRyaWdnZXIsICcuZ3JpZC1yb3csIC5ncmlkLWhlYWRlcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RfYWxsKCk7XG4gICAgICAgICAgICB0aGlzLmhpZGVfcG9wdXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmluZEJhckV2ZW50cygpIHtcbiAgICAgICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHhPblN0YXJ0ID0gMDtcbiAgICAgICAgbGV0IGlzUmVzaXppbmdMZWZ0ID0gZmFsc2U7XG4gICAgICAgIGxldCBpc1Jlc2l6aW5nUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBhcmVudEJhcklkOiBhbnkgPSBudWxsO1xuICAgICAgICBsZXQgYmFyczogQmFyW10gPSBbXTtcbiAgICAgICAgdGhpcy5iYXJfYmVpbmdfZHJhZ2dlZCA9IG51bGw7XG5cbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uX2luX3Byb2dyZXNzKCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRHJhZ2dpbmcgfHwgaXNSZXNpemluZ0xlZnQgfHwgaXNSZXNpemluZ1JpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgJC5vbih0aGlzLiRzdmcsICdtb3VzZWRvd24nLCAnLmJhci13cmFwcGVyLCAuaGFuZGxlJywgKGU6IGFueSwgZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXJXcmFwcGVyID0gJC5jbG9zZXN0KCcuYmFyLXdyYXBwZXInLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsZWZ0JykpIHtcbiAgICAgICAgICAgICAgICBpc1Jlc2l6aW5nTGVmdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgaXNSZXNpemluZ1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Jhci13cmFwcGVyJykgJiYgdGhpcy5vcHRpb25zPy5hbGxvd01vdmVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhcldyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuXG4gICAgICAgICAgICB4T25TdGFydCA9IGUub2Zmc2V0WDtcblxuICAgICAgICAgICAgcGFyZW50QmFySWQgPSBiYXJXcmFwcGVyPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGlkcyA9IFtwYXJlbnRCYXJJZCwgLi4udGhpcy5fZ2V0QWxsRGVwZW5kZW50VGFza3MocGFyZW50QmFySWQpXTtcbiAgICAgICAgICAgIGJhcnMgPSBpZHMubWFwKChpZCkgPT4gdGhpcy5nZXRfYmFyKGlkKSkuZmlsdGVyKChiYXIpOiBiYXIgaXMgQmFyID0+IGJhciAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgdGhpcy5iYXJfYmVpbmdfZHJhZ2dlZCA9IHBhcmVudEJhcklkO1xuXG4gICAgICAgICAgICBiYXJzLmZvckVhY2goKGJhcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRiYXIgPSBiYXIuZWxlbWVudDtcbiAgICAgICAgICAgICAgICAkYmFyLm94ID0gJGJhci5nZXRYKCk7XG4gICAgICAgICAgICAgICAgJGJhci5veSA9ICRiYXIuZ2V0WSgpO1xuICAgICAgICAgICAgICAgICRiYXIub3dpZHRoID0gJGJhci5nZXRXaWR0aCgpO1xuICAgICAgICAgICAgICAgICRiYXIuZmluYWxkeCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5vbihcbiAgICAgICAgICAgIHRoaXMuJHN2ZyxcbiAgICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWN0aW9uX2luX3Byb2dyZXNzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGR4ID0gZS5vZmZzZXRYIC0geE9uU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICBiYXJzLmZvckVhY2goKGJhcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICRiYXIuZmluYWxkeCA9IHRoaXMuX2dldFNuYXBQb3NpdGlvbihkeCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZV9wb3B1cCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXNpemluZ0xlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRCYXJJZCA9PT0gYmFyLnRhc2s/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogJGJhci5veCArICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRiYXIub3dpZHRoIC0gJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAkYmFyLm94ICsgJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzUmVzaXppbmdSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudEJhcklkID09PSBiYXIudGFzaz8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJGJhci5vd2lkdGggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEcmFnZ2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHsgeDogJGJhci5veCArICRiYXIuZmluYWxkeCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RyYWdnaW5nIHx8IGlzUmVzaXppbmdMZWZ0IHx8IGlzUmVzaXppbmdSaWdodCB8fCAhdGhpcy5vcHRpb25zPy5hbGxvd01vdmVtZW50KSB7XG4gICAgICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IGJhci5ncm91cC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlzUmVzaXppbmdMZWZ0ID0gZmFsc2U7XG4gICAgICAgICAgICBpc1Jlc2l6aW5nUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5vbihcbiAgICAgICAgICAgIHRoaXMuJHN2ZyxcbiAgICAgICAgICAgICdtb3VzZXVwJyxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBiYXJzLmZvckVhY2goKGJhcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJGJhci5maW5hbGR4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGJhci5kYXRlQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgICBiYXIuc2V0QWN0aW9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRBbGxEZXBlbmRlbnRUYXNrcyh0YXNrX2lkOiBhbnkpIHtcbiAgICAgICAgbGV0IG91dDogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IHRvUHJvY2VzcyA9IFt0YXNrX2lkXTtcbiAgICAgICAgd2hpbGUgKHRvUHJvY2Vzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcHMgPSB0b1Byb2Nlc3MucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KHRoaXMuZGVwZW5kZW5jeV9tYXBbY3Vycl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQoZGVwcyk7XG4gICAgICAgICAgICB0b1Byb2Nlc3MgPSBkZXBzLmZpbHRlcigoZDogYW55KSA9PiAhdG9Qcm9jZXNzLmluY2x1ZGVzKGQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXQuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNuYXBQb3NpdGlvbihkeDogYW55KSB7XG4gICAgICAgIGNvbnN0IG9keCA9IGR4O1xuICAgICAgICBsZXQgcmVtO1xuICAgICAgICBsZXQgcG9zaXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Ib3VyKSkge1xuICAgICAgICAgICAgcmVtID0gZHggJSAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyA2KTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMTIgPyAwIDogKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyA2KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuV2VlaykpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKCh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gNyk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDE0ID8gMCA6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gNyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLk1vbnRoKSkge1xuICAgICAgICAgICAgcmVtID0gZHggJSAoKHRoaXMub3B0aW9ucz8uY29sdW1uV2lkdGggPz8gMCkgLyAzMCk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSAvIDYwID8gMCA6ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMzApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtID0gZHggJSAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8ICh0aGlzLm9wdGlvbnM/LmNvbHVtbldpZHRoID8/IDApIC8gMiA/IDAgOiAodGhpcy5vcHRpb25zPy5jb2x1bW5XaWR0aCA/PyAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRhc2soaWQ6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrcz8uZmluZCgodGFzazogYW55KSA9PiB0YXNrLmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0T2xkZXN0U3RhcnRpbmdEYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrcz8ubWFwKCh0YXNrOiBhbnkpID0+IHRhc2suX3N0YXJ0KS5yZWR1Y2UoKHByZXZfZGF0ZTogYW55LCBjdXJfZGF0ZTogYW55KSA9PiAoY3VyX2RhdGUgPD0gcHJldl9kYXRlID8gY3VyX2RhdGUgOiBwcmV2X2RhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhcigpIHtcbiAgICAgICAgdGhpcy4kc3ZnLmlubmVySFRNTCA9ICcnO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVfaWQodGFzazogYW55KSB7XG4gICAgcmV0dXJuIHRhc2submFtZSArICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEyKTtcbn1cbiJdfQ==
@@ -54,6 +54,7 @@ export class GanttComponent {
54
54
  viewChanged = new EventEmitter();
55
55
  outer = null;
56
56
  side = null;
57
+ ganttSvg = null;
57
58
  _gantt;
58
59
  ngOnInit() {
59
60
  this._validateViewMode();
@@ -63,7 +64,7 @@ export class GanttComponent {
63
64
  if (this.fullWidth) {
64
65
  this.containerWidth = this.outer?.nativeElement.offsetWidth - this.side?.nativeElement.offsetWidth;
65
66
  }
66
- this._gantt = new Gantt('#gantt', this._filterTask(this.tasks), {
67
+ this._gantt = new Gantt(this.ganttSvg.nativeElement, this._filterTask(this.tasks), {
67
68
  viewMode: this.viewMode,
68
69
  marginBeforeStart: this.marginBeforeStart,
69
70
  marginAfterEnd: this.marginAfterEnd,
@@ -129,11 +130,11 @@ export class GanttComponent {
129
130
  });
130
131
  }
131
132
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
132
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttComponent, selector: "s-gantt", inputs: { columnTitle: "columnTitle", multipleTaskPerLine: "multipleTaskPerLine", showSideTable: "showSideTable", viewMode: "viewMode", tasks: "tasks", marginBeforeStart: "marginBeforeStart", marginAfterEnd: "marginAfterEnd", allowMovement: "allowMovement", hasPopup: "hasPopup", containerWidth: "containerWidth", fullWidth: "fullWidth", showOnlyHours: "showOnlyHours", showOnlyDays: "showOnlyDays" }, outputs: { taskClicked: "taskClicked", taskDateChanged: "taskDateChanged", viewChanged: "viewChanged" }, viewQueries: [{ propertyName: "outer", first: true, predicate: ["outer"], descendants: true }, { propertyName: "side", first: true, predicate: ["side"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"outer\" #outer>\n <div #side>\n @if(showSideTable) {\n <gantt-side-table\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle ?? ''\"\n [multipleTaskPerLine]=\"multipleTaskPerLine\">\n </gantt-side-table>\n }\n </div>\n <svg id=\"gantt\"></svg>\n</div>\n", styles: [".outer{display:flex;justify-content:center;align-items:flex-start;align-content:center;flex-wrap:nowrap;flex-direction:row}\n", ".gantt{border:1px solid #e0e0e0}.gantt .weekend-highlight{fill:#b8c2cc;opacity:.5;stroke:#ebeff2;stroke-width:1}.gantt .grid-background{fill:none}.gantt .grid-header,.gantt .grid-row{fill:#fff}.gantt .grid-row:nth-child(2n){fill:#f5f5f5}.gantt .row-line{stroke:#ebeff2}.gantt .tick{stroke:#e0e0e0;stroke-width:.4}.gantt .tick.thick{stroke:#428bca;stroke-width:2}.gantt .today-highlight{fill:#ffe979;opacity:.5}.gantt .arrow{fill:none;stroke:#666;stroke-width:1.4}.gantt .bar{opacity:.8;stroke:#8d99a6;stroke-width:0;transition:stroke-width .3s ease;-webkit-user-select:none;user-select:none}.gantt .bar-invalid{fill:transparent;stroke:#8d99a6;stroke-dasharray:5;stroke-width:1}.gantt .bar-invalid~.bar-label{fill:#555}.gantt .bar-label{fill:#fff;text-anchor:middle;font-size:12px;font-weight:lighter}.gantt .bar-label.big{fill:#555;text-anchor:start}.gantt .bar-wrapper{cursor:pointer;outline:none}.gantt .bar-wrapper:hover .bar,.gantt .bar-wrapper.active .bar{opacity:1}.gantt .bar-wrapper.active .bar{stroke:#212533;stroke-width:2}.gantt .lower-text,.gantt .upper-text{font-size:12px;text-anchor:middle}.gantt .upper-text{fill:#555}.gantt .lower-text{fill:#333}.gantt .hide{display:none}.gantt-container{border-left:1px solid #e0e0e0;font-size:12px;overflow:auto;position:relative}.gantt-container .title-1{fill:#999;font-size:12px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .title-2{fill:#333;font-size:14px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .popup-wrapper{left:0;position:absolute;top:0}.gantt-container .popup-wrapper .popup{background:#0e1119;border-radius:2px;color:#fff;padding:8px;font-family:\"Open Sans\" sans-serif;line-height:150%;font-weight:400}.gantt-container .popup-wrapper .popup .wrp-title{border-bottom:1px solid #525966;padding-bottom:10px}.gantt-container .popup-wrapper .popup .wrp-title .title{font-size:14px}.gantt-container .popup-wrapper .popup .wrp-subtitle{color:#dfe2e5;padding-top:10px;display:flex;align-items:center}.gantt-container .popup-wrapper .popup .wrp-subtitle .icon{margin-right:10px}.gantt-container .popup-wrapper .popup .wrp-subtitle .subtitle{font-size:12px}.gantt-container .popup-wrapper .popup .pointer{border:6px solid transparent;border-top-color:#0e1119;height:6px;margin-left:-4px;position:absolute}\n"], dependencies: [{ kind: "component", type: i1.SideTableComponent, selector: "gantt-side-table", inputs: ["columnTitle", "tasks", "multipleTaskPerLine"] }], encapsulation: i0.ViewEncapsulation.None });
133
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttComponent, selector: "s-gantt", inputs: { columnTitle: "columnTitle", multipleTaskPerLine: "multipleTaskPerLine", showSideTable: "showSideTable", viewMode: "viewMode", tasks: "tasks", marginBeforeStart: "marginBeforeStart", marginAfterEnd: "marginAfterEnd", allowMovement: "allowMovement", hasPopup: "hasPopup", containerWidth: "containerWidth", fullWidth: "fullWidth", showOnlyHours: "showOnlyHours", showOnlyDays: "showOnlyDays" }, outputs: { taskClicked: "taskClicked", taskDateChanged: "taskDateChanged", viewChanged: "viewChanged" }, viewQueries: [{ propertyName: "outer", first: true, predicate: ["outer"], descendants: true }, { propertyName: "side", first: true, predicate: ["side"], descendants: true }, { propertyName: "ganttSvg", first: true, predicate: ["ganttSvg"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"outer\" #outer>\n <div #side>\n @if(showSideTable) {\n <gantt-side-table\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle ?? ''\"\n [multipleTaskPerLine]=\"multipleTaskPerLine\">\n </gantt-side-table>\n }\n </div>\n <svg #ganttSvg></svg>\n</div>\n", styles: [".outer{display:flex;justify-content:center;align-items:flex-start;align-content:center;flex-wrap:nowrap;flex-direction:row}\n", ".gantt{border:1px solid #e0e0e0}.gantt .weekend-highlight{fill:#b8c2cc;opacity:.5;stroke:#ebeff2;stroke-width:1}.gantt .grid-background{fill:none}.gantt .grid-header,.gantt .grid-row{fill:#fff}.gantt .grid-row:nth-child(2n){fill:#f5f5f5}.gantt .row-line{stroke:#ebeff2}.gantt .tick{stroke:#e0e0e0;stroke-width:.4}.gantt .tick.thick{stroke:#428bca;stroke-width:2}.gantt .today-highlight{fill:#ffe979;opacity:.5}.gantt .arrow{fill:none;stroke:#666;stroke-width:1.4}.gantt .bar{opacity:.8;stroke:#8d99a6;stroke-width:0;transition:stroke-width .3s ease;-webkit-user-select:none;user-select:none}.gantt .bar-invalid{fill:transparent;stroke:#8d99a6;stroke-dasharray:5;stroke-width:1}.gantt .bar-invalid~.bar-label{fill:#555}.gantt .bar-label{fill:#fff;text-anchor:middle;font-size:12px;font-weight:lighter}.gantt .bar-label.big{fill:#555;text-anchor:start}.gantt .bar-wrapper{cursor:pointer;outline:none}.gantt .bar-wrapper:hover .bar,.gantt .bar-wrapper.active .bar{opacity:1}.gantt .bar-wrapper.active .bar{stroke:#212533;stroke-width:2}.gantt .lower-text,.gantt .upper-text{font-size:12px;text-anchor:middle}.gantt .upper-text{fill:#555}.gantt .lower-text{fill:#333}.gantt .hide{display:none}.gantt-container{border-left:1px solid #e0e0e0;font-size:12px;overflow:auto;position:relative}.gantt-container .title-1{fill:#999;font-size:12px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .title-2{fill:#333;font-size:14px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .popup-wrapper{left:0;position:absolute;top:0}.gantt-container .popup-wrapper .popup{background:#0e1119;border-radius:2px;color:#fff;padding:8px;font-family:\"Open Sans\" sans-serif;line-height:150%;font-weight:400}.gantt-container .popup-wrapper .popup .wrp-title{border-bottom:1px solid #525966;padding-bottom:10px}.gantt-container .popup-wrapper .popup .wrp-title .title{font-size:14px}.gantt-container .popup-wrapper .popup .wrp-subtitle{color:#dfe2e5;padding-top:10px;display:flex;align-items:center}.gantt-container .popup-wrapper .popup .wrp-subtitle .icon{margin-right:10px}.gantt-container .popup-wrapper .popup .wrp-subtitle .subtitle{font-size:12px}.gantt-container .popup-wrapper .popup .pointer{border:6px solid transparent;border-top-color:#0e1119;height:6px;margin-left:-4px;position:absolute}\n"], dependencies: [{ kind: "component", type: i1.SideTableComponent, selector: "gantt-side-table", inputs: ["columnTitle", "tasks", "multipleTaskPerLine"] }], encapsulation: i0.ViewEncapsulation.None });
133
134
  }
134
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttComponent, decorators: [{
135
136
  type: Component,
136
- args: [{ selector: 's-gantt', encapsulation: ViewEncapsulation.None, template: "<div class=\"outer\" #outer>\n <div #side>\n @if(showSideTable) {\n <gantt-side-table\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle ?? ''\"\n [multipleTaskPerLine]=\"multipleTaskPerLine\">\n </gantt-side-table>\n }\n </div>\n <svg id=\"gantt\"></svg>\n</div>\n", styles: [".outer{display:flex;justify-content:center;align-items:flex-start;align-content:center;flex-wrap:nowrap;flex-direction:row}\n", ".gantt{border:1px solid #e0e0e0}.gantt .weekend-highlight{fill:#b8c2cc;opacity:.5;stroke:#ebeff2;stroke-width:1}.gantt .grid-background{fill:none}.gantt .grid-header,.gantt .grid-row{fill:#fff}.gantt .grid-row:nth-child(2n){fill:#f5f5f5}.gantt .row-line{stroke:#ebeff2}.gantt .tick{stroke:#e0e0e0;stroke-width:.4}.gantt .tick.thick{stroke:#428bca;stroke-width:2}.gantt .today-highlight{fill:#ffe979;opacity:.5}.gantt .arrow{fill:none;stroke:#666;stroke-width:1.4}.gantt .bar{opacity:.8;stroke:#8d99a6;stroke-width:0;transition:stroke-width .3s ease;-webkit-user-select:none;user-select:none}.gantt .bar-invalid{fill:transparent;stroke:#8d99a6;stroke-dasharray:5;stroke-width:1}.gantt .bar-invalid~.bar-label{fill:#555}.gantt .bar-label{fill:#fff;text-anchor:middle;font-size:12px;font-weight:lighter}.gantt .bar-label.big{fill:#555;text-anchor:start}.gantt .bar-wrapper{cursor:pointer;outline:none}.gantt .bar-wrapper:hover .bar,.gantt .bar-wrapper.active .bar{opacity:1}.gantt .bar-wrapper.active .bar{stroke:#212533;stroke-width:2}.gantt .lower-text,.gantt .upper-text{font-size:12px;text-anchor:middle}.gantt .upper-text{fill:#555}.gantt .lower-text{fill:#333}.gantt .hide{display:none}.gantt-container{border-left:1px solid #e0e0e0;font-size:12px;overflow:auto;position:relative}.gantt-container .title-1{fill:#999;font-size:12px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .title-2{fill:#333;font-size:14px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .popup-wrapper{left:0;position:absolute;top:0}.gantt-container .popup-wrapper .popup{background:#0e1119;border-radius:2px;color:#fff;padding:8px;font-family:\"Open Sans\" sans-serif;line-height:150%;font-weight:400}.gantt-container .popup-wrapper .popup .wrp-title{border-bottom:1px solid #525966;padding-bottom:10px}.gantt-container .popup-wrapper .popup .wrp-title .title{font-size:14px}.gantt-container .popup-wrapper .popup .wrp-subtitle{color:#dfe2e5;padding-top:10px;display:flex;align-items:center}.gantt-container .popup-wrapper .popup .wrp-subtitle .icon{margin-right:10px}.gantt-container .popup-wrapper .popup .wrp-subtitle .subtitle{font-size:12px}.gantt-container .popup-wrapper .popup .pointer{border:6px solid transparent;border-top-color:#0e1119;height:6px;margin-left:-4px;position:absolute}\n"] }]
137
+ args: [{ selector: 's-gantt', encapsulation: ViewEncapsulation.None, template: "<div class=\"outer\" #outer>\n <div #side>\n @if(showSideTable) {\n <gantt-side-table\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle ?? ''\"\n [multipleTaskPerLine]=\"multipleTaskPerLine\">\n </gantt-side-table>\n }\n </div>\n <svg #ganttSvg></svg>\n</div>\n", styles: [".outer{display:flex;justify-content:center;align-items:flex-start;align-content:center;flex-wrap:nowrap;flex-direction:row}\n", ".gantt{border:1px solid #e0e0e0}.gantt .weekend-highlight{fill:#b8c2cc;opacity:.5;stroke:#ebeff2;stroke-width:1}.gantt .grid-background{fill:none}.gantt .grid-header,.gantt .grid-row{fill:#fff}.gantt .grid-row:nth-child(2n){fill:#f5f5f5}.gantt .row-line{stroke:#ebeff2}.gantt .tick{stroke:#e0e0e0;stroke-width:.4}.gantt .tick.thick{stroke:#428bca;stroke-width:2}.gantt .today-highlight{fill:#ffe979;opacity:.5}.gantt .arrow{fill:none;stroke:#666;stroke-width:1.4}.gantt .bar{opacity:.8;stroke:#8d99a6;stroke-width:0;transition:stroke-width .3s ease;-webkit-user-select:none;user-select:none}.gantt .bar-invalid{fill:transparent;stroke:#8d99a6;stroke-dasharray:5;stroke-width:1}.gantt .bar-invalid~.bar-label{fill:#555}.gantt .bar-label{fill:#fff;text-anchor:middle;font-size:12px;font-weight:lighter}.gantt .bar-label.big{fill:#555;text-anchor:start}.gantt .bar-wrapper{cursor:pointer;outline:none}.gantt .bar-wrapper:hover .bar,.gantt .bar-wrapper.active .bar{opacity:1}.gantt .bar-wrapper.active .bar{stroke:#212533;stroke-width:2}.gantt .lower-text,.gantt .upper-text{font-size:12px;text-anchor:middle}.gantt .upper-text{fill:#555}.gantt .lower-text{fill:#333}.gantt .hide{display:none}.gantt-container{border-left:1px solid #e0e0e0;font-size:12px;overflow:auto;position:relative}.gantt-container .title-1{fill:#999;font-size:12px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .title-2{fill:#333;font-size:14px;font-weight:400;line-height:150%;text-anchor:middle}.gantt-container .popup-wrapper{left:0;position:absolute;top:0}.gantt-container .popup-wrapper .popup{background:#0e1119;border-radius:2px;color:#fff;padding:8px;font-family:\"Open Sans\" sans-serif;line-height:150%;font-weight:400}.gantt-container .popup-wrapper .popup .wrp-title{border-bottom:1px solid #525966;padding-bottom:10px}.gantt-container .popup-wrapper .popup .wrp-title .title{font-size:14px}.gantt-container .popup-wrapper .popup .wrp-subtitle{color:#dfe2e5;padding-top:10px;display:flex;align-items:center}.gantt-container .popup-wrapper .popup .wrp-subtitle .icon{margin-right:10px}.gantt-container .popup-wrapper .popup .wrp-subtitle .subtitle{font-size:12px}.gantt-container .popup-wrapper .popup .pointer{border:6px solid transparent;border-top-color:#0e1119;height:6px;margin-left:-4px;position:absolute}\n"] }]
137
138
  }], propDecorators: { columnTitle: [{
138
139
  type: Input
139
140
  }], multipleTaskPerLine: [{
@@ -173,5 +174,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
173
174
  }], side: [{
174
175
  type: ViewChild,
175
176
  args: ['side']
177
+ }], ganttSvg: [{
178
+ type: ViewChild,
179
+ args: ['ganttSvg']
176
180
  }] } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2dhbnR0L3NyYy9saWIvZ2FudHQvZ2FudHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2dhbnR0L3NyYy9saWIvZ2FudHQvZ2FudHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixZQUFZLEVBR1osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQUU3RTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQU9ILE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLDBFQUEwRTtJQUVuRSxXQUFXLENBQVU7SUFFNUIsdUZBQXVGO0lBRWhGLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUVuQyxrRkFBa0Y7SUFFM0UsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU1QixpR0FBaUc7SUFFMUYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFFL0IsdUZBQXVGO0lBRWhGLEtBQUssQ0FBZTtJQUUzQixzRUFBc0U7SUFFL0QsaUJBQWlCLENBQVU7SUFFbEMsK0RBQStEO0lBRXhELGNBQWMsQ0FBVTtJQUUvQixvRkFBb0Y7SUFFN0UsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU1QixtRkFBbUY7SUFFNUUsUUFBUSxHQUFHLElBQUksQ0FBQztJQUV2QixzRkFBc0Y7SUFFL0UsY0FBYyxDQUFVO0lBRS9CLGlGQUFpRjtJ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ICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBFbGVtZW50UmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEdhbnR0IH0gZnJvbSAnLi9jb21wb25lbnRzL2dhbnR0L2dhbnR0JztcbmltcG9ydCB7IFRhc2tHcm91cCwgVGFzaywgRW5yaWNoZWRUYXNrIH0gZnJvbSAnLi9tb2RlbHMvdGFzayc7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJy4vbW9kZWxzL3ZpZXctbW9kZSc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGRpYWdyYW1hIGRlIEdhbnR0IHBhcmEgdmlzdWFsaXphw6fDo28gZSBtYW5pcHVsYcOnw6NvIGRlIHRhcmVmYXNcbiAqIGVtIGxpbmhhIGRvIHRlbXBvLiBTdXBvcnRhIGRpZmVyZW50ZXMgbW9kb3MgZGUgdmlzdWFsaXphw6fDo28gKGRpYSwgc2VtYW5hLCBtw6pzKSxcbiAqIG1vdmltZW50YcOnw6NvIGRlIHRhcmVmYXMgdmlhIGRyYWcgZSBwb3B1cCBkZSBkZXRhbGhlcyBhbyBjbGljYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLWdhbnR0XG4gKiAgIFt0YXNrc109XCJncnVwb3NEZVRhcmVmYXNcIlxuICogICBbdmlld01vZGVdPVwidmlld01vZGVcIlxuICogICAodGFza0NsaWNrZWQpPVwib25UYXNrQ2xpY2FkYSgkZXZlbnQpXCIgLz5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBEYXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1nYW50dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhbnR0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9nYW50dC5jb21wb25lbnQuc2NzcycsICcuL2NvbXBvbmVudHMvZ2FudHQvZ2FudHQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKiBAZGVzY3JpcHRpb24gVMOtdHVsbyBkYSBjb2x1bmEgbGF0ZXJhbCBkZSBpZGVudGlmaWNhw6fDo28gZGFzIHRhcmVmYXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sdW1uVGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFBlcm1pdGUgcmVuZGVyaXphciBtw7psdGlwbGFzIHRhcmVmYXMgbmEgbWVzbWEgbGluaGEuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbXVsdGlwbGVUYXNrUGVyTGluZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFeGliZSBhIHRhYmVsYSBsYXRlcmFsIGNvbSBvcyBub21lcyBkYXMgdGFyZWZhcy4gQGRlZmF1bHQgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dTaWRlVGFibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBNb2RvIGRlIHZpc3VhbGl6YcOnw6NvIGRvIGdhbnR0IChkaWEsIHNlbWFuYSwgbcOqcywgZXRjLikuIEBkZWZhdWx0IFZpZXdNb2RlLkRheSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZpZXdNb2RlID0gVmlld01vZGUuRGF5O1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBncnVwb3MgZGUgdGFyZWZhcyBhIHNlcmVtIHJlbmRlcml6YWRvcy4gQ2FtcG8gb2JyaWdhdMOzcmlvLiAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIHRhc2tzITogVGFza0dyb3VwW107XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE1hcmdlbSBlbSBkaWFzIGFudGVzIGRvIGluw61jaW8gZGEgcHJpbWVpcmEgdGFyZWZhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1hcmdpbkJlZm9yZVN0YXJ0PzogbnVtYmVyO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBNYXJnZW0gZW0gZGlhcyBhcMOzcyBvIGZpbSBkYSDDumx0aW1hIHRhcmVmYS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXJnaW5BZnRlckVuZD86IG51bWJlcjtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgbyBhcnJhc3RhciBkZSB0YXJlZmFzIHBhcmEgYWx0ZXJhciBkYXRhcy4gQGRlZmF1bHQgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFsbG93TW92ZW1lbnQgPSB0cnVlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFeGliZSBwb3B1cCBjb20gZGV0YWxoZXMgYW8gY2xpY2FyIGVtIHVtYSB0YXJlZmEuIEBkZWZhdWx0IHRydWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoYXNQb3B1cCA9IHRydWU7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExhcmd1cmEgZG8gY29udGFpbmVyIGVtIHBpeGVscy4gU2Ugb21pdGlkbywgdXNhIGEgbGFyZ3VyYSBuYXR1cmFsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbnRhaW5lcldpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBGYXogbyBnYW50dCBvY3VwYXIgMTAwJSBkYSBsYXJndXJhIGRpc3BvbsOtdmVsLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFeGliZSBhcGVuYXMgaG9yYXMgbmEgbGluaGEgZG8gdGVtcG8gKGlnbm9yYSBkaWFzKS4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93T25seUhvdXJzID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGFwZW5hcyBkaWFzIG5hIGxpbmhhIGRvIHRlbXBvIChpZ25vcmEgaG9yYXMpLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dPbmx5RGF5cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGNsaWNhIGVtIHVtYSB0YXJlZmEuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHRhc2tDbGlja2VkOiBFdmVudEVtaXR0ZXI8VGFzaz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gYXJyYXN0YSBlIG1vZGlmaWNhIGFzIGRhdGFzIGRlIHVtYSB0YXJlZmEuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHRhc2tEYXRlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gbW9kbyBkZSB2aXN1YWxpemHDp8OjbyDDqSBhbHRlcmFkby4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmlld0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxWaWV3TW9kZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKCdvdXRlcicpXG4gICAgcHVibGljIG91dGVyOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdzaWRlJylcbiAgICBwdWJsaWMgc2lkZTogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfZ2FudHQ/OiBHYW50dDtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVWaWV3TW9kZSgpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVRhc2tzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZnVsbFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gdGhpcy5vdXRlcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIHRoaXMuc2lkZT8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dhbnR0ID0gbmV3IEdhbnR0KCcjZ2FudHQnLCB0aGlzLl9maWx0ZXJUYXNrKHRoaXMudGFza3MpLCB7XG4gICAgICAgICAgICB2aWV3TW9kZTogdGhpcy52aWV3TW9kZSxcbiAgICAgICAgICAgIG1hcmdpbkJlZm9yZVN0YXJ0OiB0aGlzLm1hcmdpbkJlZm9yZVN0YXJ0LFxuICAgICAgICAgICAgbWFyZ2luQWZ0ZXJFbmQ6IHRoaXMubWFyZ2luQWZ0ZXJFbmQsXG4gICAgICAgICAgICBsYW5ndWFnZTogJ3B0LWJyJyxcbiAgICAgICAgICAgIGFsbG93TW92ZW1lbnQ6IHRoaXMuYWxsb3dNb3ZlbWVudCxcbiAgICAgICAgICAgIGhhc1BvcHVwOiB0aGlzLmhhc1BvcHVwLFxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGgsXG4gICAgICAgICAgICBzaG93T25seUhvdXJzOiB0aGlzLnNob3dPbmx5SG91cnMsXG4gICAgICAgICAgICBzaG93T25seURheXM6IHRoaXMuc2hvd09ubHlEYXlzLFxuICAgICAgICAgICAgb25DbGljazogKHRhc2s6IFRhc2spID0+IHRoaXMudGFza0NsaWNrZWQuZW1pdCh0YXNrKSxcbiAgICAgICAgICAgIG9uRGF0ZUNoYW5nZTogKHRhc2s6IFRhc2ssIHN0YXJ0OiBhbnksIGVuZDogYW55KSA9PiB0aGlzLnRhc2tEYXRlQ2hhbmdlZC5lbWl0KHsgdGFzaywgc3RhcnQsIGVuZCB9KSxcbiAgICAgICAgICAgIG9uVmlld0NoYW5nZTogKHZpZXdNb2RlOiBWaWV3TW9kZSkgPT4gdGhpcy52aWV3Q2hhbmdlZC5lbWl0KHZpZXdNb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9nYW50dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZpZXdNb2RlJ10gJiYgIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuX2dhbnR0Lm9wdGlvbnM/LnZpZXdNb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fZ2FudHQub3B0aW9ucy52aWV3TW9kZSA9IGNoYW5nZXNbJ3ZpZXdNb2RlJ10uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZ2FudHQuY2hhbmdlX3ZpZXdfbW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Rhc2tzJ10pIHtcbiAgICAgICAgICAgIHRoaXMuX2dhbnR0LnJlZnJlc2godGhpcy5fZmlsdGVyVGFzayhjaGFuZ2VzWyd0YXNrcyddLmN1cnJlbnRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmlsdGVyVGFzayh0YXNrc0dyb3VwczogVGFza0dyb3VwW10pOiBUYXNrW10ge1xuICAgICAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGVUYXNrUGVyTGluZSkge1xuICAgICAgICAgICAgdGFza3NHcm91cHMuZm9yRWFjaCgoZ3JvdXA6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRhc2tzLnB1c2goLi4uZ3JvdXAudGFza3MubWFwKCh0YXNrOiBFbnJpY2hlZFRhc2spID0+ICh7IC4uLnRhc2ssIF9yb3dfaWQ6IGluZGV4IH0pKSk7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICB0YXNrc0dyb3Vwcy5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGFza3MucHVzaCguLi5ncm91cC50YXNrcy5tYXAoKHRhc2s6IEVucmljaGVkVGFzaykgPT4gKHsgLi4udGFzaywgX3Jvd19pZDogaSsrIH0pKSk7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFza3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVWaWV3TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIVtcbiAgICAgICAgICAgICAgICBWaWV3TW9kZS5RdWFydGVySG91cixcbiAgICAgICAgICAgICAgICBWaWV3TW9kZS5Ib3VyLFxuICAgICAgICAgICAgICAgIFZpZXdNb2RlLlF1YXJ0ZXJEYXksXG4gICAgICAgICAgICAgICAgVmlld01vZGUuSGFsZkRheSxcbiAgICAgICAgICAgICAgICBWaWV3TW9kZS5EYXksXG4gICAgICAgICAgICAgICAgVmlld01vZGUuV2VlayxcbiAgICAgICAgICAgICAgICBWaWV3TW9kZS5Nb250aCxcbiAgICAgICAgICAgICAgICBWaWV3TW9kZS5ZZWFyLFxuICAgICAgICAgICAgXS5pbmNsdWRlcyh0aGlzLnZpZXdNb2RlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnYW50dCB2aWV3IG1vZGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbGlkYXRlVGFza3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFza3MuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGdyb3VwLnRhc2tzLmZvckVhY2goKHRhc2spID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFzay5zdGFydCA+IHRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB0YXNrLiBUaGUgc3RhcnQgZGF0ZSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgZW5kIGRhdGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cIm91dGVyXCIgI291dGVyPlxuICAgIDxkaXYgI3NpZGU+XG4gICAgICAgIEBpZihzaG93U2lkZVRhYmxlKSB7XG4gICAgICAgICAgICA8Z2FudHQtc2lkZS10YWJsZVxuICAgICAgICAgICAgICAgIFt0YXNrc109XCJ0YXNrc1wiXG4gICAgICAgICAgICAgICAgW2NvbHVtblRpdGxlXT1cImNvbHVtblRpdGxlID8/ICcnXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVUYXNrUGVyTGluZV09XCJtdWx0aXBsZVRhc2tQZXJMaW5lXCI+XG4gICAgICAgICAgICA8L2dhbnR0LXNpZGUtdGFibGU+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8c3ZnIGlkPVwiZ2FudHRcIj48L3N2Zz5cbjwvZGl2PlxuIl19
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2dhbnR0L3NyYy9saWIvZ2FudHQvZ2FudHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2dhbnR0L3NyYy9saWIvZ2FudHQvZ2FudHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixZQUFZLEVBR1osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQUU3RTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQU9ILE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLDBFQUEwRTtJQUVuRSxXQUFXLENBQVU7SUFFNUIsdUZBQXVGO0lBRWhGLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUVuQyxrRkFBa0Y7SUFFM0UsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU1QixpR0FBaUc7SUFFMUYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFFL0IsdUZBQXVGO0lBRWhGLEtBQUssQ0FBZTtJQUUzQixzRUFBc0U7SUFFL0QsaUJBQWlCLENBQVU7SUFFbEMsK0RBQStEO0lBRXhELGNBQWMsQ0FBVTtJQUUvQixvRkFBb0Y7SUFFN0UsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU1QixtRkFBbUY7SUFFNUUsUUFBUSxHQUFHLElBQUksQ0FBQztJQUV2QixzRkFBc0Y7SUFFL0UsY0FBYyxDQUFVO0lBRS9CLGlGQUFpRjtJ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SVYsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgR2FudHQgfSBmcm9tICcuL2NvbXBvbmVudHMvZ2FudHQvZ2FudHQnO1xuaW1wb3J0IHsgVGFza0dyb3VwLCBUYXNrLCBFbnJpY2hlZFRhc2sgfSBmcm9tICcuL21vZGVscy90YXNrJztcbmltcG9ydCB7IFZpZXdNb2RlIH0gZnJvbSAnLi9tb2RlbHMvdmlldy1tb2RlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZGlhZ3JhbWEgZGUgR2FudHQgcGFyYSB2aXN1YWxpemHDp8OjbyBlIG1hbmlwdWxhw6fDo28gZGUgdGFyZWZhc1xuICogZW0gbGluaGEgZG8gdGVtcG8uIFN1cG9ydGEgZGlmZXJlbnRlcyBtb2RvcyBkZSB2aXN1YWxpemHDp8OjbyAoZGlhLCBzZW1hbmEsIG3DqnMpLFxuICogbW92aW1lbnRhw6fDo28gZGUgdGFyZWZhcyB2aWEgZHJhZyBlIHBvcHVwIGRlIGRldGFsaGVzIGFvIGNsaWNhci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtZ2FudHRcbiAqICAgW3Rhc2tzXT1cImdydXBvc0RlVGFyZWZhc1wiXG4gKiAgIFt2aWV3TW9kZV09XCJ2aWV3TW9kZVwiXG4gKiAgICh0YXNrQ2xpY2tlZCk9XCJvblRhc2tDbGljYWRhKCRldmVudClcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IERhdGFcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWdhbnR0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2FudHQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dhbnR0LmNvbXBvbmVudC5zY3NzJywgJy4vY29tcG9uZW50cy9nYW50dC9nYW50dC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUw610dWxvIGRhIGNvbHVuYSBsYXRlcmFsIGRlIGlkZW50aWZpY2HDp8OjbyBkYXMgdGFyZWZhcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2x1bW5UaXRsZT86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGVybWl0ZSByZW5kZXJpemFyIG3Dumx0aXBsYXMgdGFyZWZhcyBuYSBtZXNtYSBsaW5oYS4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZVRhc2tQZXJMaW5lID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGEgdGFiZWxhIGxhdGVyYWwgY29tIG9zIG5vbWVzIGRhcyB0YXJlZmFzLiBAZGVmYXVsdCB0cnVlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1NpZGVUYWJsZSA9IHRydWU7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE1vZG8gZGUgdmlzdWFsaXphw6fDo28gZG8gZ2FudHQgKGRpYSwgc2VtYW5hLCBtw6pzLCBldGMuKS4gQGRlZmF1bHQgVmlld01vZGUuRGF5ICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlld01vZGUgPSBWaWV3TW9kZS5EYXk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGdydXBvcyBkZSB0YXJlZmFzIGEgc2VyZW0gcmVuZGVyaXphZG9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgdGFza3MhOiBUYXNrR3JvdXBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTWFyZ2VtIGVtIGRpYXMgYW50ZXMgZG8gaW7DrWNpbyBkYSBwcmltZWlyYSB0YXJlZmEuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWFyZ2luQmVmb3JlU3RhcnQ/OiBudW1iZXI7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE1hcmdlbSBlbSBkaWFzIGFww7NzIG8gZmltIGRhIMO6bHRpbWEgdGFyZWZhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1hcmdpbkFmdGVyRW5kPzogbnVtYmVyO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBvIGFycmFzdGFyIGRlIHRhcmVmYXMgcGFyYSBhbHRlcmFyIGRhdGFzLiBAZGVmYXVsdCB0cnVlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dNb3ZlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIHBvcHVwIGNvbSBkZXRhbGhlcyBhbyBjbGljYXIgZW0gdW1hIHRhcmVmYS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhhc1BvcHVwID0gdHJ1ZTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFyZ3VyYSBkbyBjb250YWluZXIgZW0gcGl4ZWxzLiBTZSBvbWl0aWRvLCB1c2EgYSBsYXJndXJhIG5hdHVyYWwuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29udGFpbmVyV2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEZheiBvIGdhbnR0IG9jdXBhciAxMDAlIGRhIGxhcmd1cmEgZGlzcG9uw612ZWwuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZnVsbFdpZHRoID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGFwZW5hcyBob3JhcyBuYSBsaW5oYSBkbyB0ZW1wbyAoaWdub3JhIGRpYXMpLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dPbmx5SG91cnMgPSBmYWxzZTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRXhpYmUgYXBlbmFzIGRpYXMgbmEgbGluaGEgZG8gdGVtcG8gKGlnbm9yYSBob3JhcykuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd09ubHlEYXlzID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2xpY2EgZW0gdW1hIHRhcmVmYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdGFza0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxUYXNrPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB1c3XDoXJpbyBhcnJhc3RhIGUgbW9kaWZpY2EgYXMgZGF0YXMgZGUgdW1hIHRhcmVmYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdGFza0RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBtb2RvIGRlIHZpc3VhbGl6YcOnw6NvIMOpIGFsdGVyYWRvLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2aWV3Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFZpZXdNb2RlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ291dGVyJylcbiAgICBwdWJsaWMgb3V0ZXI6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ3NpZGUnKVxuICAgIHB1YmxpYyBzaWRlOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdnYW50dFN2ZycpXG4gICAgcHVibGljIGdhbnR0U3ZnOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIF9nYW50dD86IEdhbnR0O1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVZpZXdNb2RlKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlVGFza3MoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mdWxsV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSB0aGlzLm91dGVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gdGhpcy5zaWRlPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZ2FudHQgPSBuZXcgR2FudHQodGhpcy5nYW50dFN2ZyEubmF0aXZlRWxlbWVudCwgdGhpcy5fZmlsdGVyVGFzayh0aGlzLnRhc2tzKSwge1xuICAgICAgICAgICAgdmlld01vZGU6IHRoaXMudmlld01vZGUsXG4gICAgICAgICAgICBtYXJnaW5CZWZvcmVTdGFydDogdGhpcy5tYXJnaW5CZWZvcmVTdGFydCxcbiAgICAgICAgICAgIG1hcmdpbkFmdGVyRW5kOiB0aGlzLm1hcmdpbkFmdGVyRW5kLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdwdC1icicsXG4gICAgICAgICAgICBhbGxvd01vdmVtZW50OiB0aGlzLmFsbG93TW92ZW1lbnQsXG4gICAgICAgICAgICBoYXNQb3B1cDogdGhpcy5oYXNQb3B1cCxcbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiB0aGlzLmNvbnRhaW5lcldpZHRoLFxuICAgICAgICAgICAgc2hvd09ubHlIb3VyczogdGhpcy5zaG93T25seUhvdXJzLFxuICAgICAgICAgICAgc2hvd09ubHlEYXlzOiB0aGlzLnNob3dPbmx5RGF5cyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICh0YXNrOiBUYXNrKSA9PiB0aGlzLnRhc2tDbGlja2VkLmVtaXQodGFzayksXG4gICAgICAgICAgICBvbkRhdGVDaGFuZ2U6ICh0YXNrOiBUYXNrLCBzdGFydDogYW55LCBlbmQ6IGFueSkgPT4gdGhpcy50YXNrRGF0ZUNoYW5nZWQuZW1pdCh7IHRhc2ssIHN0YXJ0LCBlbmQgfSksXG4gICAgICAgICAgICBvblZpZXdDaGFuZ2U6ICh2aWV3TW9kZTogVmlld01vZGUpID0+IHRoaXMudmlld0NoYW5nZWQuZW1pdCh2aWV3TW9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZ2FudHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWyd2aWV3TW9kZSddICYmICFpc051bGxPclVuZGVmaW5lZCh0aGlzLl9nYW50dC5vcHRpb25zPy52aWV3TW9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2dhbnR0Lm9wdGlvbnMudmlld01vZGUgPSBjaGFuZ2VzWyd2aWV3TW9kZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2dhbnR0LmNoYW5nZV92aWV3X21vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWyd0YXNrcyddKSB7XG4gICAgICAgICAgICB0aGlzLl9nYW50dC5yZWZyZXNoKHRoaXMuX2ZpbHRlclRhc2soY2hhbmdlc1sndGFza3MnXS5jdXJyZW50VmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbHRlclRhc2sodGFza3NHcm91cHM6IFRhc2tHcm91cFtdKTogVGFza1tdIHtcbiAgICAgICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlVGFza1BlckxpbmUpIHtcbiAgICAgICAgICAgIHRhc2tzR3JvdXBzLmZvckVhY2goKGdyb3VwOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKC4uLmdyb3VwLnRhc2tzLm1hcCgodGFzazogRW5yaWNoZWRUYXNrKSA9PiAoeyAuLi50YXNrLCBfcm93X2lkOiBpbmRleCB9KSkpO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgdGFza3NHcm91cHMuZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRhc2tzLnB1c2goLi4uZ3JvdXAudGFza3MubWFwKCh0YXNrOiBFbnJpY2hlZFRhc2spID0+ICh7IC4uLnRhc2ssIF9yb3dfaWQ6IGkrKyB9KSkpO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhc2tzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbGlkYXRlVmlld01vZGUoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgVmlld01vZGUuUXVhcnRlckhvdXIsXG4gICAgICAgICAgICAgICAgVmlld01vZGUuSG91cixcbiAgICAgICAgICAgICAgICBWaWV3TW9kZS5RdWFydGVyRGF5LFxuICAgICAgICAgICAgICAgIFZpZXdNb2RlLkhhbGZEYXksXG4gICAgICAgICAgICAgICAgVmlld01vZGUuRGF5LFxuICAgICAgICAgICAgICAgIFZpZXdNb2RlLldlZWssXG4gICAgICAgICAgICAgICAgVmlld01vZGUuTW9udGgsXG4gICAgICAgICAgICAgICAgVmlld01vZGUuWWVhcixcbiAgICAgICAgICAgIF0uaW5jbHVkZXModGhpcy52aWV3TW9kZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2FudHQgdmlldyBtb2RlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGF0ZVRhc2tzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhc2tzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC50YXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2suc3RhcnQgPiB0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGFzay4gVGhlIHN0YXJ0IGRhdGUgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIGVuZCBkYXRlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJvdXRlclwiICNvdXRlcj5cbiAgICA8ZGl2ICNzaWRlPlxuICAgICAgICBAaWYoc2hvd1NpZGVUYWJsZSkge1xuICAgICAgICAgICAgPGdhbnR0LXNpZGUtdGFibGVcbiAgICAgICAgICAgICAgICBbdGFza3NdPVwidGFza3NcIlxuICAgICAgICAgICAgICAgIFtjb2x1bW5UaXRsZV09XCJjb2x1bW5UaXRsZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlVGFza1BlckxpbmVdPVwibXVsdGlwbGVUYXNrUGVyTGluZVwiPlxuICAgICAgICAgICAgPC9nYW50dC1zaWRlLXRhYmxlPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG4gICAgPHN2ZyAjZ2FudHRTdmc+PC9zdmc+XG48L2Rpdj5cbiJdfQ==